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 update
PostgreSQL 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-contrib
Domyś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 postgres
Po przelogowaniu na konto użytkownika postgres możemy rozpocząć pracę w trybie interaktywnym wiersza poleceń PostgreSQL uruchamiając:
$ psql
Wiersz poleceń PostgreSQL zamykamy pisząc \q, tj:
postgres=# \q
Tworzenie 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) y
Jak 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 mypostgres
Po 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
OK
Nastę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.conf
W 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 postgresql
Teraz 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 [::]:*