PostgreSQL en phpPgAdmin installeren op Fedora 34

PostgreSQL of Postgres is een krachtig, open-source, relationeel databasemanagement systeem dat de SQL taal gebruikt en uitbreidt. Het heeft veel geavanceerde mogelijkheden om gecompliceerde gegevens werklasten veilig op te slaan en te schalen. phpPgAdmin is een op PHP gebaseerde toepassing om PostgreSQL databases te beheren en te bewerken.

Deze handleiding demonstreert hoe je PostgreSQL en phpPgAdmin op een Fedora 34 gebaseerde server installeert.

Vereisten

  1. Een op Fedora 34 gebaseerde server.

  2. Houd je systemen bijgewerkt.

    $ sudo dnf update
    
  3. Een niet-root gebruiker met sudo privileges.

Stap 1 - Installeer PostgreSQL

Fedora 34 wordt geleverd met verschillende versies van PostgreSQL die uit hun repository beschikbaar zijn. Je kunt tussen deze versies kiezen door de juiste module in te schakelen, dat is een verzameling van pakketten en afhankelijkheden.

Controleer eerst de beschikbare stromen voor de postgresql module met het dnf commando.

$ 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

Om PostgreSQL te installeren, moeten we de bijbehorende module-stroom inschakelen.

$ sudo dnf module enable postgresql:13

Als daarom gevraagd wordt, geef je Y om de stream in te schakelen.

Installeer vervolgens de PostgreSQL server.

$ sudo dnf install postgresql-server

Installeer eventueel het contrib pakket, dat verschillende extra mogelijkheden aan het PostgreSQL databasesysteem toevoegt.

$ sudo dnf install postgresql-contrib

Nu de server geïnstalleerd is, moeten we een nieuwe gebruiker aanmaken.

Stap 2 - Maak een nieuwe PostgreSQL Database Cluster

Eerst moet je een nieuwe PostgreSQL database cluster aanmaken. Een database cluster is een verzameling databases die door een enkele server instantie beheerd worden. Door een cluster aan te maken maak je mappen waarin de databanken worden geplaatst. Dit hele proces is ook verwant aan het initialiseren van PostgreSQL.

Dit proces creëerttemplate1 en postgres databases. De template1 databank is een sjabloon dat door PostgreSQL gebruikt wordt om nieuwe databanken aan te maken. De postgres databank is de standaard databank voor gebruik door gebruikers, hulpprogramma's, en toepassingen van derden.

Gebruik het volgende commando om de database cluster aan te maken en PostgreSQL te initialiseren.

$ sudo postgresql-setup --initdb

Start nu de PostgreSQL dienst.

$ sudo systemctl start postgresql

Schakel de PostgreSQL dienst in.

$ sudo systemctl enable postgresql

Nu PostgreSQL draait, kunnen we nieuwe gebruikers en databases aanmaken en ze gaan gebruiken.

Stap 3 - PostgreSQL Rollen en Authenticatiemethoden

Postgres gebruikt het concept van "rollen" om authenticatie en permissies af te handelen. PostgreSQL ondersteunt meerdere authenticatie methoden. De meest gebruikte methoden zijn:

  • Vertrouwen - Een rol die zonder wachtwoord verbinding kan maken, zolang aan de voorwaarden omschreven in/var/lib/pgsql/pg_hba.conf voldaan is.
  • Password - Een rol die het wachtwoord gebruikt om verbinding te maken. Wachtwoorden kunnen opgeslagen worden als md5, scram-sha-256 en clear-text.
  • Ident - Hiervoor is de gebruikersnaam van het besturingssysteem van de cliënt nodig en deze wordt alleen ondersteund bij TCP/IP verbindingen.
  • Peer - Hetzelfde als Ident maar alleen ondersteund op localhost verbindingen.

Postgres gebruikt standaard peer authenticatie, wat betekent dat het Postgres rollen associeert met het overeenkomen van een Linux gebruikersaccount. Als een rol binnen Postgres bestaat, kan een Linux gebruikersnaam met dezelfde naam zich als die rol aanmelden. De details van de cliënt-authenticatie worden opgeslagen in het /var/lib/pgsql/pg_hba.conf bestand.

Het installatieproces van Postgres maakt een gebruikersaccount aan met de naam postgres die bij de standaard Postgres rol hoort.

Schakel over naar de postgres account.

$ sudo -i -u postgres

Je kunt de Postgres prompt openen met het volgende commando.

$ psql

Dit logt je in op de PostgreSQL prompt, waar je via verschillende commando's databases kunt benaderen en gebruiken. Je kunt de prompt verlaten door te typen:

postgres-# \q

Dit brengt je terug naar de Linux account van de Postgres account. Om terug te keren naar je eigen gebruikersaccount, typ je exit op de prompt.

Je kunt ook de Postgres prompt openen zonder van account te wisselen door het volgende commando te typen.

$ sudo -u postgres psql

Om de prompt te verlaten, type je:

postgres-# \q

Stap 4 - Nieuwe rollen en databases maken.

Je kunt rollen en databases direct vanuit de bash shell of de psql shell aanmaken. Voor onze doeleinden zullen we de psql shell gebruiken omdat die het werk sneller doet.

Maak eerst verbinding met de psql shell.

$ sudo -u postgres psql

Maak een nieuwe PostgreSQL rol aan met rechten als Superuser, Maak database, Maak rol, en Login. Deze gebruiker zal verder in de handleiding gebruikt worden om in te loggen inphpPgAdmin.

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

Je kunt alle beschikbare gebruikers controleren met het volgende commando.

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 | {}

Maak een nieuwe database aan.

postgres-# CREATE DATABASE userdb;

