Home > Fragmenty szkoleń > Instalacja PostgreSQL wraz z pgAdmin na Ubuntu

Instalacja PostgreSQL wraz z pgAdmin na Ubuntu

instalacja PostgreSQL

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:

Przekierowanie portów

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.

Domyślne ustawienia dostępu w pg_hba.conf PostgreSQL 12

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:

Zmiany w pg_hba.conf

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             [::]:*

Po więcej informacji zapraszamy na nasze szkolenia…

Może Cię również zainteresować: