Files
netrunner-backend/docker-compose.dev-remote.yml
T
nineap c617c05233
Build & Push Image / Build and push to Gitea Registry (push) Failing after 14s
Build & Push Image / Build and push Caddy (Cloudflare DNS) image (push) Failing after 13s
CI / fmt + clippy + test (push) Has been cancelled
Переезд с ghcr.io на встроенный Container Registry Gitea
CI (build/deploy) и рантайм самого бэкенда (провижининг новых нод через
NodeService::provision_node_via_ssh — раньше читал GHCR_TOKEN, теперь
GITEA_REGISTRY_TOKEN) теперь используют gitea.netrunner-vpn.com вместо
ghcr.io. .github/workflows остались нетронутыми — та копия для настоящего
GitHub CI, там ghcr.io уместен и дальше (свой GITHUB_TOKEN, не наш секрет).
2026-07-10 20:44:03 +07:00

112 lines
3.7 KiB
YAML

# =====================================================================
# 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: