Vaultwarden делит один Postgres-процесс с netrunner-backend
Убирает собственный контейнер db — вместо своего Postgres подключается внешней сетью (netrunner_grid, external: true) к netrunner-db из netrunner-backend/docker-compose.prod.yml, в отдельной базе/юзере (VW_DB_*, был DB_*). Экономит ресурсы на VPS, где раньше крутились бы два отдельных Postgres-процесса. Добавляет пошаговый ранбук переноса существующих данных со старого SQLite-инстанса (scripts/migrate-vaultwarden.md, через checkpoint WAL + pgloader data-only на уже созданную diesel-схему). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
+28
-44
@@ -1,45 +1,31 @@
|
||||
# =====================================================================
|
||||
# netrunner-data — сервисы хранения данных, вынесенные в отдельный от
|
||||
# основного control-plane стек: сейчас только Vaultwarden (личный/командный
|
||||
# менеджер паролей) + его собственный Postgres.
|
||||
# менеджер паролей).
|
||||
#
|
||||
# Раньше Vaultwarden жил на проде голым файлом (~/vaultwarden-data/docker-compose.yml)
|
||||
# без git/CI, с захардкоженными в файле секретами и на SQLite (./data/db.sqlite3).
|
||||
# Здесь: секреты — только через .env (сам .env НЕ в git, см. .gitignore; на
|
||||
# деплое собирается из GitHub Actions secrets, см. .github/workflows/deploy.yml),
|
||||
# БД — Postgres вместо SQLite.
|
||||
# деплое собирается из GitHub Actions/Gitea Actions secrets, см.
|
||||
# .github/workflows/deploy.yml), БД — Postgres вместо SQLite.
|
||||
#
|
||||
# ВАЖНО про переход на Postgres: Vaultwarden сам не мигрирует данные из уже
|
||||
# существующего ./data/db.sqlite3 в Postgres при простой смене DATABASE_URL —
|
||||
# это отдельная, аккуратная операция (см. официальный вики Vaultwarden,
|
||||
# "Backing up your vault" + миграция бэкенда), а не просто "поднять новый
|
||||
# сервис". Перед первым запуском этого compose поверх УЖЕ ЖИВОГО инстанса с
|
||||
# реальными данными пользователей — сначала сделать полный бэкап текущей
|
||||
# ./data (включая attachments и rsa-ключи), затем мигрировать содержимое
|
||||
# db.sqlite3 в Postgres, и только потом переключать DATABASE_URL. Поднимать
|
||||
# этот compose "как есть" поверх существующих данных без миграции = Vaultwarden
|
||||
# просто заведёт новую пустую БД в Postgres, старые данные останутся
|
||||
# нетронутыми в volume, но перестанут быть видны приложению.
|
||||
# ВАЖНО: своего Postgres-контейнера здесь больше нет — Vaultwarden делит один
|
||||
# и тот же Postgres-процесс с netrunner-backend (сервис `db`/контейнер
|
||||
# `netrunner-db` из netrunner-backend/docker-compose.prod.yml), просто в
|
||||
# отдельной базе (vaultwarden) с собственным пользователем. Оба compose-стека
|
||||
# должны быть подняты на одном VPS и слиты в общую внешнюю сеть
|
||||
# `netrunner_grid` (см. миграцию в scripts/migrate-vaultwarden.md — там же и
|
||||
# однократная команда CREATE DATABASE/CREATE USER на этом общем Postgres).
|
||||
#
|
||||
# ВАЖНО про переход со старого SQLite-инстанса: Vaultwarden сам не мигрирует
|
||||
# данные из ./data/db.sqlite3 в Postgres при простой смене DATABASE_URL — это
|
||||
# отдельная, аккуратная операция через pgloader (см. scripts/migrate-vaultwarden.md),
|
||||
# а не просто "поднять новый сервис". Поднимать этот compose "как есть" поверх
|
||||
# старых данных без миграции = Vaultwarden просто заведёт новую пустую БД в
|
||||
# Postgres, старые данные останутся нетронутыми в ./data, но перестанут быть
|
||||
# видны приложению.
|
||||
# =====================================================================
|
||||
services:
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
container_name: netrunner-data-db
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_USER: ${DB_USER}
|
||||
POSTGRES_PASSWORD: ${DB_PASSWORD}
|
||||
POSTGRES_DB: ${DB_NAME:-vaultwarden}
|
||||
volumes:
|
||||
- netrunner_data_db:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${DB_USER} -d ${DB_NAME:-vaultwarden}"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
networks:
|
||||
- netrunner_data
|
||||
|
||||
vaultwarden:
|
||||
image: vaultwarden/server:latest
|
||||
container_name: vaultwarden
|
||||
@@ -51,9 +37,10 @@ services:
|
||||
- LOG_LEVEL=${VAULTWARDEN_LOG_LEVEL:-info}
|
||||
- ROCKET_PORT=8081
|
||||
- WEBSOCKET_ENABLED=true
|
||||
# postgresql:// вместо файла-заглушки sqlite — сам образ vaultwarden/server
|
||||
# уже собран со всеми тремя бэкендами, отдельный тег не нужен.
|
||||
- DATABASE_URL=postgresql://${DB_USER}:${DB_PASSWORD}@db:5432/${DB_NAME:-vaultwarden}
|
||||
# Общий Postgres-процесс с netrunner-backend (контейнер netrunner-db,
|
||||
# см. шапку файла) — отдельная база и юзер, не переиспользуем DB_USER/
|
||||
# DB_PASSWORD бэкенда.
|
||||
- DATABASE_URL=postgresql://${VW_DB_USER}:${VW_DB_PASSWORD}@netrunner-db:5432/${VW_DB_NAME:-vaultwarden}
|
||||
- SMTP_HOST=${SMTP_HOST}
|
||||
- SMTP_FROM=${SMTP_FROM}
|
||||
- SMTP_PORT=${SMTP_PORT:-465}
|
||||
@@ -66,15 +53,12 @@ services:
|
||||
- ./data:/data
|
||||
ports:
|
||||
- "127.0.0.1:8081:8081"
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
networks:
|
||||
- netrunner_data
|
||||
- netrunner_grid
|
||||
|
||||
networks:
|
||||
netrunner_data:
|
||||
driver: bridge
|
||||
|
||||
volumes:
|
||||
netrunner_data_db:
|
||||
# external: этот стек не поднимает Postgres сам — сеть уже создана
|
||||
# netrunner-backend/docker-compose.prod.yml (там же живёт netrunner-db).
|
||||
# Поднимать backend-стек первым.
|
||||
netrunner_grid:
|
||||
external: true
|
||||
|
||||
Reference in New Issue
Block a user