Deploy es: der Poor-Man’s-Stack
Ein kleiner VPS, Docker, Caddy, selbst gehostetes Supabase und eine Domain - das Ganze für ungefähr zwei Kaffee im Monat, und ehrlich darüber, wo es aufhört zu skalieren.
Gegen die Quellen geprüft am 2026-08-30
Was „poor man" dir kauft
Alles auf einem kleinen Server: App, Datenbank, Auth, Realtime, TLS. Keine Managed Services, keine Registry, kein CI - gebaut wird auf der Kiste, dann Neustart. Das ist weniger Kompromiss, als es klingt: Ein Space fasst zwölf Leute, Realtime ist der hungrige Teil, und ein ehrlicher VPS trägt mehrere volle Räume, bevor irgendetwas knarzt.
Was es absichtlich nicht ist: hochverfügbar. Eine Kiste heißt eine Kiste - ein Reboot ist eine Minute Downtime, und eine tote Platte ohne Backups ist das Ende. Der Backup-Schritt unten ist deshalb nicht optional, und der Guide sagt es dort noch einmal.
Das Rezept
Kiste mieten und eine Domain draufzeigen lassen
Kosten: ~5-8 €/Monat für den VPS, ~10 €/Jahr für die Domain
Ein kleiner Cloud-Server mit 4 GB RAM - der Supabase-Stack ist der hungrige Mieter, und 2 GB plus Swap funktionieren bis zu dem Tag, an dem sie es nicht tun. Jeder Budget-Anbieter taugt; nimm einen mit Rechenzentrum in der Nähe deiner Spieler.
Zwei DNS-A-Records beim Registrar: einer für die App (app.example.com oder die nackte Domain), einer für die API (api.example.com), beide auf die Kiste.
Erst die Tür abschließen, dann einrichten
Dauer: Zwanzig Minuten, einmal
Nur SSH-Keys (Passwort-Login aus), eine Firewall, die genau 22, 80 und 443 erlaubt, automatische Sicherheitsupdates. Docker und Docker Compose vom offiziellen Install-Skript.
Achtung: Mach das, bevor irgendetwas mit Secrets installiert wird. Eine Datenbank, die einen Nachmittag offen war, bleibt für immer geleakt.
Selbst gehostetes Supabase hochziehen
Wo: Das offizielle supabase/docker Compose-Setup
Deren docker-Verzeichnis klonen und vor dem ersten Start jedes Secret ändern: das Postgres-Passwort, das JWT-Secret und die daraus generierten Anon- und Service-Keys. Die Defaults sind öffentlich bekannt - ein Stack mit ihnen gestartet steht jedem offen, der dasselbe README gelesen hat.
Studio und alles Administrative weg von den öffentlichen Ports - per SSH-Tunnel erreichbar oder hinter Auth im Reverse Proxy, nie blank. Danach die Migrationen aus dem kxb-Repository gegen deine Datenbank einspielen.
Die App auf der Kiste bauen und starten
Das Repository liefert ein Dockerfile; die Registry des armen Mannes ist keine Registry - das Image wird auf dem Server gebaut. Eines muss zur Bauzeit stimmen, nicht zur Laufzeit: Die NEXT_PUBLIC_*-Variablen (deine Supabase-URL und der Anon-Key) werden beim Build ins Client-Bundle gebacken. Sie hinterher zu setzen ändert nichts und scheitert lautlos.
Den Container mit restart unless-stopped laufen lassen, nur auf localhost lauschend - das öffentliche Gesicht hat der Proxy.
Achtung: NEXT_PUBLIC_* zur Bauzeit ist die klassische Falle des ganzen Rezepts. Redet Auth mysteriös mit dem falschen Host, hast du mit dem falschen Env gebaut.
Caddy davorstellen
Caddy existiert für genau solche Setups: ein paar Zeilen, die deine zwei Hostnamen auf die zwei lokalen Ports abbilden, und die TLS-Zertifikate holt und erneuert es selbst. Es gibt wirklich nichts weiter zu tun - kein certbot, kein Cron, kein openssl.
GoTrue einen Mailweg geben
Signup-Bestätigungen brauchen SMTP. Ein kostenloses Transaktionsmail-Kontingent reicht in dieser Größe locker - die Zugangsdaten im Auth-Service eintragen und einen Test-Signup schicken, bevor irgendwer von der Seite erfährt.
Kenn die Default-Limits: Selbst gehostetes GoTrue kommt mit konservativen Raten (Größenordnung Dutzende Mails pro Stunde, mit Cooldown pro Adresse). Für einen leisen Launch fein; heb sie bewusst an, wenn echte Leute kommen - nicht in Panik, während sie es tun.
Backups - und dann heißt es deployed
Ein nächtlicher pg_dump, komprimiert, weg von der Kiste kopiert - eine 1-€-Storage-Box oder irgendein Object Storage reicht. Den Restore einmal testen, an einem Tag, an dem du ihn nicht brauchst. Day-Two-Betrieb ist dann eine Schleife: pull, rebuild, restart - und das Deploy ist die Minute, in der du sie laufen lässt.
Bevor die Domain irgendwo öffentlich auftaucht: die Impressums-Platzhalter aus dem Starter-Guide, und das Kapitel zum rechtlichen Grundgerüst. Eine deployte Seite ist eine veröffentlichte Seite.
Achtung: Ein ungetestetes Backup ist eine Hoffnung, kein Backup. Einmal in eine Wegwerf-Datenbank zurückspielen und die Tabellen anschauen.
Die ganze Rechnung
| Was | Betrag |
|---|---|
| VPS, 4 GB | 5-8 €/Monat |
| Domain | ~10 €/Jahr |
| TLS-ZertifikateCaddy und Let’s Encrypt. | 0 € |
| TransaktionsmailDas Gratis-Kontingent deckt einen kleinen Launch. | 0 € |
| Backup-Speicher | ~1 €/Monat |
| SummeDer Zwei-Kaffee-Stack. | Unter 10 €/Monat |
Die Wörter im Rezept
- VPS
- Der eine gemietete Server, auf dem alles wohnt.
- Caddy
- Der Reverse Proxy, der TLS von allein macht - der Load Balancer des armen Mannes.
- Selbst gehostetes Supabase
- Das offizielle Docker Compose aus Postgres, Auth, Realtime und Storage.
- GoTrue
- Supabases Auth-Service - der Teil, der SMTP braucht und Sendelimits hat.
- Anon-/Service-Key
- Die zwei API-Keys aus deinem JWT-Secret - einer öffentlich, einer niemals.
- NEXT_PUBLIC_*
- Env-Variablen, die zur Bauzeit ins Bundle gebacken werden - die Falle des Rezepts.
- pg_dump
- Das Ein-Kommando-Backup, das die einzelne Kiste überlebbar macht.
Die Fallen
- Den Supabase-Stack mit seinen Default-Secrets starten.
- NEXT_PUBLIC_* zur Laufzeit setzen und sich wundern, warum nichts passiert.
- Studio oder Postgres aus dem Internet erreichbar.
- 2 GB RAM ohne Swap - der OOM-Killer wählt im schlechtesten Moment die Datenbank.
- Keine Backups bis zum ersten Verlust, oder Backups, die nie jemand zurückgespielt hat.
- Öffentlich gehen, während die Impressums-Platzhalter noch drinstehen.
Wo du das selbst nachliest
- Betreib kxb selbstDie lokale Hälfte, die dieser Guide fortsetzt.
- Supabase Self-Hosting-DokuDas Compose-Setup und die Secrets, die sich ändern müssen.
- Caddy-DokuDie ganze Proxy-Config ist kürzer als diese Satzliste.
- Das kxb-RepositoryDas Dockerfile und die Migrationen.
Das hier ist eine Landkarte, keine Rechts- oder Steuerberatung - und eine ehrliche darüber, wie sie entstanden ist: Der Deutschland-Guide stammt von jemandem, der den Weg gegangen ist; die meisten anderen Länder wurden mit KI aus den offiziellen Quellen erstellt und noch von niemandem abgelaufen, der es getan hat. Gesetze ändern sich. Jeder Guide trägt das Datum seiner letzten Prüfung und die Quellen zum Selbst-Nachlesen - und wer einen dieser Wege hinter sich hat: Genau diese Korrekturen wünscht sich das Handbuch.


