Wie man PostgreSQL auf Rocky Linux installiert

Auf Rocky Linux können Sie PostgreSQL mit dem postgresql-server-Paket aus dem Standard-Repository installieren. Nach der Installation müssen Sie den Datenbank-Cluster initialisieren und den Dienst aktivieren. Für den Fernzugriff müssen Sie listen_addresses, pg_hba.conf, die Firewall und TLS zusammen konfigurieren.

Die Hauptversion von PostgreSQL und der angegebene Dienstname können je nach Rocky-Linux-Version und den aktiven Repositories variieren. Überprüfen Sie die verfügbaren Pakete und die von Ihrer Anwendung benötigte Version vor der Installation.

Überprüfen, welche PostgreSQL-Versionen verfügbar sind

cat /etc/rocky-release
dnf info postgresql-server
dnf module list postgresql

dnf module ist je nach Rocky Linux- und DNF-Version möglicherweise nicht verfügbar. Wenn eine bestimmte Hauptversion von PostgreSQL erforderlich ist, entscheiden Sie zunächst, ob Sie den Lebenszyklus des Rocky-Standardrepositories oder das vom PostgreSQL-Projekt bereitgestellte PGDG-Repository verwenden möchten, und mischen Sie keine Serverpakete aus verschiedenen Repositories.

PostgreSQL installieren und initialisieren

Server und Client installieren

sudo dnf install postgresql-server postgresql

Überprüfen Sie die installierte Version und die Pakete.

psql --version
rpm -q postgresql-server postgresql

Initialisieren Sie den Datenbank-Cluster

Im Rocky-Standardpaket werden im Allgemeinen die folgenden Werkzeuge verwendet.

sudo postgresql-setup --initdb

Die Initialisierung wird nur einmal in einem leeren Datenverzeichnis durchgeführt. Wenn Sie auf einem Server mit vorhandenen Daten reinitialisieren, kann ein separates Cluster erstellt werden oder es besteht die Gefahr einer Datenbeschädigung, daher sollten Sie zuerst das Datenverzeichnis und die Backups überprüfen.

sudo postgresql-setup --help

Dienststart und automatische Ausführung

sudo systemctl enable --now postgresql
systemctl status postgresql

Versionsspezifische Pakete im PGDG-Repository können unterschiedliche Servicenamen und Initialisierungsbefehle haben, wie postgresql-16. Überprüfen Sie die offiziellen Anweisungen für das installierte Paket und das Ergebnis von systemctl list-unit-files 'postgresql*'.

Lokaler Zugriff und grundlegende Sicherheitseinstellungen

Verbinden Sie sich als Betriebssystemkonto postgres

sudo -iu postgres psql

Die anfängliche lokale Authentifizierung kann die Peer-Methode verwenden, die das Betriebssystemkonto mit der Datenbankrolle verknüpft. Das Passwort der PostgreSQL-Rolle postgres und das Passwort des Linux-Kontos postgres sind unterschiedlich.

Passwörter sicher setzen

Die Verwendung von \password innerhalb von psql ermöglicht es, das Passwort nicht in SQL-Anweisungen und der Shell-Historie zu hinterlegen.

\password postgres

Verwenden Sie keine administrativen Rollen in Anwendungen; erstellen Sie stattdessen zweckgebundene Rollen und Datenbanken.

CREATE ROLE appuser LOGIN;
\password appuser
CREATE DATABASE appdb OWNER appuser;

Überprüfen Sie den tatsächlichen Speicherort der Konfigurationsdatei.

SHOW config_file;
SHOW hba_file;
SHOW data_directory;

Da der Pfad je nach Paket und Version variieren kann, gehen Sie nicht einfach vom Pfad in Online-Dokumenten aus; verwenden Sie den vom Server gemeldeten Wert.

Sichere Remote-Verbindungen erlauben

Listener-Adressen einschränken

Es wird empfohlen, listen_addresses in postgresql.conf auf eine bestimmte private IP des Servers zu beschränken.

listen_addresses = '192.0.2.20'

192.0.2.20 ist ein Beispiel für die Dokumentation. Ersetzen Sie es durch die tatsächliche Serveradresse. * bedeutet alle Schnittstellen, was praktisch ist, aber möglicherweise unnötige Netzwerke aussetzt. Der Standard für PostgreSQL ist der Zugriff über die lokale Schleife. Weitere Details finden Sie in der offiziellen PostgreSQL-Dokumentation zu Verbindungseinstellungen.

Einschränkung von Clients und Authentifizierung in pg_hba.conf

Zum Beispiel, wenn Sie nur möchten, dass ein bestimmter Anwendungsserver eine Verbindung zu appdb als appuser herstellt, können Sie die folgenden Einträge überprüfen.

hostssl  appdb  appuser  192.0.2.10/32  scram-sha-256

