# ═══════════════════════════════════════════════════════════════════════════════ # ТЕСТОВЫЙ стек: локально — api, frontend, воркеры, elasticsearch, flower. # Удалённо (через .env) — postgres, redis, minio, ollama, rabbitmq (сервер .82). # Запуск: docker compose -f docker-compose.test.yml up -d --build # ═══════════════════════════════════════════════════════════════════════════════ networks: aptest: driver: bridge volumes: es_test_data: faiss_index: x-app-env: &app-env env_file: .env networks: - aptest restart: unless-stopped services: # ─── Локальная инфраструктура ────────────────────────────────────────────── elasticsearch: image: elasticsearch:8.13.0 container_name: aptest-elasticsearch environment: - discovery.type=single-node - xpack.security.enabled=false - xpack.ml.enabled=false - ES_JAVA_OPTS=-Xms512m -Xmx512m - bootstrap.memory_lock=false - cluster.name=antiplagiator-test volumes: - es_test_data:/usr/share/elasticsearch/data networks: - aptest ports: - "9200:9200" restart: unless-stopped healthcheck: test: ["CMD-SHELL", "curl -s http://localhost:9200/_cluster/health | grep -qv '\"status\":\"red\"'"] interval: 15s timeout: 10s retries: 10 start_period: 60s # ─── Приложение ──────────────────────────────────────────────────────────── # RabbitMQ вынесен на отдельный сервер 192.168.20.82 (см. RABBITMQ_URL в .env) api: build: context: ./services/api dockerfile: Dockerfile container_name: aptest-api <<: *app-env command: uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload --reload-dir /app/app volumes: - ./services/api:/app ports: - "8000:8000" depends_on: elasticsearch: condition: service_healthy frontend: build: context: ./services/frontend dockerfile: Dockerfile.dev container_name: aptest-frontend environment: VITE_API_TARGET: http://api:8000 networks: - aptest volumes: - ./services/frontend:/app - /app/node_modules ports: - "5173:5173" depends_on: - api restart: unless-stopped worker-gpu: build: context: ./services/worker-gpu dockerfile: Dockerfile container_name: aptest-worker-gpu <<: *app-env command: celery -A app.celery_app worker -Q queue.gpu -c 1 -n gpu@%h --loglevel=info volumes: - ./services/worker-gpu:/app - faiss_index:/data/index worker-indexer: build: context: ./services/worker-indexer dockerfile: Dockerfile container_name: aptest-worker-indexer <<: *app-env command: celery -A app.celery_app worker -Q queue.index -c 2 -n indexer@%h --loglevel=info volumes: - ./services/worker-indexer:/app - ./scripts/parsers:/parsers:ro depends_on: elasticsearch: condition: service_healthy worker-notifier: build: context: ./services/worker-notifier dockerfile: Dockerfile container_name: aptest-worker-notifier <<: *app-env command: celery -A app.celery_app worker -Q queue.notify -c 4 -n notifier@%h --loglevel=info volumes: - ./services/worker-notifier:/app worker-gost: build: context: ./services/worker-gost dockerfile: Dockerfile container_name: aptest-worker-gost <<: *app-env command: celery -A app.celery_app worker -Q queue.gost -c 2 -n gost@%h --loglevel=info volumes: - ./services/worker-gost:/app flower: image: mher/flower:2.0 container_name: aptest-flower command: celery --broker=${RABBITMQ_URL} flower --port=5555 environment: CELERY_BROKER_URL: ${RABBITMQ_URL} CELERY_RESULT_BACKEND: ${REDIS_URL} networks: - aptest ports: - "5555:5555" restart: unless-stopped