# Git Service - Конфигурации ← **[[Обзор системы|← Назад к обзору]]** ## Docker Compose конфигурация ### Основной файл: `/DOCKER/git/docker-compose.yml` ```yaml 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 ```yaml 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 ``` ### Расширенные настройки через переменные окружения ```yaml 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`: ```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 ```yaml db: image: postgres:14 container_name: gitea_db environment: - POSTGRES_USER=gitea # Пользователь БД - POSTGRES_PASSWORD=sG7hZXBQDAtRab9A # Пароль БД - POSTGRES_DB=gitea # Имя базы данных ``` ### Дополнительные настройки PostgreSQL ```yaml 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 ```yaml volumes: postgres_data: external: true name: gitea_postgres_data # External volume для персистентности ``` ## Traefik Integration Labels ### HTTP Routing ```yaml 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 ```yaml 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 ```yaml 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 ```yaml gitea_data: external: true name: gitea_gitea_data ``` **Содержимое Gitea volume:** - **repositories/**: Git репозитории - **conf/**: Конфигурационные файлы (app.ini) - **log/**: Логи Gitea - **data/**: Загруженные файлы, аватары - **ssh/**: SSH ключи сервера ### PostgreSQL Data Volume ```yaml postgres_data: external: true name: gitea_postgres_data ``` **Содержимое PostgreSQL volume:** - **base/**: Файлы базы данных - **global/**: Глобальные настройки кластера - **pg_wal/**: Write-Ahead Log файлы - **pg_tblspc/**: Tablespace ссылки ### Создание external volumes ```bash # Создание volumes перед запуском docker volume create gitea_gitea_data docker volume create gitea_postgres_data # Проверка созданных volumes docker volume ls | grep gitea ``` ## Time Synchronization ### Timezone Configuration ```yaml volumes: - /etc/timezone:/etc/timezone:ro - /etc/localtime:/etc/localtime:ro ``` Это обеспечивает синхронизацию времени контейнера с хост-системой, что важно для: - Корректных timestamp в Git commits - Правильного отображения времени в веб-интерфейсе - Синхронизации с логами других сервисов ## Security Configuration ### User Permissions ```yaml 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 ```yaml 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 ```yaml 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 ```yaml # Дополнительный контейнер для 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 1. **Database Backup**: Автоматический dump PostgreSQL 2. **Repository Backup**: Резервное копирование Git репозиториев 3. **Configuration Backup**: Сохранение настроек и конфигурации ## Monitoring и Logging ### Log Configuration ```yaml environment: - GITEA__log__MODE=file - GITEA__log__LEVEL=Info - GITEA__log__ROOT_PATH=/data/gitea/log ``` ### Health Checks ```yaml # Дополнительные 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