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
Een op Fedora 34 gebaseerde server.
Houd je systemen bijgewerkt.
$ sudo dnf update
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.
. 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.
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.
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.