Gogs: Полный гайд по self-hosting Git-сервера (Docker, настройка, бэкап)

Пошаговый гайд по самостоятельному развертыванию приватного Git-сервера Gogs на Docker. Настройка, доступ, интеграция с CI/CD и безопасность для вашего homelab.

Не указано

Подготовка сервера и установка Docker

Обновите системные пакеты и установите Docker и Docker Compose для управления контейнерами.

sudo apt update && sudo apt upgrade -y
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker

Создание директории и файла docker-compose.yml

Создайте отдельную директорию для Gogs и создайте в ней файл docker-compose.yml с настройками контейнеров Gogs и опциональной базы данных PostgreSQL.

mkdir gogs && cd gogs

# Создать файл docker-compose.yml со следующим содержимым:
version: "3.8"

services:
  gogs:
    image: gogs/gogs:latest
    container_name: gogs
    restart: unless-stopped
    ports:
      - "3000:3000"
      - "2222:22"
    volumes:
      - ./gogs_data:/data
    environment:
      - USER_UID=1000
      - USER_GID=1000
    networks:
      - gogs-net

  postgres:
    image: postgres:14-alpine
    container_name: gogs_db
    restart: unless-stopped
    environment:
      - POSTGRES_USER=gogs
      - POSTGRES_PASSWORD=gogs_password
      - POSTGRES_DB=gogs
    volumes:
      - ./postgres_data:/var/lib/postgresql/data
    networks:
      - gogs-net

networks:
  gogs-net:
    driver: bridge

Запуск контейнеров

Запустите контейнеры в фоновом режиме и проверьте их статус.

docker compose up -d
docker compose ps

Первоначальная настройка в веб-интерфейсе

Откройте браузер по адресу http://<IP-сервера>:3000. Выберите базу данных (SQLite по умолчанию или PostgreSQL, указав параметры из docker-compose.yml), создайте учетную запись администратора и нажмите 'Install Gogs'.

http://<IP-сервера>:3000

Настройка SSH для доступа к репозиториям

Сгенерируйте SSH-ключ на клиенте, добавьте публичный ключ в настройки Gogs (SSH и GPG-ключи) и используйте специальный порт для клонирования.

# Генерация ключа (если нет)
ssh-keygen -t ed25519 -C "your_email@example.com"

# Клонирование репозитория через SSH
git clone ssh://git@<IP-сервера>:2222/username/repo.git

Настройка бэкапа данных

Создайте скрипт для резервного копирования данных контейнера (репозитории, база данных, конфигурация) и добавьте его в cron для автоматического выполнения.

# Пример скрипта backup_script.sh
#!/bin/bash
BACKUP_DIR="/path/to/backups/gogs"
DATE=$(date +%Y%m%d_%H%M%S)

# Бэкап данных контейнера
docker compose exec gogs tar czf /tmp/gogs_backup.tar.gz /data

# Копирование на хост
docker compose cp gogs:/tmp/gogs_backup.tar.gz $BACKUP_DIR/gogs_backup_$DATE.tar.gz

# Очистка старых бэкапов
find $BACKUP_DIR -name "gogs_backup_*.tar.gz" -mtime +30 -delete

# Добавление в crontab (ежедневно в 02:00)
0 2 * * * /path/to/backup_script.sh

Настройка обратного прокси (Nginx) и SSL

Установите Nginx и Certbot. Создайте конфигурацию Nginx для проксирования трафика на Gogs и получите SSL-сертификат Let's Encrypt. Обновите настройки Gogs, указав внешний домен и HTTPS.

# Установка
sudo apt install nginx certbot python3-certbot-nginx

# Конфигурация Nginx (/etc/nginx/sites-available/gogs.conf)
server {
    listen 80;
    server_name git.example.com;

    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

# Включение конфигурации и перезагрузка
sudo ln -s /etc/nginx/sites-available/gogs.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

# Получение SSL сертификата
sudo certbot --nginx -d git.example.com

Углубленная конфигурация (app.ini)

При необходимости отредактируйте конфигурационный файл app.ini, расположенный в ./gogs_data/gogs/conf/app.ini (на хосте) или внутри контейнера по пути /data/app.ini. Пример настройки почты, лимитов репозиториев и внешнего URL.

[server]
DOMAIN = git.example.com
HTTP_PORT = 3000
ROOT_URL = https://git.example.com/

[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = true
DISABLE_REGISTRATION = false
REQUIRE_SIGNIN_VIEW = true

[mail]
ENABLED = true
PROTOCOL = smtp
SMTP_ADDR = smtp.gmail.com
SMTP_PORT = 587
USER = your.email@gmail.com
PASSWD = ваш_пароль_приложения
FROM = your.email@gmail.com

[repository]
MAX_SIZE = 50

# После изменения файла перезапустите контейнер
docker compose restart gogs