100 lines
2.7 KiB
YAML
100 lines
2.7 KiB
YAML
# Базовый 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:
|