261 lines
7.4 KiB
Bash
Executable File
261 lines
7.4 KiB
Bash
Executable File
#!/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 после восстановления
|