Files
netrunner-backend/docker-compose.prod.yml
T
nineap 3feb2f431c Убирает свой Postgres — БД физически переезжает на VPS с Vaultwarden
backend будет жить на отдельном, ещё не арендованном VPS — свой
контейнер `db` и бэкапы (scripts/backup.sh) здесь больше не нужны и
переехали в netrunner-data, где Postgres теперь физически стоит.
DATABASE_URL собирается из DB_HOST/DB_PORT (внешний IP того VPS) с
обязательным sslmode=require — трафик пересекает публичную сеть между
двумя разными серверами.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-09 17:17:20 +07:00

129 lines
4.2 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:-ghcr.io/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:-ghcr.io/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:
image: prom/prometheus:latest
container_name: netrunner-prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
ports:
- "127.0.0.1:9090:9090"
restart: always
networks:
- netrunner_grid
loki:
image: grafana/loki:latest
container_name: netrunner-loki
volumes:
- ./loki-config.yml:/etc/loki/local-config.yaml:ro
ports:
- "127.0.0.1:3100:3100"
command: -config.file=/etc/loki/local-config.yaml
restart: always
networks:
- netrunner_grid
promtail:
image: grafana/promtail:latest
container_name: netrunner-promtail
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
command: -config.file=/etc/promtail/config.yml
restart: always
user: root
depends_on:
- loki
networks:
- netrunner_grid
grafana:
image: grafana/grafana:latest
container_name: netrunner-grafana
ports:
- "127.0.0.1:3030:3000"
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
volumes:
- grafana_data:/var/lib/grafana
- ./grafana-datasources.yml:/etc/grafana/provisioning/datasources/datasources.yml:ro
depends_on:
- prometheus
- loki
restart: always
networks:
- netrunner_grid
networks:
netrunner_grid:
driver: bridge
volumes:
grafana_data: