Wie man PostgreSQL und phpPgAdmin auf Fedora 34 installiert

PostgreSQL oder Postgres ist ein leistungsfähiges, quelloffenes, relationales Datenbankmanagementsystem, das die SQL-Sprache nutzt und erweitert. Es hat viele fortschrittliche Funktionen, die komplizierte Daten-Workloads sicher speichern und skalieren. phpPgAdmin ist eine PHP-basierte Anwendung, um PostgreSQL Datenbanken zu verwalten und zu bearbeiten.

In diesem Tutorial wird gezeigt, wie man PostgreSQL und phpPgAdmin auf einem Fedora 34 basierten Server installiert.

Voraussetzungen

  1. Ein Fedora 34 basierter Server.
  2. Halte deine Systeme auf dem neuesten Stand.
    $ sudo dnf update
    
  3. Ein nicht-root Benutzer mit sudo Rechten.

Schritt 1 – PostgreSQL installieren

Fedora 34 wird mit verschiedenen Versionen von PostgreSQL aus dem Repository ausgeliefert. Du kannst zwischen diesen Versionen wählen, indem du das entsprechende Modul aktivierst, welches eine Sammlung von Paketen und Abhängigkeiten ist.

Überprüfe zuerst die verfügbaren Streams für das postgresql Modul mit dem dnf Befehl.

$ dnf module list postgresql
Name                        Stream                  Profiles                           Summary
postgresql                  9.6                     client, server [d]                 PostgreSQL module
postgresql                  10                      client, server [d]                 PostgreSQL module
postgresql                  11                      client, server [d]                 PostgreSQL module
postgresql                  12                      client, server                     PostgreSQL module
postgresql                  13                      client, server                     PostgreSQL module

Um PostgreSQL zu installieren, müssen wir den entsprechenden Modulstream aktivieren.

$ sudo dnf module enable postgresql:13

Wenn du dazu aufgefordert wirst, gib Y ein, um den Stream zu aktivieren.

Als nächstes installierst du den PostgreSQL Server.

$ sudo dnf install postgresql-server

Vielleicht möchtest du das contrib Paket installieren, welches dem PostgreSQL Datenbanksystem einige zusätzliche Features hinzufügt.

$ sudo dnf install postgresql-contrib

Nun, da der Server installiert ist, müssen wir einen neuen Benutzer erstellen.

Schritt 2 – Erstelle einen neuen PostgreSQL Datenbank Cluster

Zuerst musst du einen neuen PostgreSQL Datenbankcluster erstellen. Ein Datenbankcluster ist eine Sammlung von Datenbanken, die von einer einzigen Serverinstanz verwaltet werden. Beim Erstellen eines Clusters werden Verzeichnisse erstellt, in denen die Datenbanken platziert werden. Dieser ganze Prozess ist auch gleichbedeutend mit der Initialisierung von PostgreSQL.

Dieser Prozess erstellt die Datenbankentemplate1 und postgres. Die template1 Datenbank ist eine Vorlage, die von PostgreSQL verwendet wird, um neue Datenbanken zu erstellen. Die postgres Datenbank ist die Standarddatenbank für die Verwendung durch Benutzer, Dienstprogramme und Anwendungen von Drittanbietern.

Um den Datenbankcluster zu erstellen, um PostgreSQL zu initialisieren, verwende den folgenden Befehl.

$ sudo postgresql-setup --initdb

Starte nun den PostgreSQL Dienst.

$ sudo systemctl start postgresql

Aktiviere den PostgreSQL-Dienst.

$ sudo systemctl enable postgresql

Jetzt, wo PostgreSQL läuft, können wir neue Benutzer und Datenbanken erstellen und mit deren Nutzung beginnen.

Schritt 3 – PostgreSQL-Rollen und Authentifizierungsmethoden

PostgreSQL verwendet das Konzept der „Rollen“, um Authentifizierung und Berechtigungen zu handhaben. PostgreSQL unterstützt mehrere Authentifizierungsmethoden. Die am häufigsten verwendeten Methoden sind:

  • Trust – Eine Rolle, die sich ohne Passwort verbinden kann, solange die in/var/lib/pgsql/pg_hba.conf definierten Bedingungen erfüllt sind.
  • Passwort – Eine Rolle, die das Passwort verwendet, um sich zu verbinden. Passwörter können als md5, scram-sha-256 und Klartext gespeichert werden.
  • Ident – Erfordert den OS-Benutzernamen des Clients und wird nur auf TCP/IP-Verbindungen unterstützt.
  • Peer – Wie Ident, wird aber nur auf Localhost-Verbindungen unterstützt.

Postgres verwendet standardmäßig Peer-Authentifizierung, was bedeutet, dass es Postgres-Rollen mit einem passenden Linux-Benutzerkonto assoziiert. Wenn eine Rolle in Postgres existiert, kann sich ein Linux-Benutzername mit dem gleichen Namen als diese Rolle anmelden. Die Details der Client-Authentifizierung werden in der /var/lib/pgsql/pg_hba.conf Datei gespeichert.

