Files
netrunner-backend/docker-compose.prod.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

93 lines
4.1 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# =====================================================================
# PRODUCTION — VPS только тянет готовый образ из GHCR и запускает его.
# Никакой компиляции Rust на сервере. Деплой = pull + migrate + up.
#
# ВАЖНО: своего Postgres здесь больше нет. БД физически стоит на отдельном
# VPS (см. netrunner-data/docker-compose.yml — там же Vaultwarden, тот же
# Postgres-процесс, вторая база) и слушает по сети, не в одном
# Docker-стеке с этим compose. DATABASE_URL ниже указывает на DB_HOST:DB_PORT
# (внешний IP того VPS), не на "db" как раньше — и требует sslmode=require,
# т.к. трафик идёт по публичной сети между двумя разными серверами. Бэкапы
# тоже переехали туда же (netrunner-data/scripts/backup.sh) — дампить
# логичнее там, где физически лежат данные.
# =====================================================================
services:
# One-shot: применяет миграции и завершается. Требует только DATABASE_URL.
migrate:
image: ${IMAGE:-gitea.netrunner-vpn.com/nineap/netrunner-control-plane:latest}
container_name: netrunner-migrate
command: ["./netrunner-control-plane", "--migrate"]
environment:
- DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT:-5432}/${DB_NAME}?sslmode=require
restart: "no"
networks:
- netrunner_grid
app:
image: ${IMAGE:-gitea.netrunner-vpn.com/nineap/netrunner-control-plane:latest}
container_name: netrunner-app
restart: always
ports:
- "8080:8080"
env_file:
- .env
environment:
- APP_ENV=production
- FRONTEND_DIR=/app/frontend/dist
- DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT:-5432}/${DB_NAME}?sslmode=require
volumes:
- ./keys:/app/keys:ro
depends_on:
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
redis:
image: redis:7-alpine
container_name: netrunner-redis
restart: always
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
networks:
- netrunner_grid
# ==========================================
# НАБЛЮДАЕМОСТЬ
# ==========================================
# Prometheus/Loki/Grafana больше НЕ здесь — единый стек теперь на VPS с
# данными (netrunner-data/docker-compose.observability.yml), т.к. ему
# всё равно нужно видеть лендинг и все прокси-ноды, не только бэкенд.
# /metrics бэкенда (см. src/api.rs) — тот central Prometheus скрейпит
# удалённо; отсюда только пуш логов через тонкий promtail.
promtail:
image: grafana/promtail:latest
container_name: netrunner-promtail
environment:
- LOKI_PUSH_URL=${LOKI_PUSH_URL}
volumes:
- ./promtail-config.yml:/etc/promtail/config.yml:ro
- /var/lib/docker/containers:/var/lib/docker/containers:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
# -config.expand-env: без него promtail не подставит ${LOKI_PUSH_URL}
# внутри самого config.yml — сама переменная передаётся выше через
# environment, файл конфига читает её только с этим флагом.
command: -config.file=/etc/promtail/config.yml -config.expand-env=true
restart: always
user: root
networks:
- netrunner_grid
networks:
netrunner_grid:
driver: bridge