Hosting: Hetzner Cloud (Helsinki) — migrated from IONOS March 2026 (#1227)
Total cost: ~\u20ac10.47/month (+backups ~\u20ac12.50)
All servers: Ubuntu 24.04 LTS, Docker CE, UFW firewall, fail2ban, SSH key-only, Certbot SSL
| Server | Role | IP | SSH Alias | Plan | RAM | Disk |
|---|---|---|---|---|---|---|
| rpm-prod | Production App | 204.168.180.36 | ssh rpm-prod-new |
CX23 | 4 GB | 40 GB |
| rpm-supabase | Supabase + Tools | 204.168.133.217 | ssh rpm-supabase |
CX23 | 4 GB | 40 GB |
| rpm-onlyoffice | Document Server | 204.168.170.0 | ssh rpm-onlyoffice |
CX23 | 4 GB | 40 GB |
Host: 204.168.180.36 | SSH: ssh rpm-prod-new
| Container | Image | Purpose |
|---|---|---|
rapid-pm-app-green-1 |
ghcr.io/velastra-uk/rapid-pm |
Flask app (Gunicorn) — blue/green deployment |
rapid-pm-worker-1 |
ghcr.io/velastra-uk/rapid-pm |
Celery worker + beat |
rapid-pm-nginx-1 |
nginx | Reverse proxy + static files |
rapid-pm-redis-1 |
redis:7-alpine |
Task queue broker |
rapid-pm-drawio-1 |
drawio | DrawIO diagram editor |
localhost:3306/home/john/rapid-pm/ # Application root
/home/john/rapid-pm/environments/ # Environment files
/home/john/rapid-pm/static/ # Angular build output
/home/john/rapid-pm/scripts/ # Deployment scripts
Host: 204.168.133.217 | SSH: ssh rpm-supabase
| Container | Image | Purpose |
|---|---|---|
supabase-db |
supabase/postgres:15.8.1 |
PostgreSQL database |
supabase-kong |
kong:2.8.1 |
API gateway |
supabase-auth |
supabase/gotrue |
Authentication |
supabase-rest |
postgrest/postgrest |
REST API |
supabase-studio |
supabase/studio |
Dashboard UI |
supabase-storage |
supabase/storage-api |
File storage |
supabase-meta |
supabase/postgres-meta |
DB metadata |
supabase-pooler |
supabase/supavisor |
Connection pooler |
supabase-vector |
timberio/vector |
Log aggregation |
supabase-imgproxy |
darthsim/imgproxy |
Image processing |
n8n-n8n-1 |
n8nio/n8n |
Workflow automation |
privai |
privacy-shield-privai |
Privacy analysis tool |
doc-converter |
doc-converter |
Document format conversion |
wikijs |
requarks/wiki:2 |
Wiki.js documentation |
wikijs-db |
postgres:15-alpine |
Wiki.js database |
/home/john/supabase/ # Supabase docker compose
/home/john/n8n/ # n8n docker compose
/home/john/privai/ # PrivAI docker compose
/home/john/wikijs/ # Wiki.js docker compose
Host: 204.168.170.0 | SSH: ssh rpm-onlyoffice
| Container | Image | Purpose |
|---|---|---|
onlyoffice-server |
onlyoffice/documentserver:9.0.4 |
Document editing (DOCX, XLSX, PPTX) |
hindsight-app |
ghcr.io/vectorize-io/hindsight |
RAG/vector search |
hindsight-db |
tensorchord/vchord-suite |
Vector database (PostgreSQL 18) |
In ~/.ssh/config:
Host rpm-prod-new
HostName 204.168.180.36
User john
Host rpm-supabase
HostName 204.168.133.217
User john
Host rpm-onlyoffice
HostName 204.168.170.0
User john
# Check production app
ssh rpm-prod-new "docker ps --format '{{.Names}} {{.Status}}'"
# View production logs
ssh rpm-prod-new "docker logs -f rapid-pm-app-green-1 --tail 100"
# Restart production app
ssh rpm-prod-new "cd /home/john/rapid-pm && docker compose -f docker-compose.deploy.yml restart app-green"
# Check all server disk space
ssh rpm-prod-new "df -h /"
ssh rpm-supabase "df -h /"
ssh rpm-onlyoffice "df -h /"
# Health checks
curl https://rapidpm.uk/api/health
curl https://onlyoffice.rapidpm.uk/healthcheck
curl https://supabase.rapidpm.uk
curl https://wiki.rapidpm.uk
Migrated to Hetzner March 2026 (#1227). IONOS contracts pending cancellation (#1233).
| Old Server | Old IP | Replaced By |
|---|---|---|
| rpm-prod (204.168.180.36) | ||
| No test server — test locally | ||
| rpm-onlyoffice (204.168.170.0) |