Files
second-mind-aep/Мой сервер/Git Service/Конфигурации.md
2025-08-04 16:12:28 +04:00

409 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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