Ciele

Externe Datenbank

Führen Sie den Stack auf einer verwalteten Postgres-Instanz aus, die Sie bereits besitzen.

Standardmäßig betreibt der Compose-Stack einen eigenen Postgres-Container. Stattdessen können Sie denselben Stack auf einer verwalteten Postgres-Instanz ausführen. Der postgres-Container wird dann niemals gestartet. Authentication, die Data API, der Storage und der Migration Runner stellen eine Verbindung zu Ihrer Datenbank her.

Tested bei jeder Version: ein einfaches Postgres 16 mit pgvector, im Rahmen der Continuous-Integration-Wiedergabe der gesamten Migrationskette.

Expected to work, aus der Dokumentation des Anbieters:

  • Azure Database for PostgreSQL Flexible Server
  • Amazon RDS for PostgreSQL und Amazon Aurora PostgreSQL
  • Google Cloud SQL für PostgreSQL und AlloyDB
  • Neon

Jede andere Postgres-Instanz, die die unten aufgeführten Anforderungen erfüllt, funktioniert ebenfalls. Melden Sie Ihr Ergebnis im Issue-Tracker, damit ein Anbieter in der Liste auf tested gesetzt werden kann.

Anforderungen

AnforderungGrund
Postgres 16 oder neuerBei Postgres 15 kann nur ein Superuser eine Rolle erstellen, die Row-Level Security umgeht. Managed Provider stellen Ihnen keinen Superuser zur Verfügung.
Ein Admin-Login, der BYPASSRLS besitztDie Service-Rolle von Ciele muss die Row-Level-Security umgehen. Die Admin-Anmeldedaten der oben genannten Anbieter verfügen in Postgres 16 über dieses Attribut.
Die Erweiterungen vector und pg_trgmDie Wissenssuche verwendet beide. Fügen Sie in Azure zuerst vector,pg_trgm zum Serverparameter azure.extensions hinzu.
Der Administrator ist Eigentümer der DatenbankPostgres weist das public-Schema dem Datenbankeigentümer zu. Verwenden Sie den Login, mit dem die Datenbank erstellt wurde.
Der direct-HostnameVerwenden Sie keinen Hostnamen eines Connection Poolers. Die Data API und der Speicher unterhalten eine Listening-Verbindung, die von Pooling nicht unterstützt wird.
Etwa 25 VerbindungenDie kleinste Cloud-SQL-Stufe lässt insgesamt 25 Verbindungen zu. Wählen Sie eine höhere Stufe aus. Neon Free, Azure B1ms und RDS t4g.micro sind ausreichend.
TLSJede Verbindung verwendet sslmode=require. Anbieter mit einer privaten Zertifizierungsstelle benötigen --db-ca, siehe unten.

Den Stack verbinden

Übergeben Sie den Admin-Verbindungsstring an das Bootstrap-Skript:

./deploy/bootstrap.sh --database-url postgresql://admin:password@host:5432/dbname

Das Skript schreibt die EXTERNAL_DB_*-Einstellungen und das docker-compose.external-db.yml-Overlay in deploy/.env. Es erstellt ein einziges Passwort für die drei Service-Anmeldungen. Anschließend überprüft es die Datenbank, bevor es einen Container startet: die Postgres-Version, die beiden Erweiterungen, die Admin-Berechtigungen, das Verbindungs-Limit und TLS. Bei jeder fehlgeschlagenen Prüfung wird eine Zeile ausgegeben, die Ihnen mitteilt, was Sie ändern müssen.

Das Skript lehnt einen Pooler-Hostname, ein gehostetes Supabase-Projekt, sslmode=disable sowie ein Passwort mit Zeichen ab, die eine Verbindungszeichenfolge nicht transportieren kann. Prozentcodieren Sie solche Zeichen oder legen Sie ein einfacheres Admin-Passwort fest.

