Docker Compose v2 игнорирует поле version и выдаёт warning. Удалено из обоих файлов согласно актуальной документации. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
258 lines
7.8 KiB
YAML
258 lines
7.8 KiB
YAML
# ═══════════════════════════════════════════════════════════════════════════════
|
|
# Академический помощник — Production Docker Compose
|
|
# ═══════════════════════════════════════════════════════════════════════════════
|
|
|
|
networks:
|
|
antiplagiator:
|
|
driver: bridge
|
|
|
|
volumes:
|
|
postgres_data:
|
|
redis_data:
|
|
rabbitmq_data:
|
|
elasticsearch_data:
|
|
minio_data:
|
|
ollama_data:
|
|
faiss_index:
|
|
|
|
# ─── Общие переменные окружения для app-сервисов ────────────────────────────
|
|
x-app-env: &app-env
|
|
env_file: .env
|
|
networks:
|
|
- antiplagiator
|
|
restart: unless-stopped
|
|
|
|
services:
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
# ИНФРАСТРУКТУРА
|
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
|
|
postgres:
|
|
image: postgres:16
|
|
container_name: antiplagiator-postgres
|
|
environment:
|
|
POSTGRES_DB: antiplagiator
|
|
POSTGRES_USER: antiplagiator
|
|
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-changeme}
|
|
volumes:
|
|
- ./data/postgres:/var/lib/postgresql/data
|
|
- ./infra/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
|
|
networks:
|
|
- antiplagiator
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U antiplagiator -d antiplagiator"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 30s
|
|
|
|
redis:
|
|
image: redis:7-alpine
|
|
container_name: antiplagiator-redis
|
|
command: redis-server --appendonly yes --maxmemory 512mb --maxmemory-policy allkeys-lru
|
|
volumes:
|
|
- ./data/redis:/data
|
|
networks:
|
|
- antiplagiator
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD", "redis-cli", "ping"]
|
|
interval: 10s
|
|
timeout: 5s
|
|
retries: 5
|
|
|
|
rabbitmq:
|
|
image: rabbitmq:3-management
|
|
container_name: antiplagiator-rabbitmq
|
|
environment:
|
|
RABBITMQ_DEFAULT_USER: ${RABBITMQ_USER:-guest}
|
|
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_PASSWORD:-guest}
|
|
volumes:
|
|
- ./data/rabbitmq:/var/lib/rabbitmq
|
|
networks:
|
|
- antiplagiator
|
|
ports:
|
|
- "15672:15672" # Management UI
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD", "rabbitmq-diagnostics", "check_port_connectivity"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 60s
|
|
|
|
elasticsearch:
|
|
image: elasticsearch:8.13.0
|
|
container_name: antiplagiator-elasticsearch
|
|
environment:
|
|
- discovery.type=single-node
|
|
- xpack.security.enabled=false
|
|
- xpack.ml.enabled=false
|
|
- ES_JAVA_OPTS=-Xms2g -Xmx2g
|
|
- cluster.name=antiplagiator
|
|
- bootstrap.memory_lock=true
|
|
ulimits:
|
|
memlock:
|
|
soft: -1
|
|
hard: -1
|
|
volumes:
|
|
- ./data/elasticsearch:/usr/share/elasticsearch/data
|
|
networks:
|
|
- antiplagiator
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -s http://localhost:9200/_cluster/health | grep -qv '\"status\":\"red\"'"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
start_period: 60s
|
|
|
|
minio:
|
|
image: minio/minio:latest
|
|
container_name: antiplagiator-minio
|
|
command: server /data --console-address ":9001"
|
|
environment:
|
|
MINIO_ROOT_USER: ${MINIO_ACCESS_KEY:-minioadmin}
|
|
MINIO_ROOT_PASSWORD: ${MINIO_SECRET_KEY:-changeme}
|
|
volumes:
|
|
- ./data/minio:/data
|
|
networks:
|
|
- antiplagiator
|
|
ports:
|
|
- "9001:9001" # Console UI
|
|
restart: unless-stopped
|
|
healthcheck:
|
|
test: ["CMD", "mc", "ready", "local"]
|
|
interval: 30s
|
|
timeout: 10s
|
|
retries: 5
|
|
|
|
ollama:
|
|
image: ollama/ollama:latest
|
|
container_name: antiplagiator-ollama
|
|
volumes:
|
|
- ./data/ollama:/root/.ollama
|
|
networks:
|
|
- antiplagiator
|
|
restart: unless-stopped
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
count: all
|
|
capabilities: [gpu]
|
|
|
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
# ПРИЛОЖЕНИЕ
|
|
# ═══════════════════════════════════════════════════════════════════════════
|
|
|
|
api:
|
|
build:
|
|
context: ./services/api
|
|
dockerfile: Dockerfile
|
|
container_name: antiplagiator-api
|
|
<<: *app-env
|
|
ports:
|
|
- "8000:8000"
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
rabbitmq:
|
|
condition: service_healthy
|
|
elasticsearch:
|
|
condition: service_healthy
|
|
minio:
|
|
condition: service_healthy
|
|
|
|
worker-gpu:
|
|
build:
|
|
context: ./services/worker-gpu
|
|
dockerfile: Dockerfile
|
|
container_name: antiplagiator-worker-gpu
|
|
<<: *app-env
|
|
command: celery -A app.celery_app worker -Q queue.gpu -c 1 -n gpu@%h --loglevel=info
|
|
volumes:
|
|
- faiss_index:/data/index
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
rabbitmq:
|
|
condition: service_healthy
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
count: all
|
|
capabilities: [gpu]
|
|
|
|
worker-indexer:
|
|
build:
|
|
context: ./services/worker-indexer
|
|
dockerfile: Dockerfile
|
|
container_name: antiplagiator-worker-indexer
|
|
<<: *app-env
|
|
command: celery -A app.celery_app worker -Q queue.index -c 4 -n indexer@%h --loglevel=info
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
rabbitmq:
|
|
condition: service_healthy
|
|
elasticsearch:
|
|
condition: service_healthy
|
|
|
|
worker-notifier:
|
|
build:
|
|
context: ./services/worker-notifier
|
|
dockerfile: Dockerfile
|
|
container_name: antiplagiator-worker-notifier
|
|
<<: *app-env
|
|
command: celery -A app.celery_app worker -Q queue.notify -c 16 -n notifier@%h --loglevel=info
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
rabbitmq:
|
|
condition: service_healthy
|
|
|
|
worker-gost:
|
|
build:
|
|
context: ./services/worker-gost
|
|
dockerfile: Dockerfile
|
|
container_name: antiplagiator-worker-gost
|
|
<<: *app-env
|
|
command: celery -A app.celery_app worker -Q queue.gost -c 8 -n gost@%h --loglevel=info
|
|
depends_on:
|
|
postgres:
|
|
condition: service_healthy
|
|
redis:
|
|
condition: service_healthy
|
|
rabbitmq:
|
|
condition: service_healthy
|
|
|
|
flower:
|
|
image: mher/flower:2.0
|
|
container_name: antiplagiator-flower
|
|
command: celery --broker=${RABBITMQ_URL:-amqp://guest:guest@rabbitmq:5672/} flower --port=5555
|
|
networks:
|
|
- antiplagiator
|
|
ports:
|
|
- "5555:5555"
|
|
depends_on:
|
|
- rabbitmq
|
|
- redis
|
|
restart: unless-stopped
|
|
environment:
|
|
CELERY_BROKER_URL: ${RABBITMQ_URL:-amqp://guest:guest@rabbitmq:5672/}
|
|
CELERY_RESULT_BACKEND: ${REDIS_URL:-redis://redis:6379/0}
|