Der Installationsprozess von Postgres erstellt ein Benutzerkonto namens postgres, das mit der Standard Postgres Rolle verbunden ist.

Wechsle zu dem postgres Konto.

$ sudo -i -u postgres

Du kannst die Postgres Eingabeaufforderung mit dem folgenden Befehl aufrufen.

$ psql

Dies loggt dich in die PostgreSQL-Eingabeaufforderung ein, wo du über verschiedene Befehle auf die Datenbanken zugreifen und sie benutzen kannst. Du kannst die Eingabeaufforderung verlassen, indem du tippst:

postgres-# \q

Dies bringt dich zurück in den Linux-Account des Postgres-Accounts. Um zurück zu deinem eigenen Benutzerkonto zu gelangen, tippe exit am Prompt ein.

Du kannst auch auf die Postgres Eingabeaufforderung zugreifen, ohne den Account zu wechseln, indem du den folgenden Befehl eingibst.

$ sudo -u postgres psql

Um die Eingabeaufforderung zu verlassen, tippe:

postgres-# \q

Schritt 4 – Erstellen neuer Rollen und Datenbanken.

Du kannst Rollen und Datenbanken direkt aus der Bash-Shell oder der psql Shell erstellen. Für unsere Zwecke werden wir die psql Shell verwenden, da sie die Arbeit schneller erledigt.

Verbinde dich zuerst mit der psql Shell.

$ sudo -u postgres psql

Erstelle eine neue PostgreSQL Rolle mit Rechten wie Superuser, Create database, Create role und Login. Dieser Benutzer wird im weiteren Verlauf des Tutorials für den Login in phpPgAdmin verwendet.

postgres-# CREATE ROLE username WITH SUPERUSER CREATEDB CREATEROLE LOGIN ENCRYPTED PASSWORD 'yourpassword';

Du kannst alle verfügbaren Benutzer mit dem folgenden Befehl überprüfen.

postgres-# \du
                                   List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 username  | Superuser, Create role, Create DB                          | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

Erstelle eine neue Datenbank.

postgres-# CREATE DATABASE userdb;

Erteile dem Benutzer Rechte für die Datenbank, die wir gerade erstellt haben, indem du die folgende Abfrage ausführst.

postgres-# GRANT ALL PRIVILEGES ON DATABASE userdb TO username;

Du kannst alle verfügbaren Datenbanken mit dem folgenden Befehl überprüfen.

postgres-# \l
                                  List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 userdb    | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres         +
           |          |          |             |             | postgres=CTc/postgres+
           |          |          |             |             | navjot=CTc/postgres
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 |
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +
           |          |          |             |             | postgres=CTc/postgres
(4 rows)

Schritt 5 – Aktiviere den Fernzugriff auf den PostgreSQL Server

Standardmäßig lauscht der PostgreSQL Server nur auf dem localhost Interface. Um den Fernzugriff auf deinen PostgreSQL Server zu aktivieren, öffne die postgresql.conf Datei.

$ sudo nano /var/lib/pgsql/data/postgresql.conf

Scrolle runter zum Abschnitt CONNECTIONS AND AUTHENTICATION und ändere/editiere die folgende Zeile, indem du das Rauten-Symbol entfernst.

#listen_addresses = 'localhost'         # what IP address(es) to listen on;

Ändere die Zeile in die folgende.

listen_addresses = '*' 			        # what IP address(es) to listen on;

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Der nächste Schritt ist, den Server so zu konfigurieren, dass er Remote-Verbindungen akzeptiert, indem du die Datei pg_hba.conf bearbeitest.

$ sudo nano /var/lib/pgsql/data/pg_hba.conf

Es gibt verschiedene Möglichkeiten, wie du den Zugriff auf Remote-Verbindungen ermöglichen kannst. Du kannst die Remoteverbindungen entweder auf einen einzelnen Benutzer oder eine einzelne Datenbank beschränken oder auf alle und die Verbindungen entweder auf jede IP-Adresse oder einen vertrauenswürdigen Ort beschränken.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# The user jane can access all databases from all locations using an md5 password
host    all             john            0.0.0.0/0                md5

# The user jane can access only the janedb database from all locations using an md5 password
host    johndb          john            0.0.0.0/0                md5

# The user jane can access all databases from a trusted location (192.168.1.110) without a password
host    all             john            192.168.1.110            trust

Es gibt auch andere Einträge in der Datei, und die Authentifizierungsmethode, die für sie aufgeführt ist, ist ident. Du musst den Wert von ident in md5 ändern, wenn du dich über das Webinterface anmelden willst.

Füge die benötigte Konfiguration hinzu und speichere dann die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den PostgreSQL Server neu, damit die Änderung wirksam wird.

$ sudo systemctl restart postgresql

