# Локальный «клон прода» в контейнере — для проверки прод-сборки на своей машине # (а не на Raspberry Pi). Тот же образ, что и прод, изолированные тома, единый .env. # Портов на хост НЕТ: тест виден ТОЛЬКО снаружи на https://forbidden-stars.ru через # сервис tunnel (контейнер ssh -R 9001:app:8000 на VPS). # # Запуск (обычно лаунчером при APP_ENV=test): docker compose -f docker-compose.test.yml up --build -d # Остановить и стереть данные: docker compose -f docker-compose.test.yml down -v services: app: build: . image: forbidden-stars:test container_name: forbidden-stars-test restart: "no" init: true env_file: - .env # единый .env (тот же, что у dev/prod); секреты не в git environment: # Окружение test: прод-клон, но отличимый от прода (см. config.is_test). # Форсим здесь, чтобы значение не зависело от APP_ENV внутри .env. APP_ENV: test # Портов на хост НЕТ: тест доступен только изнутри сети compose; наружу — через # сервис tunnel (ниже) на forbidden-stars.ru. Из LAN/localhost — недоступно. volumes: - db-data-test:/data # изолированные тестовые данные - uploads-data-test:/data/uploads - achievements-data-test:/data/achievements # определения ачивок (файлы) healthcheck: test: - CMD - python - -c - "import urllib.request; urllib.request.urlopen('http://localhost:8000/api/health')" interval: 30s timeout: 5s retries: 3 start_period: 40s mem_limit: 512m # SSH reverse-туннель к VPS: forbidden-stars.ru (VPS:9001) -> app:8000 (по сети compose). # Ключ — ./deploy/tunnel/id_tunnel (gitignore), pubkey в authorized_keys у tunnel@VPS. # Внимание: слот 9001 общий с dev-туннелем (run.ps1); поднимай что-то одно за раз. tunnel: build: ./deploy/tunnel image: forbidden-stars-tunnel:test restart: unless-stopped init: true depends_on: app: condition: service_healthy environment: VPS_TUNNEL_HOST: ${VPS_TUNNEL_HOST} VPS_TUNNEL_USER: ${VPS_TUNNEL_USER:-tunnel} VPS_TUNNEL_PORT: "9001" # forbidden-stars.ru (dev/test) UPSTREAM: app:8000 volumes: - ./deploy/tunnel/id_tunnel:/key/id_tunnel:ro mem_limit: 64m volumes: db-data-test: uploads-data-test: achievements-data-test: