1a26403afb
Telegram Login Widget в браузере требует именно порт 443 — его CSP frame-ancestors от oauth.telegram.org не учитывает порт домена и всегда подразумевает дефолтный порт схемы, поэтому на 8443 виджет рендерился, но iframe блокировался как cross-origin. VPN-нода, ранее занимавшая 443 на dev VPS, перенесена на другой порт, так что конфликта больше нет. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
112 lines
3.6 KiB
YAML
112 lines
3.6 KiB
YAML
# =====================================================================
|
|
# DEV (remote VPS) — тот же принцип, что и прод: тянем готовый образ из
|
|
# GHCR и запускаем. Без мониторинга (prometheus/loki/promtail/grafana) —
|
|
# только бэк + бот + БД + Redis.
|
|
# =====================================================================
|
|
services:
|
|
# One-shot: применяет миграции и завершается. Требует только DATABASE_URL.
|
|
migrate:
|
|
image: ${IMAGE:-ghcr.io/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:-ghcr.io/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:-ghcr.io/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:
|