# Локальный «клон прода» в контейнере — для проверки прод-сборки на своей машине # (а не на 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 # Бэкапы тест-клона: тот же образ, что у прода (сборка локально), но ТОЛЬКО локальный # репозиторий и без расписания. BACKUP_VPS_HOST принудительно пуст — тестовые данные # никогда не попадут в прод-репозиторий на VPS. Учебное восстановление: # .\scripts\fs-backup.ps1 restore-test -File backups\fs_....tar backup: build: ./deploy/backup image: forbidden-stars-backup:test restart: "no" environment: BACKUP_PASSWORD: ${BACKUP_PASSWORD:-test-contour-only} BACKUP_HOSTNAME: fs-test BACKUP_SCHEDULE: "" BACKUP_VERIFY_SCHEDULE: "" BACKUP_VPS_HOST: "" BACKUP_COMPRESSION: ${BACKUP_COMPRESSION:-max} TZ: ${BACKUP_TZ:-Europe/Moscow} volumes: - db-data-test:/fs-db - uploads-data-test:/fs/uploads - achievements-data-test:/fs/achievements - backup-data-test:/backup mem_limit: 384m volumes: db-data-test: uploads-data-test: achievements-data-test: backup-data-test: