Gogs: полный гайд по self-hosting Git-сервера

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

Не указано
Алексей Кузнецов
Алексей Кузнецов
Системный администратор16 января 2026 г.

Подготовка сервера и установка 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

Как самостоятельно развернуть Gogs — безболезненный self-hosted Git-сервис

Введение

Самостоятельный Git-сервер предоставляет полный контроль над кодом, гарантирует приватность данных и освобождает от зависимости от внешних SaaS-сервисов. Gogs (Go Git Service) — это легковесное open-source решение для хостинга репозиториев с минимальными требованиями к ресурсам и простым интерфейсом, совместимым с GitHub.

Представление Gogs

Преимущества Gogs:

  • Легковесность: написан на Go, не требует Java или сложных зависимостей.
  • Простота: минимальная настройка, работа из коробки.
  • Open Source: лицензия MIT, активное сообщество.
  • Производительность: занимает <50 MB RAM, работает даже на Raspberry Pi.

Альтернативы:

  • Gitea: форк Gogs с более частыми обновлениями и расширенными функциями.
  • GitLab: полноценная платформа с CI/CD, но требует значительных ресурсов.

Требования и подготовка

Минимальные требования:

  • ОС: Linux (Ubuntu/Debian рекомендуется), Windows или macOS.
  • Ресурсы: 1 CPU core, 512 MB RAM, 5 GB свободного места.
  • Docker: версия 20.10+ (если используется Docker-версия).
  • Доступ к порту 80/443 (для веб) и 22 (для SSH).

Подготовка сервера:

  1. Обновите систему:
    sudo apt update && sudo apt upgrade -y
    
  2. Установите Docker и Docker Compose:
    curl -fsSL https://get.docker.com -o get-docker.sh
    sudo sh get-docker.sh
    sudo usermod -aG docker $USER
    newgrp docker
    

Шаг 1: Выбор окружения

Рекомендация: Docker-версия — изолированная среда, легкое обновление, отсутствие конфликтов зависимостей.

Альтернатива: нативная установка — для специфических требований (например, использование системной PostgreSQL). Инструкции по нативной установке доступны на официальном сайте Gogs.

Шаг 2: Развертывание через Docker Compose

Создайте директорию для проекта:

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"    # SSH (опционально, если не используется хостовый SSH)
    volumes:
      - ./gogs_data:/data
    environment:
      - USER_UID=1000
      - USER_GID=1000
    networks:
      - gogs-net

  # Внешняя база данных (опционально, SQLite используется по умолчанию)
  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

Примечания:

  • Для простоты используется SQLite (база данных в файле), PostgreSQL добавляется при необходимости.
  • Порт 2222 пробрасывается для SSH, если хостовый SSH занят портом 22.

Запустите контейнеры:

docker compose up -d

Проверьте статус:

docker compose ps

Шаг 3: Первоначальная настройка

Откройте в браузере: http://<IP-сервера>:3000 (или http://localhost:3000 если на локальной машине).

Конфигурация веб-интерфейса:

  1. База данных: Выберите SQLite (по умолчанию) или подключение к PostgreSQL (указать параметры из docker-compose.yml).
  2. Администратор: Создайте учетную запись администратора (логин, email, пароль).
  3. Сервер: Оставьте настройки по умолчанию (путь к репозиториям: /data/git/repositories, SSH-порт: 2222).
  4. Email (опционально): Настройте SMTP для уведомлений (например, через Gmail или самосервер).

Нажмите "Install Gogs". После установки войдите как администратор.

Шаг 4: Создание первого репозитория и настройка SSH/HTTPS

Создание репозитория:

  1. В интерфейсе Gogs нажмите "Новый репозиторий".
  2. Заполните имя, описание, выберите публичный или приватный доступ.
  3. Создайте репозиторий.

Настройка SSH:

  1. Сгенерируйте SSH-ключи на клиентской машине (если их нет):
    ssh-keygen -t ed25519 -C "your_email@example.com"
    
  2. В интерфейсе Gogs перейдите в "Настройки" → "SSH и GPG-ключи".
  3. Добавьте публичный ключ (из ~/.ssh/id_ed25519.pub).
  4. Для клонирования через SSH используйте адрес:
    git clone ssh://git@<IP-сервера>:2222/username/repo.git
    

