DispelEvilBot/docker-compose.prod.yml

143 lines
5.2 KiB
YAML
Raw Permalink 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.

# Прод/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"
CLICKHOUSE_HOST: clickhouse
CLICKHOUSE_PORT: "8123"
depends_on:
postgres:
condition: service_healthy
migrate:
condition: service_completed_successfully
# Без ожидания здоровья: аналитика некритична, бот работает и при недоступном ClickHouse.
clickhouse:
condition: service_started
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"
CLICKHOUSE_HOST: clickhouse
CLICKHOUSE_PORT: "8123"
ADMIN_HOST: 0.0.0.0
ADMIN_PORT: "8000"
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"
# Аналитика событий (docs/events.md). Наружу не публикуется:
# только loopback хоста для бэкапа/туннеля; бот ходит внутрь сети compose.
clickhouse:
image: clickhouse/clickhouse-server:25.3
restart: unless-stopped
environment:
CLICKHOUSE_DB: ${CLICKHOUSE_DB:-analytics}
CLICKHOUSE_USER: ${CLICKHOUSE_USER:-de_bot}
CLICKHOUSE_PASSWORD: ${CLICKHOUSE_PASSWORD:?задайте CLICKHOUSE_PASSWORD}
# Нужно для создания пользователей/грантов (в финале — read-only пользователь для Superset).
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: "1"
volumes:
- clickhousedata:/var/lib/clickhouse
# DDL применяется один раз при первой инициализации (пустой data-каталог).
- ./clickhouse/init:/docker-entrypoint-initdb.d:ro
ports:
# Порт контура задаётся в env (prod 8123, test 8124) — иначе конфликт на одной VPS.
- "127.0.0.1:${CLICKHOUSE_HTTP_PORT:-8123}:8123"
ulimits:
nofile:
soft: 262144
hard: 262144
healthcheck:
test: ["CMD-SHELL", "wget --spider -q -T 5 http://127.0.0.1:8123/ping || exit 1"]
interval: 15s
timeout: 10s
retries: 10
start_period: 20s
# --- 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:
clickhousedata:
# caddy_data:
# caddy_config: