98 lines
3.0 KiB
YAML
98 lines
3.0 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"
|
||
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"
|
||
|
||
# Аналитика событий (Блок 3). DDL — в clickhouse/init/.
|
||
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 в .env}
|
||
CLICKHOUSE_DEFAULT_ACCESS_MANAGEMENT: "1"
|
||
volumes:
|
||
- clickhousedata:/var/lib/clickhouse
|
||
- ./clickhouse/init:/docker-entrypoint-initdb.d:ro
|
||
ports:
|
||
- "127.0.0.1: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
|
||
|
||
volumes:
|
||
pgdata:
|
||
clickhousedata:
|