Настройка HTTPS:

  1. Создайте токен доступа в "Настройки" → "Токены доступа".
  2. Клонируйте через HTTPS:
    git clone https://git:<token>@<IP-сервера>:3000/username/repo.git
    

Шаг 5: Интеграция с CI/CD

Вариант 1: Gitea Actions (для Gitea, но Gogs поддерживает Webhooks) Gogs не имеет встроенного CI/CD, но поддерживает Webhooks для интеграции с внешними системами.

Вариант 2: Drone CI Drone — легковесный CI-сервер, интегрируемый с Gogs.

  1. Добавьте в docker-compose.yml сервис Drone:

    drone:
      image: drone/drone:latest
      container_name: drone
      restart: unless-stopped
      ports:
        - "8080:8080"
      environment:
        - DRONE_SERVER_HOST=<IP-сервера>:8080
        - DRONE_RPC_SECRET=<генерированный секрет>
        - DRONE_GOGS=true
        - DRONE_GOGS_URL=http://<IP-сервера>:3000
        - DRONE_GOGS_SKIP_VERIFY=false
      volumes:
        - ./drone_data:/data
      networks:
        - gogs-net
    
  2. Создайте Webhook в Gogs для репозитория: "Настройки" → "Webhooks" → "Добавить webhook" (URL Drone, секрет).

Альтернатива: GitLab Runner или Jenkins для сложных сценариев.

Шаг 6: Настройка бэкапа данных

Данные для бэкапа:

  • База данных (если SQLite: файл /data/gogs.db в контейнере; PostgreSQL: том ./postgres_data).
  • Хранилище репозиториев (/data/git/repositories).
  • Конфигурация (/data/app.ini).

Пример скрипта бэкапа (добавить в crontab):

#!/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

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

Расписание: Добавьте в crontab:

0 2 * * * /path/to/backup_script.sh

Шаг 7: Настройка reverse proxy (Nginx) и SSL

Установка Nginx:

sudo apt install 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;
        proxy_set_header X-Forwarded-Host $host;
    }
}

Включите конфигурацию:

sudo ln -s /etc/nginx/sites-available/gogs.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

SSL от Let's Encrypt (через Certbot):

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d git.example.com

Certbot автоматически обновит Nginx-конфигурацию с SSL.

Обновление Gogs для использования обратного прокси: В настройках Gogs (Настройки сервера → Адрес сервера) укажите:

  • Серверный URL: https://git.example.com
  • HTTP(S) порт: 443
  • Протокол: HTTPS

Шаг 8: Углубленная конфигурация

Настройки сервера (файл app.ini в /data/ контейнера):

[server]
DOMAIN = git.example.com
HTTP_PORT = 3000
ROOT_URL = https://git.example.com/
ENABLE_LOG_ROTATION = true
ENABLE_STATIC_MODE = false

[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = true
DISABLE_REGISTRATION = false
REQUIRE_SIGNIN_VIEW = true
SHOW_REGISTRATION_BUTTON = false
SHOW_MIRRORS = true
SHOW_FORGE_PULLED_MERGE = true
SHOW_FORGE_PULL_MERGE = true
SHOW_FORGEPushPullMerge = 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

Лимиты (защита от DoS):

[repository]
MAX_SIZE = 50  # Макс. размер репозитория в МБ
MAX_TICKETS = 1000
MAX_FILES = 10000

[lfs]
ENABLED = true
MAX_SIZE = 50

Перезапуск контейнера после изменений:

docker compose restart gogs

Заключение

Вы развернули полноценный self-hosted Git-сервер Gogs с базовой CI/CD, бэкапами и SSL. Сервис готов к использованию для командной разработки.

Полезные ссылки:

Призыв к действию: Начните с простого репозитория, протестируйте workflows, а затем расширяйте функционал под ваши задачи. Удачи!

Поделиться:TelegramX / TwitterVK