Instalacja PostgreSQL – Serwer relacyjnej bazy danych PostgreSQL może zostać uruchomiony na w zasadzie dowolnej platformie systemowej. Jednym z popularniejszych środowisk uruchomieniowych dla PostgreSQL są z racji swojej otwartości (w sensie otwartych licencji open source) Debian w dystrybucji Ubuntu.
Poniżej zaprezentujemy proces instalacji PostgreSQL w wersji 12 na Ubuntu Server 20.04.
Jako że pracować będziemy z Ubuntu uruchamianym na maszynie wirtualnej, to niejako „dla kompletu” na tej samej maszynie zainstalujemy, skonfigurujmy i uruchomimy serwerową wersję pgAdmina, tak aby nasze środowisko ćwiczebne wyposażone zostało we wszystko co niezbędne do dalszej wygodnej pracy.
Rozpocznijmy od instalacji Postgre SQL.
Instalacja PostgreSQL
W pierwszym kroku odświeżymy indeks lokalnych pakietów serwera:
$ sudo apt updatePostgreSQL zainstalujemy z pakietu, bowiem jest to z jednej strony najprostsza, zaś z drugiej najpewniejsza (bo zweryfikowana przez dostawców dystrybucji) metoda instalacji. Dodatkowo binaria PostgreSQL zostaną rozmieszczone w katalogach Debiana w sposób najbardziej zgodny z najlepszymi praktykami.
Pakiet postgres zainstalujemy wraz z pakietem postgres-contrib, który dodaje kilka dodatkowych narzędzi i funkcjonalności:
$ sudo apt install postgresql postgresql-contribDomyślnie PostgreSQL używa do obsługi uwierzytelniania i autoryzacji konstrukcji o nazwie „rola”. Role są pod pewnymi względami podobne do koncepcji użytkowników i grup w Debiana. Po instalacji PostgreSQL jest skonfigurowany do korzystania z uwierzytelniania ident, co oznacza, że kojarzy on role Postgresa z kontem systemu Debian o identycznej nazwie.
Jeśli dajmy na to istnieje w PostgreSQL rola dowolna_nazwa, to użytkownik Debiana o takiej samej nazwie (loginie) może zalogować się jako ta rola. W naszym wypadku procedura instalacji utworzyła w systemie (Debian) konto użytkownika o nazwie postgres, które jest poprzez mechanizm ident powiązane z domyślną rolą Postgresa o tej samej nazwie. Istnieje kilka sposobów wykorzystania tego konta w celu uzyskania dostępu do Postgresa. Jednym ze sposobów jest przełączenie się na konto postgres na serwerze przy wykorzystaniu polecenia sudo:
$ sudo -i -u postgres
# lub
$ sudo su postgresPo przelogowaniu na konto użytkownika postgres możemy rozpocząć pracę w trybie interaktywnym wiersza poleceń PostgreSQL uruchamiając:
$ psqlWiersz poleceń PostgreSQL zamykamy pisząc \q, tj:
postgres=# \qTworzenie nowej roli w PostgreSQL
Ponieważ nadal pracujemy na koncie użytkownika postgres, bez przelogowania możemy przystąpić do utworzenia nowej roli. Służy do tego narzędzie (aplikacja) createuser:
$ createuser --interactive
Enter name of role to add: mypostgres
Shall the new role be a superuser? (y/n) yJak widać powyżej stworzyliśmy nową rolę mypostgres z uprawnieniami superusera.
Aplikacja createuser może być uruchamiana również w trybie wsadowym z parametrami opisanymi szczegółowo w dokumentacji.
Jak wspomnieliśmy wcześniej w PostgreSQL mamy do czynienia z mechanizmem ident, czyli z mapowaniem użytkownika Linux (właściwie Debian) na rolę Postgresa. Role mamy już utworzoną, ale brakuje dla niej użytkownika w systemie operacyjnym, dlatego musimy takiego utworzyć:
$ sudo adduser mypostgres
Adding user `mypostgres' ...
Adding new group `mypostgres' (1001) ...
Adding new user `mypostgres' (1001) with group `mypostgres' ...
Creating home directory `/home/mypostgres' ...
Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for mypostgres
Enter the new value, or press ENTER for the default
        Full Name []: mypostgres
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n] Y
Tworzenie bazy danych
System uwierzytelniania PostgreSQL domyślnie przyjmuje, że dla dowolnej roli używanej do logowania rola ta będzie miała dostęp do bazy danych o tej samej nazwie. Oznacza to, że jeśli rola, którą utworzyliśmy poprzednio nazywa się mypostgres, ta rola będzie próbowała połączyć się z bazą danych, która domyślnie jest również nazywana mypostgres. Odpowiednią bazę danych można utworzyć za pomocą polecenia createdb:
$ createdb mypostgresPo przełączeniu się na linuxowego użytkownika mypostgres i uruchomieniu z jego shella trybu interaktywnego PostgreSQL (psql) możemy zweryfikować parametry połączenia jakich użyto dla sesji tego użytkownika:
$ psql
mypostgres=# \conninfo
You are connected to database "mypostgres" as user "mypostgres" via socket in "/var/run/postgresql" at port "5432".Możemy również zweryfikować czy rola mypostgres posiada uprawnienia superusera:
$ psql
mypostgres=# \du
                                    List of roles
 Role name  |                         Attributes                         | Member of
------------+------------------------------------------------------------+-----------
 mypostgres | Superuser, Create role, Create DB                          | {}
 postgres   | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
Należy tutaj zauważyć, że rolę założyć można by również wykonując odpowiednie zapytanie w trybie interaktywnym (psql):
mypostgres=# CREATE ROLE mypostgres WITH LOGIN SUPERUSER CREATEDB CREATEROLE PASSWORD 'securepassword';Instalacja pgAdmin
pgAdmin jest napisaną w Pythonie i jQuery aplikacją służącą do zarządzania bazą danych oraz ogólnie mówiąc wsparcia prac programistycznych. Dalej omówimy proces instalowania i konfigurowania pgAdmin na serwerze Ubuntu 20.04 w trybie „serwerowym”, to jest takim, w którym aplikacja dostępna będzie z zewnątrz przez przeglądarkę WWW.
Instalować pgAdmin będziemy tak jak Postgresa, tj. z użyciem pakietów. Pakiety DEB są dostępne dla różnych wersji Debiana i Ubuntu w repozytorium pgAdmin APT. Na dzień dzisiejszy obsługiwane są następujące platformy:
- Debian 9 (Stretch, do v5.3), 10 (Buster), 11 (Bullseye, od v4.30)
- Ubuntu 16.04 (Xenial, do v4.30), 18.04 (Bionic), 19.10 (Eoan, do v4.29), 20.04 (Focal), 20.10 (Groovy, od v4.30 do v5.5), 21.04 (Hirsute , od v5.3 do v6.4), 21.10 (Impish, od v6.2)
Pakiety nie są standardowo dołączone do skonfigurowanych domyślnie repozytoriów Ubuntu. Dlatego w maszym systemie musimy zarejestrować repozytorium pgAdmina. Zaczniemy od zainstalowania klucza publicznego do repozytorium:
$ sudo curl https://www.pgadmin.org/static/packages_pgadmin_org.pub | sudo apt-key add
[sudo] password for xxxxxxx:
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  3935  100  3935    0     0   3312      0  0:00:01  0:00:01 --:--:--  3312
OKNastępnie utworzymy plik konfiguracyjny repozytorium:
sudo sh -c 'echo "deb https://ftp.postgresql.org/pub/pgadmin/pgadmin4/apt/$(lsb_release -cs) pgadmin4 main" > /etc/apt/sources.list.d/pgadmin4.list && apt update' Jeśli wszystko zostało wykonane poprawnie przechodzimy do instalacji:
# Instalujemy pgAdmin w web mode: 
$ sudo apt install pgadmin4-web 
# Następnie uruchamiamy konfigurator serwera www:
$ sudo /usr/pgadmin4/bin/setup-web.sh
[sudo] password for xxxxxxx:
Setting up pgAdmin 4 in web mode on a Debian based platform...
Creating configuration database...
pgAdmin 4 - Application Initialisation
======================================
Creating storage and log directories...
We can now configure the Apache Web server for you. This involves enabling the wsgi module and configuring the pgAdmin 4 application to mount at /pgadmin4. Do you wish to continue (y/n)? y
The Apache web server is running and must be restarted for the pgAdmin 4 installation to complete. Continue (y/n)? y
Apache successfully restarted. You can now start using pgAdmin 4 in web mode at http://127.0.0.1/pgadmin4
W naszym środowisku testowym pracujemy w oparciu o maszyny wirtualne VirtualBox z interfejsem sieciowym skonfigurowanym jako NAT. Stąd musimy przekierować port 80 TCP maszyny wirtualnej na wybrany (np. 80) port hosta:

Po zakończonej instalacji możemy zweryfikować, czy aplikacja WWW jest dostępna za pośrednictwem przeglądarki:

Konfiguracja zdalnego dostępu do PostgreSQL
Domyślnie PostgreSQL jest skonfigurowany tylko do dostępu lokalnego. Nie zawsze jest to wystarczające, dlatego pokażemy jak otworzyć dostęp do PostgreSQL z zewnątrz.

W celu skonfigurowania dostępu zdalnego via TCP/IP (przez sieć) musimy zmienić ustawienia edytując plik pg_hba.conf:
$ sudo nano /etc/postgresql/12/main/pg_hba.confW pliku dokonujemy następujących modyfikacji:

Następnie musimy edytować główny plik konfiguracyjny PostgreSQL i zmienić adres nasłuchiwania:
$ sudo nano /etc/postgresql/12/main/postgresql.conf
Po zapisaniu obu plików należy zrestartować usługę postgresql:
$ sudo systemctl restart postgresqlTeraz możemy zweryfikować działanie naszych ustawień:
$ ss -antpl | grep 5432
LISTEN   0        244              0.0.0.0:5432          0.0.0.0:*
LISTEN   0        244                 [::]:5432             [::]:* 
                                                        
                            