Beim Start bereitet ein einmaliger provision-Dienst die Datenbank als Administrator vor. Es erstellt die Rollen, die Schemas auth, storage und extensions, die Authentifizierungs-Helper-Funktionen, die Standardprivilegien sowie die beiden Erweiterungen. Der Service wird bei jedem Start erneut ausgeführt und ändert nichts, wenn die Datenbank bereit ist.

Die Option --database-url lässt sich mit --images, --workers und --tls kombinieren. Führen Sie das Skript mit einer neuen Verbindungszeichenfolge erneut aus, um den Stack auf eine andere Datenbank zu verweisen. Das Service-Passwort wird beibehalten.

Zertifikat verifizieren

Anbieter mit einer privaten Zertifizierungsstelle benötigen das Bundle für die vollständige Verifizierung:

./deploy/bootstrap.sh --database-url postgresql://admin:password@host:5432/dbname --db-ca ./bundle.pem

Das Skript kopiert das Bundle nach deploy/external-db/db-ca.pem und setzt sslmode=verify-full. Jeder Service überprüft dann den Server anhand dieses Bundles.

ProviderBundle
Amazon RDS und AuroraDas globale Bundle von truststore.pki.rds.amazonaws.com oder das regionale Bundle
Google Cloud SQLDie server-ca.pem-Datei der Instanz
AzureDigiCert Global Root G2 und Microsoft RSA Root CA 2017, in einer Datei
NeonNicht erforderlich. Der Server verwendet eine öffentliche Root-CA.

Hinweise des Providers

Neon

Erstellen Sie das Projekt in einer EU-Region auf Postgres 16 oder neuer. Kopieren Sie die direct-Verbindungszeichenfolge, nicht die -pooler-Verbindungszeichenfolge. Der Free-Tarif setzt die Rechenleistung nach fünf Minuten Inaktivität aus. Die erste Anfrage nach einer Pause dauert einige Sekunden, während die Dienste wieder verbunden werden.

Azure Database for PostgreSQL Flexible Server

Erstellen Sie den Server auf Postgres 16 oder einer neueren Version. Fügen Sie vector,pg_trgm dem Serverparameter azure.extensions hinzu, bevor Sie das Bootstrap-Skript ausführen. Verwenden Sie den Admin-Login, den Sie bei der Erstellung festgelegt haben. Fügen Sie die IP-Adresse Ihres Hosts zu den Firewall-Regeln hinzu.

Amazon RDS und Aurora

Verwenden Sie den Master-Benutzer. Laden Sie das Zertifikatsbundle herunter und übergeben Sie es mit --db-ca. Erlauben Sie Ihren Host in der Sicherheitsgruppe. Aurora-Versionen vor 17 erzwingen TLS nicht. Der Stack verwendet weiterhin TLS.

Google Cloud SQL und AlloyDB

Verwenden Sie den Benutzer postgres. Wählen Sie in Cloud SQL mindestens die Stufe db-g1-small aus. Laden Sie server-ca.pem von der Instanz herunter und übergeben Sie es mit --db-ca. Fügen Sie die öffentliche IP-Adresse Ihres Hosts zu den autorisierten Netzwerken hinzu.

Gehostetes Supabase

Ein gehostetes Supabase-Projekt kann nicht die Datenbank unter diesen Containern sein. Seine Service-Rollen existieren mit Passwörtern, die Sie nicht besitzen, und seine eigenen Services sind Eigentümer der Schemata auth und storage. Richten Sie die Anwendung stattdessen auf dieses Projekt aus und führen Sie das Profil db nicht aus.

Sicherungen

Der Anbieter verwahrt die Datenbank-Backups. Hochgeladene Dateien verbleiben im Volume storage-data auf Ihrem Host. Sichern Sie das Volume zusammen mit der Datenbank. Stellen Sie beide auf denselben Zeitpunkt wieder her. Siehe Database für die Volume-Befehle.

Upgrade

Upgrades funktionieren wie in Upgrade beschrieben. Der migrate-Dienst wendet ausstehende Migrationen auf Ihre Datenbank an. Der provision-Dienst wird zuerst ausgeführt und bestätigt die Rollen und Schemas.

Auf dieser Seite