DispelEvilBot/docker-compose.yml

100 lines
2.7 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.

# Базовый compose для локального запуска и разработки.
# Секреты берутся из .env (см. .env.example).
#
# docker compose up --build
#
name: dispelevilbot
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 в .env}
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
# ports:
# - "5432:5432" # раскомментировать для доступа к БД с хоста
# Накат миграций Flyway перед стартом бота (идемпотентно).
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 в .env}
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:
build: .
image: dispelevilbot-bot:local
restart: unless-stopped
env_file:
- .env
environment:
# Внутри сети compose БД доступна по имени сервиса.
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 + HTMX). Порт — только loopback: наружу выйдет через reverse proxy
# вместе с TLS и доменом (Блок 2.4/4.2).
admin:
build:
context: .
dockerfile: admin/Dockerfile
image: dispelevilbot-admin:local
restart: unless-stopped
env_file:
- .env
environment:
DB_HOST: postgres
DB_PORT: "5432"
ADMIN_HOST: 0.0.0.0
ADMIN_PORT: "8000"
volumes:
- media:/app/media
ports:
- "${ADMIN_BIND_IP:-127.0.0.1}:${ADMIN_HTTP_PORT:-8000}:8000"
depends_on:
postgres:
condition: service_healthy
migrate:
condition: service_completed_successfully
logging:
driver: json-file
options:
max-size: "10m"
max-file: "3"
volumes:
pgdata:
media: