Zum Inhalt springen

Konfiguration von PostgreSQL

PostgreSQL läuft im offiziellen Docker-Image. Die Variablen sind also die des Images, eigenen Code bringt SOLECTRUS hier nicht mit. Der Container ist nur im Docker-Netzwerk erreichbar, von außen führt kein Weg zur Datenbank.

Passwort des Datenbank-Benutzers. Ohne Wert bricht PostgreSQL beim ersten Start mit einer Fehlermeldung ab. Das Dashboard und der Power-Splitter melden sich damit an, bei ihnen heißt die Variable DB_PASSWORD. Die Werte müssen übereinstimmen.

PostgreSQL legt das Passwort beim ersten Start in seinem Datenverzeichnis ab. Ein späterer Wechsel in der Konfiguration ändert es dort nicht: Die Datenbank bleibt beim alten Passwort, das Dashboard versucht es mit dem neuen, und die Anmeldung schlägt fehl.

Beispiel
POSTGRES_PASSWORD=my-secret-db-password

Benutzer, den PostgreSQL beim ersten Start anlegt. Standardwert ist postgres. Er ist zugleich Superuser der Datenbank.

Der Name muss zu dem passen, mit dem sich das Dashboard anmeldet (DB_USER). Ein abweichender Wert lässt beide auseinanderlaufen, denn der Benutzer aus DB_USER existiert dann nicht. Auch der Healthcheck des Containers fragt mit pg_isready -U postgres nach.

Beispiel
POSTGRES_USER=postgres

Datenbank, die PostgreSQL beim ersten Start anlegt. Standardwert ist der Name aus POSTGRES_USER, also postgres.

Mit dieser Datenbank arbeitet das Dashboard allerdings nicht. Es legt bei seinem ersten Start eine eigene an, solectrus_production, und die ist von POSTGRES_DB unabhängig. Ein anderer Wert benennt sie also nicht um, er entscheidet nur darüber, welche leere Datenbank daneben liegt.

Beispiel
POSTGRES_DB=solectrus

Verzeichnis im Container, in dem PostgreSQL seine Dateien ablegt. Ohne die Variable gilt der Standardpfad von PostgreSQL, und der hängt von der Major-Version ab: postgres:17 und älter legen die Daten in /var/lib/postgresql/data ab, postgres:18 in /var/lib/postgresql/18/docker.

Der Pfad muss innerhalb des Volumes liegen, das DB_VOLUME_PATH in den Container mountet. Zeigt er woandershin, schreibt PostgreSQL in das Dateisystem des Containers. Die Datenbank ist dann verloren, sobald der Container neu erzeugt wird.

Beispiel
PGDATA=/var/lib/postgresql/data/pgdata

Pfad, in dem die Datenbank gespeichert wird. Er geht nicht an PostgreSQL selbst, sondern an Docker, das ihn als Volume in den Container mountet. Er sollte auf einem Datenträger mit ausreichend Speicherplatz liegen.

Was hier steht, entscheidet über alles Weitere: Liegt am Pfad schon eine Datenbank, startet PostgreSQL mit dieser weiter. Ist das Verzeichnis leer, legt PostgreSQL eine neue an. Nur dann greifen POSTGRES_PASSWORD, POSTGRES_USER und POSTGRES_DB. Bei jedem weiteren Start ignoriert PostgreSQL sie.

Beispiel
DB_VOLUME_PATH=/somewhere/solectrus/postgresql

Zeitzone gemäß Liste. Standardwert ist UTC.

Sie betrifft ausschließlich die Zeitstempel im Protokoll des Containers. Die gespeicherten Daten liegen in UTC, daran ändert TZ nichts.

Beispiel
TZ=Europe/Berlin