Kurz gesagt.
- Selbst gehostetes Supabase ist Supabase Cloud als Open-Source-Projekt, das du via Docker Compose auf deinem eigenen Server betreibst.
- Mindestanforderungen: 4 GB RAM, 2 CPU-Kerne. Empfohlen: 8 GB RAM, 4 Kerne.
- Der Docker-Stack läuft mit 11 Containern: Postgres, Auth, PostgREST, Realtime, Storage, Studio und weitere.
- Contabo stellt den VPS. Stack betreiben, aktualisieren und sichern machst du selbst.

Selbst gehostetes Supabase gibt dir ein vollständiges Postgres-Backend, ohne dass du ein verwaltetes Abo brauchst. Du bekommst dieselbe Auth, denselben Storage, dieselben Realtime-Funktionen und dieselbe REST-API wie bei Supabase Cloud, aber der Server gehört dir, die Daten bleiben dort, wo du sie hinlegst, und die Rechnung ist fix. Das Open-Source-Projekt steht unter Apache 2.0 lizenziert, es entstehen also keine Kosten pro Projekt oder Nutzer: Du zahlst nur für den VPS.
Diese Anleitung erklärt, was der Stack enthält, wie du ihn mit Docker Compose bereitstellst, wie du ihn aktuell hältst und was du abwägen solltest, bevor du dich für Selbsthosting auf einem Contabo VPS statt für Supabase Cloud entscheidest.
Was selbst gehostetes Supabase enthält
Die Docker-Compose-Konfiguration von Supabase startet 11 Container. Wenn du weißt, was jeder davon macht, ist jedes spätere Problem lesbar:
- PostgreSQL: die zentrale Datenbank. Alles andere baut darauf auf.
- Auth: JWT-basierte Authentifizierung für Registrierungen, Logins, Magic Links und OAuth.
- PostgREST: wandelt dein PostgreSQL-Schema automatisch in eine RESTful API um.
- Realtime: ein Elixir-Server, der PostgreSQL-Änderungen per WebSocket überträgt.
- Storage: eine API für Datei-Uploads und -Abrufe; Postgres verwaltet die Zugriffsrechte, lokaler Speicher oder S3 hält die Dateien.
- Studio: das Browser-Dashboard. Der ressourcenintensivste einzelne Container im Leerlauf.
- API-Gateway: standardmäßig Envoy (Kong als optionaler Override). Leitet /auth, /rest und /storage an den jeweiligen Dienst weiter und übernimmt die API-Key-Authentifizierung.
- Supavisor: der Connection-Pooler. Verwaltet Postgres-Verbindungen, damit deine App die Datenbank nicht überlastet.
- imgproxy: On-the-fly-Bildgrößenanpassung für Dateien in Storage.
- postgres-meta: eine REST-API für die Postgres-Verwaltung (Tabellen abrufen, Rollen hinzufügen, Abfragen ausführen).
- Edge Functions: eine Deno-Runtime für serverlose Funktionen, die nah an der Datenbank laufen.
Du kannst den Stack reduzieren. Wenn du Realtime, Storage, imgproxy, Edge Functions oder Analytics nicht brauchst, entferne die entsprechenden Abschnitte aus der docker-compose.yml und der RAM-Verbrauch im Leerlauf sinkt entsprechend. Die Mindestdienste für ein funktionsfähiges Backend sind PostgreSQL, Auth, PostgREST und das API-Gateway.
Systemanforderungen
Die offiziellen Supabase-Anforderungen für den vollständigen Stack:
| Ressource | Minimum | Empfohlen |
|---|---|---|
| RAM | 4 GB | 8 GB+ |
| CPU | 2 Kerne | 4 Kerne+ |
| Speicher | 40 GB SSD | 80 GB SSD+ |
RAM ist die Ressource, die zuerst knapp wird, weil Studio allein der schwerste einzelne Container ist. Die meisten Nutzer, die den vollständigen 11-Container-Stack auf einem 4-GB-Server betreiben, stoßen unter moderater Last an die RAM-Grenze. 8 GB geben echten Spielraum.
Den Supabase-Docker-Stack bereitstellen
Die offizielle Docker-Konfiguration bietet zwei Installationswege. Beide führen zum gleichen Ergebnis: ein laufender Supabase-Stack mit gesetzten Secrets und gesunden Diensten. Der Unterschied liegt darin, wie viel davon automatisiert abläuft.
Quick Start (Linux)
Für die meisten Contabo VPS-Bereitstellungen mit Ubuntu oder Debian ist das Quick-Start-Skript die richtige Wahl. Ein einziger Befehl installiert Docker bei Bedarf, lädt die Docker-Compose-Konfiguration herunter, generiert alle Secrets und fragt dich nach deinen URLs:
curl -fsSL https://supabase.link/setup.sh | shDas Skript unterstützt Debian/Ubuntu und RHEL/CentOS/Fedora. Es erledigt alles, was der manuelle Weg von dir verlangt: Voraussetzungen installieren, ein sicheres DASHBOARD_PASSWORD generieren, das asymmetrische JWT-Schlüsselpaar erstellen und deine URLs in die .env schreiben. Du kannst das Skript vor der Ausführung unter raw.githubusercontent.com/supabase/supabase/refs/heads/master/docker/setup.sh prüfen.
Nachdem das Skript abgeschlossen ist, startest du den Stack:
cd supabase-project && \
sh run.sh startDeine generierten Zugangsdaten rufst du jederzeit ab mit:
sh run.sh secretsManuelle Installation
Wenn du keine unterstützte Linux-Distribution verwendest oder jeden Schritt explizit kontrollieren willst, klone das Repository direkt. Die folgenden Befehle pinnen auf einen bestimmten Release-Tag. Ersetze self-hosted/v0.8.1 durch den aktuellen Tag von der Supabase-Releases-Seite, wenn du das hier ausführst.
git clone --depth 1 --branch self-hosted/v0.8.1 https://github.com/supabase/supabase
mkdir supabase-project
cp -rf supabase/docker/. supabase-project
cd supabase-project && cp .env.example .env
printf 'ref=self-hosted/v0.8.1\n' > .supabase-version
docker compose pullStarte den Stack nie mit den Beispiel-Secrets. Bevor du run.sh start zum ersten Mal ausführst, generiere alle Secrets mit den mitgelieferten Skripten:
sh utils/generate-keys.sh
sh utils/add-new-auth-keys.shDann setzt du deine externen URLs in der .env:
SUPABASE_PUBLIC_URL=https://your-domain.com:8000
API_EXTERNAL_URL=https://your-domain.com:8000/auth/v1
SITE_URL=https://your-domain.comMit Default-Secrets zu starten und sie später zu rotieren lässt den Connection-Pooler ohne hilfreiche Fehlermeldung hängen. Setze sie einmalig vor dem ersten Start.
Stack hochfahren:
sh run.sh startAlle Dienste sollten innerhalb ein bis zwei Minuten einen gesunden Status erreichen. Prüfe mit:
docker compose psStudio und alle APIs sind über das API-Gateway standardmäßig auf Port 8000 erreichbar: http://your-server-ip:8000. Für Produktion schalte einen Reverse-Proxy vor und terminiere TLS dort. Die Supabase-Docs pflegen eine eigene HTTPS-Konfigurationsanleitung mit vollständiger Caddy- und Nginx-Einrichtung.
Warum Supabase auf Contabo selbst hosten statt Supabase Cloud?
Selbsthosting auf einem Contabo VPS lohnt sich für drei Projekttypen: solche mit Datenschutzanforderungen an den Standort, solche mit vorhersehbaren Workloads, bei denen ein monatlicher Fixpreis günstiger ist als verbrauchsbasierte Abrechnung, und solche, die volle Kontrolle über Datenbankversion und Stack benötigen.
Datensouveränität. Contabo bietet Hub Europe, unser EU-Rechenzentrum, mit Datenverarbeitung nach EU-Recht. Wenn dein Projekt personenbezogene Daten speichert, die der DSGVO unterliegen, behältst du durch eine Contabo-EU-Instanz mit eigenem Postgres volle Kontrolle darüber, wo die Daten liegen und wer darauf zugreift — ohne Abhängigkeit von einem Drittanbieter-Backend.
Kostensicherheit. Das kostenlose Tier von Supabase Cloud ist für die Entwicklung großzügig, aber Produktions-Workloads werden nach Datenbankgröße, Egress und aktiven Nutzern abgerechnet. Ein Contabo Core VPS gibt dir einen fixen Monatspreis, unabhängig davon, wie viele API-Aufrufe deine App macht. Für Anwendungen mit konstantem Traffic ist ein Festpreis-Server oft günstiger als verbrauchsbasierte Abrechnung, sobald du die kostenlosen Kontingente überschreitest.
Stack-Kontrolle. Auf einer selbst gehosteten Instanz wählst du die Postgres-Version, betreibst eigene Extensions und kontrollierst den Upgrade-Zeitplan. Außerdem kannst du mehrere Projekte auf einem Server laufen lassen, was Supabase Cloud pro Projekt berechnet.
Contabo stellt VPS und Netzwerk bereit. Du betreibst den Supabase-Stack, spielst Updates ein, konfigurierst Backups und reagierst auf Ausfälle. Supabase bietet keinen Support für selbst gehostete Instanzen. Wenn du nicht sicher bist, ob du einen Linux-Server und Docker-Compose-Bereitstellungen verwalten kannst, ist Supabase Cloud möglicherweise der bessere Einstiegspunkt.
Den Stack aktuell halten
Supabase veröffentlicht stabile Docker-Compose-Snapshots etwa einmal im Monat. Das update.sh-Skript übernimmt In-Place-Upgrades: Es lädt die aktuelle self-hosted/v*-Konfiguration und führt sie mit einem Three-Way-Merge über deine Dateien zusammen, sodass lokale Änderungen an der docker-compose.yml möglichst erhalten bleiben.
sh update.shPrüfe vor dem Update das Self-Hosted-Changelog auf Breaking Changes. Nach dem Update startest du den Stack neu:
sh run.sh startUm einen einzelnen Dienst zu aktualisieren oder zurückzurollen, ohne den Rest zu berühren, aktualisiere den Image-Tag des Dienstes in der docker-compose.yml und führe dann aus:
sh run.sh pull
sh run.sh recreate studioErsetze studio durch den gewünschten Dienstnamen. Der Rest des Stacks bleibt während der Operation oben.
Den richtigen Core VPS für Supabase wählen
Für eine Entwicklungs- oder Staging-Instanz mit reduziertem Stack (kein Analytics, Edge Functions optional) handhabt ein Core VPS mit 8 GB RAM die Last problemlos. Für eine Produktionsinstanz mit dem vollständigen 11-Container-Stack unter echtem Traffic ist 12 GB oder mehr der sichere Ausgangspunkt.
Contabo Core VPS-Pläne starten ab 4 vCPU-Kernen und 8 GB RAM, mit Optionen für 12 GB und 24 GB. Alle Pläne enthalten unbegrenzten Traffic (Fair-Use-Richtlinie) und die Contabo Firewall ohne Aufpreis. Aktuelle Preise und Verfügbarkeit findest du auf der Contabo VPS-Seite.
Aktiviere Auto Backup im Customer Control Panel, um deine Postgres-Daten mit täglichen inkrementellen Off-Server-Backups zu schützen. Bei einer selbst verwalteten Datenbank sind Backups keine Option.
FAQ: Supabase selbst hosten
Ist selbst gehostetes Supabase kostenlos?
Das Supabase Open-Source-Projekt steht unter Apache 2.0 Lizenz und ist kostenlos nutzbar. Du zahlst nur für den VPS, auf dem du es betreibst. Es gibt keine Gebühr pro Nutzer, keine Egress-Kosten und keine Lizenzgebühr. Das verwaltete kostenlose Tier von Supabase Cloud ist eine Alternative für kleinere Projekte, aber bei selbst gehosteten Bereitstellungen entstehen die einzigen laufenden Kosten durch den Server selbst.
Verwaltet Contabo meine selbst gehostete Supabase-Instanz?
Nein. Contabo verwaltet VPS-Hardware, Netzwerk und Hypervisor. Alles, was innerhalb des Servers läuft, einschließlich des Docker-Compose-Stacks, der Postgres-Datenbank und aller Supabase-Dienste, liegt in deiner Verantwortung. Das bedeutet: Updates einspielen, Secrets rotieren, Backups konfigurieren und auf Container-Ausfälle reagieren. Supabase bietet keinen Support für selbst gehostete Instanzen.
Was ist die Mindestgröße für Supabase selbst hosten?
Das offizielle Supabase-Minimum für den vollständigen Stack sind 4 GB RAM, 2 CPU-Kerne und 40 GB SSD. In der Praxis berichten viele Nutzer, dass der vollständige 11-Container-Stack auf 4 GB unter echtem Betrieb eng wird, da Studio allein der ressourcenintensivste Container ist. Der empfohlene Spec für selbst gehostetes Supabase ist 8 GB RAM, 4 Kerne und 80 GB SSD.
Kann ich mehrere Supabase-Projekte auf einem VPS betreiben?
Ja, mit Einschränkungen. Jedes Projekt braucht eine eigene Postgres-Datenbank und eigene Supabase-Dienste, also separate Docker-Compose-Stacks auf unterschiedlichen Ports. Ein Server mit 24 GB RAM kann je nach Traffic typischerweise zwei bis drei vollständige Stacks parallel betreiben. Die meisten Teams halten in Produktion ein Projekt pro Server und teilen einen einzelnen Server für Entwicklungsumgebungen.
Wie sichere ich meine selbst gehostete Supabase-Datenbank?
Zwei Ansätze decken die meisten Fälle ab. Nutze pg_dump mit einem Zeitplan, um Postgres in eine komprimierte Datei zu exportieren und off-server zu übertragen. Aktiviere außerdem Contabo Auto Backup im Customer Control Panel für tägliche inkrementelle VPS-Snapshots. Die Kombination beider Methoden ist für Produktion sinnvoll: Datenbank-Exports ermöglichen Point-in-Time-Wiederherstellung, VPS-Snapshots ermöglichen vollständiges Server-Rollback.



