klg-asutk-app/docker-compose.yml
Yuriy 646401299c fix: AUTH_DEPENDENCY ordering, setup_scheduler(app), Dockerfile, requirements
- main.py: AUTH_DEPENDENCY определяется до первого использования (NameError fix)
- main.py: setup_scheduler(app) вместо setup_scheduler() — планировщик запускается
- Dockerfile (корень): multi-stage build для frontend, если отсутствует
- requirements.txt: добавлен APScheduler>=3.10
- docker-compose.yml: убран deprecated version: '3.8'

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-15 14:15:05 +03:00

146 lines
4.4 KiB
YAML
Raw 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.

# КЛГ АСУ ТК v27 — Full Stack
# docker compose up -d
# (version удалён — deprecated в Docker Compose v2+)
services:
# ─── Database ───────────────────────────────────
postgres:
image: postgres:15-alpine
environment:
POSTGRES_USER: ${DB_USER:-klg}
POSTGRES_PASSWORD: ${DB_PASSWORD:-klg}
POSTGRES_DB: ${DB_NAME:-klg}
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./backend/migrations:/docker-entrypoint-initdb.d:ro
healthcheck:
test: ["CMD-SHELL", "pg_isready -U klg -d klg"]
interval: 5s
timeout: 5s
retries: 5
# ─── Cache ──────────────────────────────────────
redis:
image: redis:7-alpine
ports:
- "6379:6379"
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
# ─── Object Storage ────────────────────────────
minio:
image: minio/minio
environment:
MINIO_ROOT_USER: ${MINIO_USER:-minioadmin}
MINIO_ROOT_PASSWORD: ${MINIO_PASSWORD:-minioadmin}
command: server /data --console-address ":9001"
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio_data:/data
# ─── Keycloak DB ───────────────────────────────
keycloak-db:
image: postgres:15-alpine
environment:
POSTGRES_USER: keycloak
POSTGRES_PASSWORD: ${KC_DB_PASSWORD:-keycloak}
POSTGRES_DB: keycloak
volumes:
- keycloak_db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U keycloak -d keycloak"]
interval: 5s
timeout: 5s
retries: 5
# ─── Auth (Keycloak) ───────────────────────────
keycloak:
image: quay.io/keycloak/keycloak:24.0
environment:
KEYCLOAK_ADMIN: admin
KEYCLOAK_ADMIN_PASSWORD: ${KC_ADMIN_PASSWORD:-admin}
KC_DB: postgres
KC_DB_URL: jdbc:postgresql://keycloak-db:5432/keycloak
KC_DB_USERNAME: keycloak
KC_DB_PASSWORD: ${KC_DB_PASSWORD:-keycloak}
command: start-dev
ports:
- "8080:8080"
depends_on:
keycloak-db:
condition: service_healthy
# ─── Backend (FastAPI) ─────────────────────────
backend:
build:
context: ./backend
dockerfile: Dockerfile
environment:
DATABASE_URL: postgresql://${DB_USER:-klg}:${DB_PASSWORD:-klg}@postgres:5432/${DB_NAME:-klg}
REDIS_URL: redis://redis:6379/0
MINIO_ENDPOINT: minio:9000
MINIO_ACCESS_KEY: ${MINIO_USER:-minioadmin}
MINIO_SECRET_KEY: ${MINIO_PASSWORD:-minioadmin}
KEYCLOAK_URL: http://keycloak:8080
KEYCLOAK_REALM: klg
SECRET_KEY: ${SECRET_KEY:?SECRET_KEY is required — set it in .env}
ENVIRONMENT: ${ENVIRONMENT:-production}
# ФГИС РЭВС
FGIS_API_URL: ${FGIS_API_URL:-https://fgis-revs-test.favt.gov.ru/api/v2}
FGIS_ORG_ID: ${FGIS_ORG_ID:-}
FGIS_API_KEY: ${FGIS_API_KEY:-}
FGIS_CERT_PATH: /etc/ssl/fgis/client.pem
ports:
- "8000:8000"
volumes:
- ./certs/fgis:/etc/ssl/fgis:ro
- attachments_data:/app/storage
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
restart: unless-stopped
# ─── Frontend (Next.js) ────────────────────────
frontend:
build:
context: .
dockerfile: Dockerfile
environment:
NEXT_PUBLIC_API_URL: http://backend:8000
NEXT_PUBLIC_WS_URL: ws://backend:8000
ports:
- "3000:3000"
depends_on:
- backend
restart: unless-stopped
# ─── Monitoring ────────────────────────────────
prometheus:
image: prom/prometheus:latest
volumes:
- ./monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro
ports:
- "9090:9090"
profiles:
- monitoring
grafana:
image: grafana/grafana:latest
ports:
- "3001:3000"
profiles:
- monitoring
volumes:
postgres_data:
keycloak_db_data:
minio_data:
attachments_data: