Files
anti-plagiarism/docker-compose.yml
jze9 9ee5ccdc3f chore: remove obsolete version field from compose files
Docker Compose v2 игнорирует поле version и выдаёт warning.
Удалено из обоих файлов согласно актуальной документации.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-25 00:16:14 +05:00

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}