# ===================================================================== # DEV (remote VPS) — тот же принцип, что и прод: тянем готовый образ из # GHCR и запускаем. Без мониторинга (prometheus/loki/promtail/grafana) — # только бэк + бот + БД + Redis. # ===================================================================== services: # One-shot: применяет миграции и завершается. Требует только DATABASE_URL. migrate: image: ${IMAGE:-gitea.netrunner-vpn.com/nineap/netrunner-control-plane:latest} container_name: netrunner-migrate-dev command: ["./netrunner-control-plane", "--migrate"] environment: - DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@db:5432/${DB_NAME} depends_on: db: condition: service_healthy restart: "no" networks: - netrunner_grid_dev app: image: ${IMAGE:-gitea.netrunner-vpn.com/nineap/netrunner-control-plane:latest} container_name: netrunner-app-dev-remote restart: always ports: - "8080:8080" env_file: - .env environment: - APP_ENV=development - FRONTEND_DIR=/app/frontend/dist - DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@db:5432/${DB_NAME} volumes: - ./keys:/app/keys:ro depends_on: db: condition: service_healthy redis: condition: service_healthy migrate: condition: service_completed_successfully healthcheck: test: ["CMD", "curl", "-fsS", "http://localhost:8080/health"] interval: 30s timeout: 5s retries: 3 start_period: 20s networks: - netrunner_grid_dev db: image: postgres:16-alpine container_name: netrunner-db-dev-remote restart: always environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USER} POSTGRES_DB: ${DB_NAME} volumes: - netrunner_db_data_dev:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME}"] interval: 5s timeout: 5s retries: 5 networks: - netrunner_grid_dev redis: image: redis:7-alpine container_name: netrunner-redis-dev-remote restart: always healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s networks: - netrunner_grid_dev # Реверс-прокси с реальным TLS (DNS-01 через Cloudflare) — нужен для # Telegram Web Apps (требуют https://) и для Telegram Login Widget в # обычном браузере (требует именно порт 443 — см. Caddyfile.dev). VPN-нода, # которая раньше занимала 443 на этом VPS, перенесена на другой порт. # # Образ собирается в GitHub Actions (build.yml::build-caddy), не на VPS: # компиляция xcaddy (Go, тянет много модулей) на этой машине один раз уже # не уложилась в таймаут SSH-деплоя и уронила весь прогон. caddy: image: ${CADDY_IMAGE:-gitea.netrunner-vpn.com/nineap/netrunner-caddy-cloudflare:latest} container_name: netrunner-caddy-dev restart: always ports: - "443:443" environment: - CF_API_TOKEN=${CF_API_TOKEN} volumes: - ./Caddyfile.dev:/etc/caddy/Caddyfile:ro - caddy_data_dev:/data - caddy_config_dev:/config depends_on: - app networks: - netrunner_grid_dev networks: netrunner_grid_dev: driver: bridge volumes: netrunner_db_data_dev: caddy_data_dev: caddy_config_dev: