/
SaveLink
/
SaveTest
Обзор
Документация
Войти
/
SaveLink
/
SaveTest
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
docker-compose.production.yml
272 строки
9 KB
ivan kuzin
Свежая конфигурация для версии 1.3.0
06 июл 2026, 09:47
06 июл 2026, 09:47
886d0b3
Код
Авторство
О чём код?
# Docker Compose конфигурация для продакшн окружения services: postgres: image: postgres:15 restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-savetest_db} POSTGRES_USER: ${POSTGRES_USER:-savetest_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-savetest_password} POSTGRES_INITDB_ARGS: "--encoding=UTF8 --locale=en_US.UTF-8 --lc-collate=en_US.UTF-8 --lc-ctype=en_US.UTF-8" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-savetest_user} -d ${POSTGRES_DB:-savetest_db}"] interval: 10s timeout: 5s retries: 5 networks: - savetest-network python-parser-plugin: image: cr.yandex/crp8hln0vgikkl8djavt/save-test/python-parser-plugin:main restart: unless-stopped volumes: - git_repos:/app/git_repos:ro networks: - savetest-network environment: - PLUGIN_NAME=python-parser - LOG_LEVEL=${PLUGIN_LOG_LEVEL:-INFO} healthcheck: test: ["CMD-SHELL", "python -c 'import urllib.request, json; r=urllib.request.urlopen(\"http://localhost:8000/config\", timeout=5); data=json.loads(r.read()); assert data.get(\"language\"), \"no language in config\"'"] interval: 10s timeout: 10s retries: 5 start_period: 30s gherkin-parser-plugin: image: cr.yandex/crp8hln0vgikkl8djavt/save-test/gherkin-parser-plugin:main restart: unless-stopped volumes: - git_repos:/app/git_repos:ro networks: - savetest-network environment: - PLUGIN_NAME=gherkin-parser - LOG_LEVEL=${PLUGIN_LOG_LEVEL:-INFO} healthcheck: test: ["CMD-SHELL", "python -c 'import urllib.request, json; r=urllib.request.urlopen(\"http://localhost:8000/config\", timeout=5); data=json.loads(r.read()); assert data.get(\"language\"), \"no language in config\"'"] interval: 10s timeout: 10s retries: 5 start_period: 30s allure-service: image: cr.yandex/crp8hln0vgikkl8djavt/save-test/allure-service:main container_name: allure-service restart: unless-stopped ports: - "${ALLURE_SERVICE_PORT:-3001}:3001" volumes: - allure_storage:/allure-storage environment: - PORT=3001 - STORAGE_PATH=/allure-storage - NODE_ENV=production - REDIS_URL=redis://redis:6379/0 - BACKEND_URL=http://backend:8000 depends_on: redis: condition: service_healthy networks: - savetest-network healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:3001/health"] interval: 30s timeout: 10s retries: 3 start_period: 10s backend: image: cr.yandex/crp8hln0vgikkl8djavt/save-test/backend:main restart: unless-stopped ports: - "${BACKEND_PORT:-8001}:8000" environment: - DATABASE_URL=postgresql://${POSTGRES_USER:-savetest_user}:${POSTGRES_PASSWORD:-savetest_password}@postgres:5432/${POSTGRES_DB:-savetest_db} - REDIS_URL=redis://redis:6379/0 - SECRET_KEY=${SECRET_KEY:-your-super-secret-key-change-in-production} - DEBUG=${DEBUG:-False} - ALLOWED_ORIGINS=${ALLOWED_ORIGINS:-http://localhost:3000,http://127.0.0.1:3000,http://localhost:8080,http://127.0.0.1:8080} - UVICORN_WORKERS=${UVICORN_WORKERS:-4} - PLUGIN_URLS=${PLUGIN_URLS:-http://python-parser-plugin:8000,http://gherkin-parser-plugin:8000} - PLUGIN_TIMEOUT=${PLUGIN_TIMEOUT:-30} - LOG_FILE_BACKUP_COUNT=${LOG_FILE_BACKUP_COUNT:-30} - LOG_FLUSH_BATCH_SIZE=${LOG_FLUSH_BATCH_SIZE:-10} - ALLURE_SERVICE_URL=${ALLURE_SERVICE_URL:-http://allure-service:3001} - ALLURE_STORAGE_PATH=/allure-storage - MCP_SERVER_URL=http://mcp-server:3000 - LIVEKIT_URL=http://livekit:7880 - LIVEKIT_WS_URL=${LIVEKIT_WS_URL:-ws://${STAND_HOST:-localhost}:7880} - LIVEKIT_API_KEY=${LIVEKIT_API_KEY:-devkey} - LIVEKIT_API_SECRET=${LIVEKIT_API_SECRET:-devsecret_change_me_in_production_please_32chars} - CALL_CHAT_UPLOAD_DIR=/app/call_chat_uploads volumes: - git_repos:/app/git_repos - avatars_data:/app/avatars - project_avatars_data:/app/project_avatars - project_report_assets_data:/app/project_report_assets - reports_data:/app/reports - result_attachments_data:/app/result_attachments - call_chat_uploads_data:/app/call_chat_uploads - wiki_sites_data:/app/wiki_sites - logs_data:/app/logs - app_data:/app/app/__data__ - allure_storage:/allure-storage depends_on: postgres: condition: service_healthy redis: condition: service_healthy python-parser-plugin: condition: service_healthy gherkin-parser-plugin: condition: service_healthy allure-service: condition: service_healthy livekit: condition: service_started healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8000/health"] interval: 30s timeout: 10s retries: 3 start_period: 40s networks: - savetest-network mcp-server: image: cr.yandex/crp8hln0vgikkl8djavt/save-test/mcp-server:main container_name: mcp-server restart: unless-stopped environment: - PORT=3000 - SAVETEST_API_URL=http://backend:8000 - NODE_ENV=production ports: - "${MCP_SERVER_PORT:-3002}:3000" depends_on: backend: condition: service_healthy healthcheck: test: ["CMD", "wget", "-qO-", "http://localhost:3000/health"] interval: 30s timeout: 5s retries: 3 start_period: 15s networks: - savetest-network redis: image: redis:7-alpine restart: unless-stopped volumes: - redis_data:/data command: redis-server --appendonly yes networks: - savetest-network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 10s timeout: 5s retries: 5 livekit: image: cr.yandex/crp8hln0vgikkl8djavt/save-test/livekit:main container_name: livekit restart: unless-stopped environment: - "LIVEKIT_KEYS=${LIVEKIT_API_KEY:-devkey}: ${LIVEKIT_API_SECRET:-devsecret_change_me_in_production_please_32chars}" - LIVEKIT_WS_URL=${LIVEKIT_WS_URL:-ws://${STAND_HOST:-localhost}:7880} - LIVEKIT_RTC_NODE_IP=${LIVEKIT_RTC_NODE_IP:-${STAND_HOST:-}} - LIVEKIT_RTC_USE_EXTERNAL_IP=${LIVEKIT_RTC_USE_EXTERNAL_IP:-} ports: - "${LIVEKIT_PORT:-7880}:7880" - "${LIVEKIT_TCP_PORT:-7881}:7881" - "${LIVEKIT_UDP_RANGE:-50000-50100}:50000-50100/udp" depends_on: redis: condition: service_healthy networks: - savetest-network webhook-worker: image: cr.yandex/crp8hln0vgikkl8djavt/save-test/webhook-worker:main container_name: webhook-worker restart: unless-stopped environment: - DATABASE_URL=postgresql://${POSTGRES_USER:-savetest_user}:${POSTGRES_PASSWORD:-savetest_password}@postgres:5432/${POSTGRES_DB:-savetest_db} - REDIS_URL=redis://redis:6379/0 - WORKER_TIMEOUT=${WORKER_TIMEOUT:-30} - WORKER_RETRY_COUNT=${WORKER_RETRY_COUNT:-2} - WORKER_RETRY_DELAY=${WORKER_RETRY_DELAY:-5} - LOG_LEVEL=${WORKER_LOG_LEVEL:-INFO} - LOGS_DIR=/app/logs volumes: - logs_data:/app/logs depends_on: postgres: condition: service_healthy redis: condition: service_healthy networks: - savetest-network healthcheck: test: ["CMD", "python", "-c", "import sys; sys.exit(0)"] interval: 30s timeout: 10s retries: 3 start_period: 10s frontend: image: cr.yandex/crp8hln0vgikkl8djavt/save-test/frontend:main restart: unless-stopped ports: - "${FRONTEND_PORT:-8080}:80" depends_on: backend: condition: service_healthy mcp-server: condition: service_healthy networks: - savetest-network stop_grace_period: 15s healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/"] interval: 30s timeout: 10s retries: 3 start_period: 10s volumes: git_repos: driver: local redis_data: driver: local avatars_data: driver: local project_avatars_data: driver: local project_report_assets_data: driver: local call_chat_uploads_data: driver: local reports_data: driver: local result_attachments_data: driver: local wiki_sites_data: driver: local logs_data: driver: local app_data: driver: local postgres_data: allure_storage: driver: local networks: savetest-network: driver: bridge