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