Убирает свой 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>
This commit is contained in:
2026-07-09 17:17:20 +07:00
parent ebc618743a
commit 3feb2f431c
4 changed files with 27 additions and 154 deletions
+11 -56
View File
@@ -1,6 +1,15 @@
# =====================================================================
# 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.
@@ -9,10 +18,7 @@ services:
container_name: netrunner-migrate
command: ["./netrunner-control-plane", "--migrate"]
environment:
- DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@db:5432/${DB_NAME}
depends_on:
db:
condition: service_healthy
- DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT:-5432}/${DB_NAME}?sslmode=require
restart: "no"
networks:
- netrunner_grid
@@ -28,12 +34,10 @@ services:
environment:
- APP_ENV=production
- FRONTEND_DIR=/app/frontend/dist
- DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@db:5432/${DB_NAME}
- DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT:-5432}/${DB_NAME}?sslmode=require
volumes:
- ./keys:/app/keys:ro
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
migrate:
@@ -47,24 +51,6 @@ services:
networks:
- netrunner_grid
db:
image: postgres:16-alpine
container_name: netrunner-db
restart: always
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USER}
POSTGRES_DB: ${DB_NAME}
volumes:
- netrunner_db_data:/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
redis:
image: redis:7-alpine
container_name: netrunner-redis
@@ -75,31 +61,6 @@ services:
networks:
- netrunner_grid
# Периодический pg_dump + опциональная офсайт-копия через rclone (см.
# scripts/backup.sh). RCLONE_REMOTE/RCLONE_CONFIG — задать в .env, если нужна
# копия за пределы этого VPS (настоятельно рекомендуется — единственная
# локальная копия на volume ничем не защищена от падения диска этой машины).
backup:
image: postgres:16-alpine
container_name: netrunner-backup
restart: always
entrypoint: ["/bin/sh", "/scripts/backup.sh"]
environment:
- DATABASE_URL=postgres://${DB_USER}:${DB_PASSWORD}@db:5432/${DB_NAME}
- BACKUP_DIR=/backups
- BACKUP_INTERVAL_SEC=${BACKUP_INTERVAL_SEC:-21600}
- BACKUP_RETENTION_DAYS=${BACKUP_RETENTION_DAYS:-14}
- RCLONE_REMOTE=${RCLONE_REMOTE:-}
- RCLONE_CONFIG_CONTENT=${RCLONE_CONFIG_CONTENT:-}
volumes:
- ./scripts/backup.sh:/scripts/backup.sh:ro
- netrunner_db_backups:/backups
depends_on:
db:
condition: service_healthy
networks:
- netrunner_grid
# ==========================================
# МОНИТОРИНГ
# ==========================================
@@ -161,13 +122,7 @@ services:
networks:
netrunner_grid:
# Явное имя (не дефолтный <project>_netrunner_grid) — на этот же bridge
# снаружи подключается netrunner-data/docker-compose.yml (Vaultwarden) как
# external-сеть, ссылаясь по этому фиксированному имени.
name: netrunner_grid
driver: bridge
volumes:
netrunner_db_data:
netrunner_db_backups:
grafana_data: