Wer viel mit Docker unterwegs ist und die verschiedensten Anwendungen ausprobiert, wird zwangsläufig früher oder später auch über die Datenbank “PostgreSQL” gestolpert sein. Sie ist neben MariaDB (MySQL) eine weitere große Open Source Datenbank.
In der Docker Welt wird gerne für jeden Service eine eigene Datenbank gestartet. Ich persönlich finde es schöner eine große Datenbank-Instanz zu haben, in der ich dann für jede Anwendung einen separaten User/Datenbank anlege. Damit habe ich eine zentrale Stelle, die gesichert werden muss und ich muss meine Datenbanken nicht erst bei den verschiedenen Services suchen. Die Gefahr eine zu übersehen ist da recht hoch.
Aus diesem Grund habe ich mir in meiner Proxmox-Umgebung einen LXC erstellt, in dem ich PostgreSQL installieren möchte. Daten des LXC:
- BS: Debian 11.3
- CPU: 1 Core
- RAM: 1G
Da ich keine vollständige Anleitung gefunden habe, die mir die wichtigsten Schritte gesammelt erklärt, habe ich mich entschieden diesen Beitrag zu verfassen.
LXC Umgebung
In dem frisch gestarteten LXC passen die Einträge für den Zeichensatz und die Zeitzone meistens nicht. Diese sollten ganz zu Anfang angepasst werden, da PostgreSQL unter anderem den Zeichensatz des Systems bei der Installation als Einstellung für die Datenbank setzt.
Zeichensatz einstellen
sudo dpkg-reconfigure locales
Es wird ein Auswahlmenü geöffnet, in dem man zunächst die Zeichensätze auswählt, die generiert werden sollen. Im darauffolgenden Dialog wählt man dann den Zeichensatz, der standardmäßig genutzt werden soll.
Zeitzone setzen
sudo timedatectl set-timezone "Europe/Berlin"
Danach sollte der Container einmal neu gestartet werden.
Paketquellen und Installation
Zum Hinzufügen der Paketquellen sind folgende Befehle notwendig:
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
Anschließend müssen die neuen Listen einmal abgerufen werden:
sudo apt update
Die neueste Version der Datenbank installiert man jetzt mit:
sudo apt -y install postgresql
Möchte man eine bestimmte Version nutzen, kann man diese mit angeben. Damit erhält man kein automatisches Upgrade auf eine höhere Version, dabei können ja durchaus auch mal größere Änderungen vorgenommen worden sein.
sudo apt -y install postgresql-14
Version 14 war die neueste Major-Version zum Zeitpunkt der Artikelerstellung. Eine Übersicht über alle Versionen und deren Supportzeiträume erhält man auf der PostgreSQL Versioning Seite .
Passwort setzen
Zur Administration der Datenbank nutze ich “pgAdmin4” in einem Docker Container. Damit ich mich verbinden kann, setze ich zunächst ein Passwort für den Datenbankbenutzer postgres
. Standardmäßig kann sich nur der Systembenutzer postgres
als Datenbankbenutzer postgres
auf der Datenbank ohne Passwot anmelden:
sudo -u postgres psql
Das Passwort wird dann mit folgendem SQL-Befehl gesetzt:
ALTER USER postgres PASSWORD 'meinGeheimesPasswort';
Antwort auf den Befehl ist: ALTER ROLE
. Mit \q
kann man die Datenbank wieder verlassen.
postgresql.conf anpassen
Ohne Anpassungen ist die Datenbank nur lokal erreichbar. Damit man sich auch von außen, also dem lokalen Netzwerk oder sogar dem Internet erreichen kann, muss die Konfiguration entsprechend angepasst werden.
In der Datei /etc/postgresql/14/main/postgresql.conf
muss das Kommentarzeichen #
vor dem Eintrag
listen_addresses = '10.123.123.123' # what IP address(es) to listen on;
# comma-separated list of addresses;
# defaults to 'localhost'; use '*' for all
# (change requires restart)
entfernt und die IP entsprechend angepasst werden. Ich lasse meine Datenbank nur auf Verbindungen aus dem lokalen Netzwerk hören.
Anschließend ist ein Neustart der Datenbank notwendig.
sudo systemctl restart postgresql
pg_hba.conf anpassen
Eine weitere Anpassung ist in der Datei /etc/postgresql/14/main/ppg_hba.conf
notwendig. Diese steuert, wer sich von wo und mit welchen Benutzer verbinden darf. Ich habe dort einen Eintrag ergänzt, der die Verbindung von jeder IP aus dem lokalen Proxmox Netzwerk mit jedem Benutzer mit Passwortauthentifizierung erlaubt:
# TYPE DATABASE USER ADDRESS METHOD
# IPv4 Proxmox Internal Network
host all all 10.123.123.0/24 scram-sha-256
Auch hiernach ist ein Neustart notwendig:
sudo systemctl restart postgresql
Abschluss
Damit ist die Installation und Einrichtung der Datenbank abgeschlossen und man kann sich in pgAdmin4 (und von jeder anderen Anwendung) mit IP/Benutzer/Passwort mit der Datenbank verbinden.
Die nächsten Schritte sind jetzt nur noch die Überlegung über die Sicherung und Backups der Datenbank. Ich nutze zum einen tägliche Snapshots des LXC, die auch extern gesichert werden und zusätzlich werden regelmäßig Dumps aller Datenbanken gemacht und in Dateien gesichert.