# Прод/test-контур: образы тянутся из Gitea Registry. # # Контуры разделяются именем compose-проекта (-p) и файлом окружения (ENV_FILE): # ENV_FILE=env/prod.env docker compose -p prod -f docker-compose.prod.yml up -d # ENV_FILE=env/test.env docker compose -p test -f docker-compose.prod.yml up -d # # Имя проекта задаёт отдельные volume'ы (pgdata) — у prod и test свои БД. services: postgres: image: postgres:16-alpine restart: unless-stopped environment: POSTGRES_DB: ${DB_NAME:-dispel_evil} POSTGRES_USER: ${DB_USER:-de_admin} POSTGRES_PASSWORD: ${DB_PASSWORD:?задайте DB_PASSWORD} volumes: - pgdata:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-de_admin} -d ${DB_NAME:-dispel_evil}"] interval: 10s timeout: 5s retries: 10 migrate: image: flyway/flyway:10 command: ["migrate"] environment: FLYWAY_URL: jdbc:postgresql://postgres:5432/${DB_NAME:-dispel_evil} FLYWAY_USER: ${DB_USER:-de_admin} FLYWAY_PASSWORD: ${DB_PASSWORD:?задайте DB_PASSWORD} FLYWAY_LOCATIONS: filesystem:/flyway/sql FLYWAY_BASELINE_ON_MIGRATE: "true" FLYWAY_CONNECT_RETRIES: "10" volumes: - ./sql:/flyway/sql:ro depends_on: postgres: condition: service_healthy restart: "no" bot: image: ${REGISTRY:-git.mpakosrv.ru}/mpakobecex/dispelevilbot-bot:${IMAGE_TAG:-latest} restart: unless-stopped env_file: - ${ENV_FILE:-env/prod.env} environment: DB_HOST: postgres DB_PORT: "5432" volumes: - media:/app/media depends_on: postgres: condition: service_healthy migrate: condition: service_completed_successfully logging: driver: json-file options: max-size: "10m" max-file: "3" # Админка (FastAPI + Jinja2/HTMX), образ из Gitea Registry. # Наружу пока не публикуется: только loopback хоста; домен/TLS — Блок 2.4/4.2. admin: image: ${REGISTRY:-git.mpakosrv.ru}/mpakobecex/dispelevilbot-admin:${IMAGE_TAG:-latest} restart: unless-stopped env_file: - ${ENV_FILE:-env/prod.env} environment: DB_HOST: postgres DB_PORT: "5432" ADMIN_HOST: 0.0.0.0 ADMIN_PORT: "8000" volumes: - media:/app/media ports: # По умолчанию только loopback. Для NPM (контейнер) задайте ADMIN_BIND_IP=172.17.0.1: # порт остаётся недоступен из интернета, но виден контейнерам на bridge. - "${ADMIN_BIND_IP:-127.0.0.1}:${ADMIN_HTTP_PORT:-8101}:8000" depends_on: postgres: condition: service_healthy migrate: condition: service_completed_successfully logging: driver: json-file options: max-size: "10m" max-file: "3" # --- Reverse proxy и TLS (Блок 2.4) --- # Включается, когда появится админка/Mini App (Блоки 4–5). # Раскомментировать и положить deploy/Caddyfile: # # caddy: # image: caddy:2 # restart: unless-stopped # ports: # - "80:80" # - "443:443" # volumes: # - ./deploy/Caddyfile:/etc/caddy/Caddyfile:ro # - caddy_data:/data # - caddy_config:/config volumes: pgdata: media: # caddy_data: # caddy_config: