11 KiB
11 KiB
Git Service - Конфигурации
Docker Compose конфигурация
Основной файл: /DOCKER/git/docker-compose.yml
version: '3.8'
services:
gitea:
image: gitea/gitea:latest
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWORD=sG7hZXBQDAtRab9A
- GITEA__server__SSH_DOMAIN=git.aepif.ru
- GITEA__server__SSH_PORT=2222
volumes:
- gitea_data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
depends_on:
- db
networks:
- default
- proxy
labels:
- traefik.enable=true
# HTTP routing
- traefik.http.routers.gitea.rule=Host(`git.aepif.ru`)
- traefik.http.routers.gitea.tls.certresolver=letsencrypt
- traefik.http.services.gitea.loadbalancer.server.port=3000
# TCP routing for SSH
- traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`)
- traefik.tcp.routers.gitea-ssh.entrypoints=ssh
- traefik.tcp.services.gitea-ssh.loadbalancer.server.port=22
restart: unless-stopped
db:
image: postgres:14
container_name: gitea_db
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=sG7hZXBQDAtRab9A
- POSTGRES_DB=gitea
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- default
restart: unless-stopped
volumes:
gitea_data:
external: true
name: gitea_gitea_data
postgres_data:
external: true
name: gitea_postgres_data
networks:
proxy:
external: true
default:
driver: bridge
Gitea конфигурация
Environment Variables
environment:
# User Configuration
- USER_UID=1000 # UID пользователя в контейнере
- USER_GID=1000 # GID пользователя в контейнере
# Database Configuration
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWORD=sG7hZXBQDAtRab9A
# Server Configuration
- GITEA__server__SSH_DOMAIN=git.aepif.ru
- GITEA__server__SSH_PORT=2222
Расширенные настройки через переменные окружения
environment:
# Server Settings
- GITEA__server__DOMAIN=git.aepif.ru
- GITEA__server__ROOT_URL=https://git.aepif.ru
- GITEA__server__DISABLE_SSH=false
- GITEA__server__START_SSH_SERVER=true
- GITEA__server__SSH_PORT=22 # Внутренний SSH порт
- GITEA__server__SSH_LISTEN_PORT=22 # Порт прослушивания в контейнере
# Security Settings
- GITEA__security__INSTALL_LOCK=true
- GITEA__security__SECRET_KEY=your_secret_key_here
# Service Settings
- GITEA__service__DISABLE_REGISTRATION=true
- GITEA__service__REQUIRE_SIGNIN_VIEW=false
- GITEA__service__ENABLE_NOTIFY_MAIL=false
# Repository Settings
- GITEA__repository__DEFAULT_BRANCH=main
- GITEA__repository__ENABLE_PUSH_CREATE_USER=true
- GITEA__repository__ENABLE_PUSH_CREATE_ORG=false
# Webhook Settings
- GITEA__webhook__ALLOWED_HOST_LIST=*
- GITEA__webhook__SKIP_TLS_VERIFY=false
Структура конфигурации app.ini
Gitea также поддерживает конфигурацию через файл app.ini:
# /data/gitea/conf/app.ini внутри контейнера
[database]
DB_TYPE = postgres
HOST = db:5432
NAME = gitea
USER = gitea
PASSWD = sG7hZXBQDAtRab9A
SSL_MODE = disable
[server]
DOMAIN = git.aepif.ru
HTTP_PORT = 3000
ROOT_URL = https://git.aepif.ru/
DISABLE_SSH = false
SSH_DOMAIN = git.aepif.ru
SSH_PORT = 2222
START_SSH_SERVER = true
SSH_LISTEN_PORT = 22
[security]
INSTALL_LOCK = true
SECRET_KEY = your_secret_key_here
[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = false
ENABLE_NOTIFY_MAIL = false
DEFAULT_KEEP_EMAIL_PRIVATE = true
[mailer]
ENABLED = false
[repository]
DEFAULT_BRANCH = main
ENABLE_PUSH_CREATE_USER = true
ENABLE_PUSH_CREATE_ORG = false
[webhook]
ALLOWED_HOST_LIST = *
SKIP_TLS_VERIFY = false
PostgreSQL конфигурация
Database Container Settings
db:
image: postgres:14
container_name: gitea_db
environment:
- POSTGRES_USER=gitea # Пользователь БД
- POSTGRES_PASSWORD=sG7hZXBQDAtRab9A # Пароль БД
- POSTGRES_DB=gitea # Имя базы данных
Дополнительные настройки PostgreSQL
environment:
# Performance Settings
- POSTGRES_SHARED_PRELOAD_LIBRARIES=pg_stat_statements
- POSTGRES_MAX_CONNECTIONS=200
- POSTGRES_SHARED_BUFFERS=256MB
- POSTGRES_EFFECTIVE_CACHE_SIZE=1GB
- POSTGRES_WORK_MEM=4MB
# Logging Settings
- POSTGRES_LOG_STATEMENT=all
- POSTGRES_LOG_MIN_DURATION_STATEMENT=1000
# Backup Settings
- POSTGRES_WAL_LEVEL=replica
- POSTGRES_ARCHIVE_MODE=on
PostgreSQL Volume Configuration
volumes:
postgres_data:
external: true
name: gitea_postgres_data # External volume для персистентности
Traefik Integration Labels
HTTP Routing
labels:
- traefik.enable=true
- traefik.http.routers.gitea.rule=Host(`git.aepif.ru`)
- traefik.http.routers.gitea.tls.certresolver=letsencrypt
- traefik.http.services.gitea.loadbalancer.server.port=3000
TCP Routing для SSH
labels:
# SSH TCP routing
- traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`)
- traefik.tcp.routers.gitea-ssh.entrypoints=ssh
- traefik.tcp.services.gitea-ssh.loadbalancer.server.port=22
Объяснение SSH routing
- HostSNI(
*): Принимает любые TCP соединения на SSH entrypoint - entrypoints=ssh: Использует SSH entrypoint (порт 2222) в Traefik
- port=22: Перенаправляет на порт 22 внутри Gitea контейнера
Networking Configuration
Networks
networks:
proxy:
external: true # Подключение к Traefik
default:
driver: bridge # Внутренняя сеть для Gitea + PostgreSQL
Network Architecture
- proxy network: Для HTTP/HTTPS трафика через Traefik
- default network: Для внутренней связи Gitea ↔ PostgreSQL
- SSH traffic: Напрямую через TCP routing Traefik
Volume Configuration
Gitea Data Volume
gitea_data:
external: true
name: gitea_gitea_data
Содержимое Gitea volume:
- repositories/: Git репозитории
- conf/: Конфигурационные файлы (app.ini)
- log/: Логи Gitea
- data/: Загруженные файлы, аватары
- ssh/: SSH ключи сервера
PostgreSQL Data Volume
postgres_data:
external: true
name: gitea_postgres_data
Содержимое PostgreSQL volume:
- base/: Файлы базы данных
- global/: Глобальные настройки кластера
- pg_wal/: Write-Ahead Log файлы
- pg_tblspc/: Tablespace ссылки
Создание external volumes
# Создание volumes перед запуском
docker volume create gitea_gitea_data
docker volume create gitea_postgres_data
# Проверка созданных volumes
docker volume ls | grep gitea
Time Synchronization
Timezone Configuration
volumes:
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
Это обеспечивает синхронизацию времени контейнера с хост-системой, что важно для:
- Корректных timestamp в Git commits
- Правильного отображения времени в веб-интерфейсе
- Синхронизации с логами других сервисов
Security Configuration
User Permissions
environment:
- USER_UID=1000
- USER_GID=1000
- Gitea запускается под пользователем с UID/GID 1000
- Соответствует обычному пользователю в Linux системах
- Обеспечивает правильные права доступа к файлам
Database Security
- Пароль БД: Случайно сгенерированный пароль
sG7hZXBQDAtRab9A - Изоляция сети: PostgreSQL доступна только из внутренней сети
- SSL отключен: Для внутренней связи в Docker сети
SSH Security
- Отдельный порт: SSH на нестандартном порту 2222
- TCP routing: Прямое подключение через Traefik
- Key management: SSH ключи управляются через веб-интерфейс
Performance Tuning
Gitea Performance Settings
environment:
# Repository settings
- GITEA__repository__DEFAULT_REPO_UNITS=repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki
- GITEA__repository__DEFAULT_PRIVATE=private
# Git settings
- GITEA__git__MAX_GIT_DIFF_LINES=10000
- GITEA__git__MAX_GIT_DIFF_LINE_CHARACTERS=5000
- GITEA__git__MAX_GIT_DIFF_FILES=100
# Session settings
- GITEA__session__PROVIDER=memory
- GITEA__session__PROVIDER_CONFIG=data/sessions
PostgreSQL Performance
environment:
# Connection settings
- POSTGRES_MAX_CONNECTIONS=200
- POSTGRES_SHARED_BUFFERS=256MB
- POSTGRES_EFFECTIVE_CACHE_SIZE=1GB
- POSTGRES_RANDOM_PAGE_COST=1.1
- POSTGRES_WORK_MEM=4MB
Backup Configuration
Automated Backups
# Дополнительный контейнер для backup (опционально)
backup:
image: prodrigestivill/postgres-backup-local
environment:
- POSTGRES_HOST=db
- POSTGRES_DB=gitea
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=sG7hZXBQDAtRab9A
- BACKUP_KEEP_DAYS=7
- BACKUP_KEEP_WEEKS=4
- BACKUP_KEEP_MONTHS=6
volumes:
- ./backups:/backups
depends_on:
- db
Backup Strategy
- Database Backup: Автоматический dump PostgreSQL
- Repository Backup: Резервное копирование Git репозиториев
- Configuration Backup: Сохранение настроек и конфигурации
Monitoring и Logging
Log Configuration
environment:
- GITEA__log__MODE=file
- GITEA__log__LEVEL=Info
- GITEA__log__ROOT_PATH=/data/gitea/log
Health Checks
# Дополнительные health checks
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/api/healthz"]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
Связанные файлы
- Развертывание - пошаговая установка и настройка
- Администрирование - управление пользователями и репозиториями
- ../Traefik Reverse Proxy/Конфигурации - настройки интеграции с reverse proxy