Verleen de gebruiker rechten op de zojuist gemaakte database door de volgende query uit te voeren.

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

Je kunt alle beschikbare databases controleren met het volgende commando.

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)

Stap 5 - Schakel externe toegang tot de PostgreSQL server in

Standaard luistert de PostgreSQL server alleen op de localhost interface. Om externe toegang tot je PostgreSQL server in te schakelen, open je het postgresql.conf bestand.

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

Scroll naar beneden naar de sectie CONNECTIONS AND AUTHENTICATION en verander/wijzig de volgende regel door het hash symbool te verwijderen.

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

Verander de regel in het volgende.

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

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.

De volgende stap is de server in te stellen om verbindingen op afstand te accepteren door het pg_hba.conf bestand te bewerken.

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

Er zijn verschillende manieren waarop je toegang kunt geven tot verbindingen op afstand. Je kunt verbindingen op afstand beperken tot een enkele gebruiker of een enkele database of tot allemaal en de verbindingen beperken tot ofwel elk IP adres of een vertrouwde locatie.

# 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

Er zijn ook andere regels in het bestand, en de authenticatiemethode die ervoor vermeld staat is ident. Je zult de waarde van ident moeten veranderen in md5 als je via de webinterface wilt inloggen.

Voeg de vereiste configuratie toe en bewaar dan het bestand door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.

Herstart de PostgreSQL server om de verandering te laten inwerken.

$ sudo systemctl restart postgresql

Controleer de veranderingen met het ss hulpprogramma.

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

Hieruit blijkt dat de PostgreSQL server op alle interfaces op de standaard poort luistert.

Stap 6 - Installeer phpPgAdmin, Nginx, en PHP

phpPgAdmin wordt gewoonlijk met PostgreSQL's of Fedora's repository meegeleverd, maar niet in Fedora 34. Daarom zul je het handmatig moeten installeren. Samen met phpPgAdmin moet je ook de Nginx webserver en PHP software installeren.

Download de nieuwste versie van phpPgAdmin van deGithub releases pagina. Op het moment van schrijven van deze handleiding is de nieuwste beschikbare versie 7.13.0.

$ wget https://github.com/phppgadmin/phppgadmin/releases/download/REL_7-13-0/phpPgAdmin-7.13.0.tar.gz

Pak het gedownloade archief uit.

$ tar -zxvf phpPgAdmin-7.13.0.tar.gz

Maak de map waar je site komt te staan.

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

Verplaats de uitgepakte bestanden naar de map /var/www/phppgadmin/html.

$ sudo mv phpPgAdmin-7.13.0/ /var/www/phppgadmin/html

Installeer Nginx server en PHP samen met de juiste PHP modules.

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

Configureer de Fedora firewall.

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

Herlaad de firewall om de regels te activeren.

$ sudo firewall-cmd --reload

Configureer PHP

Open het bestand /etc/php-fpm.d/www.conf om het te bewerken met nano editor.

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

We moeten de Unix gebruiker/groep van PHP processen instellen op nginx. Zoek de regels user=apache en group=apache in het bestand en verander ze in 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
...

Sla het bestand op door op Ctrl + X te drukken en Y in te voeren als daarom gevraagd wordt.

Start het PHP-fpm proces opnieuw.

$ sudo systemctl restart php-fpm

Configureer Nginx

Voer het volgende commando uit om een configuratiebestand voor je site toe te voegen.

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

Plak de volgende code in de editor.

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;
  }
}

Druk op Ctrl + X om de editor te sluiten en druk op Y als daarom gevraagd wordt om het bestand op te slaan.

Dit bestand gaat ervan uit dat we phppgadmin.example.com hosten in de directory /var/www/html/phppgadmin.

Test de Nginx configuratie.

$ sudo nginx -t

Je zou de volgende uitvoer moeten zien die aangeeft dat je configuratie juist is.

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

Start de Nginx dienst en schakel hem in.

$ sudo systemctl start nginx
$ sudo systemctl enable nginx

Start http://phppgadmin.example.com in je browser, en je zou de standaard phpPgAdmin pagina in je browser moeten zien.

phpPgAdmin Homepage

Klik op de PostgreSQL link in de linker zijbalk en voer de gebruiker en het wachtwoord in die je eerder maakte om in te loggen en toegang te krijgen tot het portaal.

phpPgAdmin Dashboard

Stap 7 - Installeer SSL (optioneel)

We kunnen SSL inschakelen met de Let's Encrypt SSL dienst. Installeer daarvoor het Certbot gereedschap.

$ sudo dnf install certbot-nginx

Genereer het SSL certificaat.

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

Je wordt om je email adres gevraagd en om in te stemmen met de servicevoorwaarden. Als je gevraagd wordt om HTTPS toegang, kies dan de Secure methode om alle verzoeken van HTTP naar HTTPS om te leiden.

Je zou nu phpPgAdmin moeten kunnen openen door https://phppgadmin.example.com in je browser te typen.

Configureer SSL voor automatisch vernieuwen

Open de Crontab editor.

$ EDITOR=nano sudo crontab -e

Plak de volgende regel onderaan.

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

Het 25 2 * * * deel van deze regel betekent "voer het volgende commando uit om 2:25 uur, elke dag". Je mag een willekeurig tijdstip kiezen.

Bewaar het bestand door op Ctrl + X te drukken en Y in te voeren wanneer daarom gevraagd wordt.

Je SSL certificaat wordt automatisch vernieuwd.

Conclusie

Dit is het einde van onze handleiding over hoe PostgreSQL en phpPgAdmin te installeren op een Fedora 34 gebaseerde server. Als je vragen hebt, stel ze dan in de commentaar hieronder.