Files
Andrey Epifancev e96fec3709 Реорганизация структуры заметок v2.0
- Создана новая организационная структура с эмодзи-папками
- Добавлена система Inbox для быстрого захвата идей
- Созданы шаблоны для всех типов заметок с YAML метаданными
- Перенесен весь контент из старой структуры в новую
- Добавлен главный дашборд с динамическими запросами
- Создано подробное руководство по использованию системы
- Техническая документация реорганизована по типам

Основные улучшения:
 Inbox-first подход для новых заметок
 Тематическая организация по 8 областям знаний
 Шаблоны с метаданными для структурированности
 Система связей между заметками
 Динамические дашборды с аналитикой
 Централизованная техническая документация без дублирования
2025-08-09 22:11:50 +04:00

11 KiB
Raw Permalink Blame History

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

  1. Database Backup: Автоматический dump PostgreSQL
  2. Repository Backup: Резервное копирование Git репозиториев
  3. 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

Связанные файлы