Überprüfe die Änderungen mit dem ss Dienstprogramm.

$ ss -nlt | grep 5432
LISTEN   0    128    0.0.0.0:5432    0.0.0.0:*       
LISTEN   0    128    [::]:5432      [::]:*  

Dies zeigt, dass der PostgreSQL Server auf dem Standardport auf allen Schnittstellen lauscht.

Schritt 6 – Installiere phpPgAdmin, Nginx, und PHP

phpPgAdmin wird normalerweise mit dem PostgreSQL oder Fedora Repository ausgeliefert, aber nicht in Fedora 34. Daher wirst du es manuell installieren müssen. Zusammen mit phpPgAdmin musst du auch den Nginx Webserver und die PHP Software installieren.

Installiere den Nginx Server und PHP zusammen mit den entsprechenden PHP Modulen.

$  sudo dnf install nginx php-fpm php-cli php-pgsql php-mbstring

Konfiguriere die Fedora Firewall.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

Lade die Firewall neu, um die Regeln zu aktivieren.

$ sudo firewall-cmd --reload

PHP konfigurieren

Öffne die Datei /etc/php-fpm.d/www.conf zur Bearbeitung mit nano editor.

$ sudo nano /etc/php-fpm.d/www.conf

Wir müssen den Unix-Benutzer/die Gruppe der PHP-Prozesse auf nginx setzen. Finde die Zeilen user=apache und group=apache in der Datei und ändere sie auf nginx.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Starte den PHP-fpm Prozess neu.

$ sudo systemctl restart php-fpm

Nginx konfigurieren

Erstelle das Verzeichnis, in dem deine Seite liegen wird.

$ sudo mkdir /var/www/html/phppgadmin -p

Führe den folgenden Befehl aus, um eine Konfigurationsdatei für deine Seite hinzuzufügen.

$ sudo nano /etc/nginx/conf.d/phppgadmin.conf

Füge den folgenden Code in den Editor ein.

server {
  listen          *:80;
  server_name     phppgadmin.example.com;
  root            /var/www/phppgadmin/html;
  index           index.php;

  location / {
    try_files   $uri $uri/ =404;
  }
    
  access_log /var/log/nginx/phppgadmin.access.log;
  error_log /var/log/nginx/phppgadmin.error.log;

  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass  unix:/run/php-fpm/www.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include  fastcgi_params;
  }
}

Drücke Strg + X, um den Editor zu schließen und drücke Y, wenn du zum Speichern der Datei aufgefordert wirst.

Diese Datei nimmt an, dass wir phppgadmin.example.com im Verzeichnis /var/www/html/phppgadmin hosten werden.

Teste die Nginx-Konfiguration.

$ sudo nginx -t

Du solltest die folgende Ausgabe sehen, die anzeigt, dass deine Konfiguration korrekt ist.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Starte und aktiviere den Nginx Dienst.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Starte http://phppgadmin.example.com in deinem Browser, und du solltest die Standard phpPgAdmin Seite in deinem Browser sehen.

phpPgAdmin Homepage

Klicke auf den PostgreSQL Link in der linken Seitenleiste und gib den Benutzer und das Passwort ein, die du zuvor erstellt hast, um dich einzuloggen und auf das Portal zuzugreifen.

phpPgAdmin Dashboard

Schritt 7 – SSL installieren (Optional)

Wir können SSL mit Hilfe des Let’s Encrypt SSL Dienstes aktivieren. Installiere dazu das Certbot Tool.

$ sudo dnf install certbot-nginx

Generiere das SSL-Zertifikat.

$ sudo certbot --nginx -d phppgadmin.example.com

Du wirst nach deiner E-Mail Adresse gefragt und musst den Nutzungsbedingungen zustimmen. Wenn du nach einem HTTPS-Zugang gefragt wirst, wähle die sichere Methode, die alle Anfragen von HTTP auf HTTPS umleitet.

Du solltest in der Lage sein, auf phpPgAdmin zuzugreifen, indem du https://phppgadmin.example.com in deinem Browser eingibst.

SSL für Auto-Renewal konfigurieren

Öffne den Crontab Editor.

$ EDITOR=nano sudo crontab -e

Füge die folgende Zeile am unteren Ende ein.

. . .
25 2 * * * /usr/bin/certbot renew --quiet

Der 25 2 * * * Teil dieser Zeile bedeutet „führe den folgenden Befehl um 2:25 Uhr morgens aus, jeden Tag“. Du kannst jede beliebige Zeit wählen.

Speichere die Datei, indem du Strg + X drückst und Y eingibst, wenn du dazu aufgefordert wirst.

Dein SSL-Zertifikat wird automatisch erneuert.

Fazit

Damit ist unser Tutorial zur Installation von PostgreSQL und phpPgAdmin auf einem Fedora 34 basierten Server abgeschlossen. Wenn du noch Fragen hast, schreibe sie in die Kommentare unten.

Das könnte dich auch interessieren …