#!/bin/bash # # Скрипт установки Gitea в LXC контейнере # Запускать внутри LXC контейнера # База данных: PostgreSQL # set -e # ============================================ # НАСТРОЙКИ # ============================================ # Версия Gitea (должна совпадать с версией из бэкапа!) # Проверьте актуальную на https://github.com/go-gitea/gitea/releases GITEA_VERSION="${GITEA_VERSION:-1.25.3}" # Порт Gitea GITEA_PORT="${GITEA_PORT:-3000}" # SSH порт для Git GITEA_SSH_PORT="${GITEA_SSH_PORT:-22}" # Домен/IP сервера (обновите на свой) GITEA_DOMAIN="${GITEA_DOMAIN:-$(hostname -I | awk '{print $1}')}" # PostgreSQL настройки DB_HOST="${DB_HOST:-127.0.0.1}" DB_PORT="${DB_PORT:-5432}" DB_USER="${DB_USER:-gitea}" DB_NAME="${DB_NAME:-gitea}" DB_PASSWORD="${DB_PASSWORD:-gitea}" # ============================================ # ФУНКЦИИ # ============================================ log() { echo -e "\033[1;32m[$(date '+%H:%M:%S')]\033[0m $1" } error() { echo -e "\033[1;31m[ERROR]\033[0m $1" >&2 exit 1 } # ============================================ # ПРОВЕРКИ # ============================================ if [ "$EUID" -ne 0 ]; then error "Запустите скрипт от root: sudo $0" fi log "=== Установка Gitea v${GITEA_VERSION} ===" log "Домен: $GITEA_DOMAIN" log "Порт: $GITEA_PORT" log "База данных: PostgreSQL ($DB_USER@$DB_NAME)" # ============================================ # УСТАНОВКА ЗАВИСИМОСТЕЙ # ============================================ log "Обновление системы..." apt update && apt upgrade -y log "Установка зависимостей..." apt install -y git curl wget ca-certificates gnupg unzip # ============================================ # УСТАНОВКА POSTGRESQL # ============================================ log "Установка PostgreSQL..." apt install -y postgresql postgresql-contrib systemctl enable postgresql systemctl start postgresql # Создание пользователя и БД log "Создание пользователя и базы данных PostgreSQL..." sudo -u postgres psql -c "CREATE USER $DB_USER WITH PASSWORD '$DB_PASSWORD';" 2>/dev/null || \ log " Пользователь $DB_USER уже существует" sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_USER;" 2>/dev/null || \ log " База данных $DB_NAME уже существует" sudo -u postgres psql -c "ALTER USER $DB_USER WITH SUPERUSER;" 2>/dev/null || true log " ✓ PostgreSQL настроен: $DB_USER@$DB_NAME" # ============================================ # СОЗДАНИЕ ПОЛЬЗОВАТЕЛЯ GIT # ============================================ log "Создание пользователя git..." if ! id "git" &>/dev/null; then adduser --system --shell /bin/bash --gecos 'Git Version Control' \ --group --disabled-password --home /home/git git fi # ============================================ # СОЗДАНИЕ ДИРЕКТОРИЙ # ============================================ log "Создание директорий..." mkdir -p /var/lib/gitea/{custom,data,log} mkdir -p /var/lib/gitea/data/gitea-repositories mkdir -p /etc/gitea chown -R git:git /var/lib/gitea chown root:git /etc/gitea chmod 770 /etc/gitea # ============================================ # СКАЧИВАНИЕ GITEA # ============================================ log "Скачивание Gitea v${GITEA_VERSION}..." GITEA_URL="https://dl.gitea.io/gitea/${GITEA_VERSION}/gitea-${GITEA_VERSION}-linux-amd64" wget -q --show-progress -O /usr/local/bin/gitea "$GITEA_URL" chmod +x /usr/local/bin/gitea # Проверка INSTALLED_VERSION=$(/usr/local/bin/gitea --version 2>&1 | head -1) log "Установлено: $INSTALLED_VERSION" # ============================================ # SYSTEMD СЕРВИС # ============================================ log "Создание systemd сервиса..." cat > /etc/systemd/system/gitea.service << 'EOF' [Unit] Description=Gitea (Git with a cup of tea) After=syslog.target After=network.target After=postgresql.service [Service] RestartSec=2s Type=simple User=git Group=git WorkingDirectory=/var/lib/gitea/ ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini Restart=always Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea [Install] WantedBy=multi-user.target EOF # ============================================ # БАЗОВАЯ КОНФИГУРАЦИЯ # ============================================ log "Создание базовой конфигурации..." cat > /etc/gitea/app.ini << EOF APP_NAME = Gitea: Git with a cup of tea RUN_USER = git RUN_MODE = prod WORK_PATH = /var/lib/gitea [database] DB_TYPE = postgres HOST = ${DB_HOST}:${DB_PORT} NAME = $DB_NAME USER = $DB_USER PASSWD = $DB_PASSWORD SSL_MODE = disable LOG_SQL = false [repository] ROOT = /var/lib/gitea/data/gitea-repositories [server] DOMAIN = $GITEA_DOMAIN HTTP_PORT = $GITEA_PORT ROOT_URL = http://$GITEA_DOMAIN:$GITEA_PORT/ DISABLE_SSH = false SSH_DOMAIN = $GITEA_DOMAIN SSH_PORT = $GITEA_SSH_PORT SSH_LISTEN_PORT = $GITEA_SSH_PORT LFS_START_SERVER = true LFS_CONTENT_PATH = /var/lib/gitea/data/lfs OFFLINE_MODE = false [mailer] ENABLED = false [service] REGISTER_EMAIL_CONFIRM = false ENABLE_NOTIFY_MAIL = false DISABLE_REGISTRATION = false ALLOW_ONLY_EXTERNAL_REGISTRATION = false ENABLE_CAPTCHA = false REQUIRE_SIGNIN_VIEW = false DEFAULT_KEEP_EMAIL_PRIVATE = false DEFAULT_ALLOW_CREATE_ORGANIZATION = true DEFAULT_ENABLE_TIMETRACKING = true NO_REPLY_ADDRESS = noreply.$GITEA_DOMAIN [openid] ENABLE_OPENID_SIGNIN = true ENABLE_OPENID_SIGNUP = true [session] PROVIDER = file [log] MODE = console LEVEL = info ROOT_PATH = /var/lib/gitea/log [security] INSTALL_LOCK = false EOF chown root:git /etc/gitea/app.ini chmod 640 /etc/gitea/app.ini # ============================================ # ЗАПУСК СЕРВИСА # ============================================ log "Запуск Gitea..." systemctl daemon-reload systemctl enable gitea systemctl start gitea # Ждём запуска sleep 3 # Проверяем статус if systemctl is-active --quiet gitea; then log "✅ Gitea успешно запущена!" else error "Gitea не запустилась. Проверьте: journalctl -u gitea -e" fi # ============================================ # ИТОГИ # ============================================ echo "" echo "==========================================" echo " Gitea установлена!" echo "==========================================" echo "" echo " Web UI: http://$GITEA_DOMAIN:$GITEA_PORT" echo " SSH: git@$GITEA_DOMAIN" echo "" echo " Первый пользователь станет администратором." echo "" echo " Конфигурация: /etc/gitea/app.ini" echo " Данные: /var/lib/gitea/" echo " Логи: journalctl -u gitea -f" echo "" echo "==========================================" # Для миграции: установить INSTALL_LOCK = true после восстановления