pg_hba.conf wird von oben nach unten überprüft, und es wird nur die erste passende Regel verwendet. Wenn Sie großzügige Zulassungsregeln oben platzieren, werden nachfolgende Einschränkungsregeln nicht angewendet. Für detaillierte Felder und die Reihenfolge siehe die offizielle PostgreSQL pg_hba.conf Dokumentation.

Quelladressen mit der Firewall einschränken

sudo firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="192.0.2.10/32" port port="5432" protocol="tcp" accept'

Nach dem Testen neuer Client-Verbindungen die Regeln dauerhaft machen.

sudo firewall-cmd --runtime-to-permanent

Setzen Sie Datenbankports nicht direkt dem gesamten Internet aus. Verwenden Sie private Netzwerke, VPNs, Sicherheitsgruppen und Firewalls zusammen.

Anwenden und Überprüfen von Einstellungen

Authentifizierungsregeln neu laden

Einstellungen, die neu geladen werden können, wie pg_hba.conf, können wie folgt erneut eingelesen werden.

sudo -iu postgres psql -c 'SELECT pg_reload_conf();'

Die Regelsyntax kann in der Systemansicht überprüft werden.

sudo -iu postgres psql -c 'SELECT line_number, type, database, user_name, address, auth_method, error FROM pg_hba_file_rules;'

Anwenden von Einstellungen, die einen Neustart erfordern

Einstellungen, die beim Serverstart angewendet werden, wie listen_addresses, erfordern einen Neustart.

sudo systemctl restart postgresql
sudo systemctl status postgresql

Testen von abhörbereiten Ports und Verbindungen

ss -lntp | grep 5432
psql 'host=192.0.2.20 dbname=appdb user=appuser sslmode=verify-full'

Für verify-full muss der Server TLS bereitstellen und der Client dessen Zertifikatskette anhand einer vertrauenswürdigen CA prüfen können. Der angegebene Host muss zum Serverzertifikat passen; bei einer IP-Adresse wie im Beispiel muss die Zertifikatsprüfung diese IP-Adresse abdecken. Eine reine Passwortauthentifizierung ersetzt die Transportabsicherung nicht.

Vorbereitungspunkte vor der Operation

  • Regelmäßige logische und physische Backups sowie tatsächliche Wiederherstellungstests
  • Planung für die Anwendung unterstützter kleiner Updates
  • Minimalberechtigungsrollen und Passwortrotation pro Anwendung
  • TLS-Zertifikatsüberprüfung und Nutzung eines privaten Netzwerks oder VPN
  • Überwachung von Festplattennutzung, Verbindungsanzahl, Latenz, Checkpoints und Fehlerprotokollen
  • Kompatibilitätsprüfung und Vorbereitung separater Verfahren vor einem Major-Version-Upgrade

PostgreSQL-Hauptversions-Upgrades unterscheiden sich von einfachen Paket-Updates. Planen Sie den offiziellen Upgrade-Pfad entsprechend der Version, wie pg_upgrade, logische Replikation oder Dump und Restore.

Häufig gestellte Fragen

Kann den Befehl postgresql-setup nicht finden

Überprüfen Sie das installierte Repository und die Paketnamen. Die Initialisierungstools und Servicenamen können sich zwischen den Rocky-Standardpaketen und PGDG-Versionsspezifischen Paketen unterscheiden.

Externe Verbindungen werden weiterhin abgelehnt

Überprüfen Sie listen_addresses, die erste passende Regel in pg_hba.conf, den Service-Listening-Port, firewalld und die Cloudsicherheitsgruppen der Reihe nach.

Ist es in Ordnung, 0.0.0.0/0 in pg_hba.conf zuzulassen?

Es deckt das gesamte Internet ab, daher ist es im Allgemeinen am besten, es zu vermeiden. Beschränken Sie sich auf die feste Adresse des tatsächlichen Anwendungsservers oder eines privaten Subnetzes und verwenden Sie TLS und minimale Berechtigungen.

Nach dem Ändern der Konfigurationsdateien, sollte ich reload oder restart verwenden?

Es hängt vom Element ab. pg_hba.conf kann neu geladen werden, aber listen_addresses erfordert einen Neustart. Prüfen Sie pg_settings.pending_restart und den Kontext in der offiziellen Dokumentation.

Zusammenfassung

Unter Rocky Linux wird PostgreSQL in der Reihenfolge Paketinstallation, Cluster-Initialisierung und Service-Aktivierung vorbereitet. Für Remote-Verbindungen wenden Sie spezifische Listening-Adressen, eng gefasste pg_hba.conf-Regeln, Firewall-Quellenbeschränkungen und TLS zusammen an.

Da Konfigurationspfade und Servicenamen je nach Installationsquelle und Version variieren können, ist es sicher, auf Grundlage der von PostgreSQL direkt gemeldeten Pfade und der Dokumentation des installierten Pakets zu arbeiten.