Loading page...Загружаем страницу...正在加载页面...
AtlasRepo

Moving Off Per-Seat SaaS Without Breaking Anything: A Weekend Migration Walkthrough

Описание и применение

Маленькая команда мигрировала Sentry, 1Password/Bitwarden и Google Analytics на собственный VPS, используя Docker Compose, общую PostgreSQL и Redis, и Caddy для TLS, без потери данных и с возможностью отката.

Задача

Small teams pay per seat for SaaS tools (error tracking, password manager, web analytics) and want to self‑host without data loss or downtime.

Результат

All three SaaS services were successfully migrated to a single VPS with Docker Compose, sharing a Postgres and Redis instance, and secured with Caddy TLS. The migration required no code changes and allowed rollback at each step.

Рабочий процесс

  • 1. Provision a VPS with 4 GB RAM, 2 vCPUs and point DNS A records to it.
  • 2. Install Docker and Docker‑Compose, open ports 80/443.
  • 3. Create a shared Postgres and Redis container and a Caddy reverse proxy.
  • 4. Write a docker‑compose.yml that defines services for GlitchTip, Vaultwarden, Umami, and Caddy, sharing the database and Redis.
  • 5. Create init‑dbs.sql to create users and databases for each app.
  • 6. Run docker‑compose up, ensuring glitchtip‑migrate and glitchtip‑worker run before the web service.
  • 7. Verify TLS certificates are issued by Caddy and services are reachable.
  • 8. Invite team members to Vaultwarden via admin page, update DSNs for Sentry to point to GlitchTip.
  • 9. Test data integrity and rollback if needed.

Доказательства

Three swaps: Sentry → GlitchTip, 1Password/Bitwarden Teams → Vaultwarden, Google Analytics → Umami.

Источник

A VPS with 4 GB of RAM and 2 vCPUs is plenty. Rough idle memory use from my notes: Vaultwarden around 128 MB, Umami around 384 MB, GlitchTip around 512 MB, plus Postgres and Redis shared between them.

Источник

Point three DNS A records at the server before you do anything else, so TLS certificates can be issued on first boot.

Источник

The GlitchTip worker is easy to forget. Without it, events get accepted but never processed, and you'll think the migration failed.

Источник

The init‑dbs.sql file creates a database and user per app, so each one is isolated even though they share a server.

Источник

  • Дата записи: 2026-11-01T21:13:49.519Z