Installare PgAdmin 4 in server mode

pgAdmin 4 fin dalla sua comparsa non ha entusiasmato nessuno per le performance, anche perchè lo si usava nello stesso modo di pgAdmin III.

La mia personale considerazione è che il gruppo di sviluppo di pgadmin abbia creato la possibilità di far funzionare pgAdmin come applicazione desktop per dare il tempo di capire che invece va’ usato come un’applicazione web.
Vediamo quindi come installarlo “nativamente” e poi ciascuno farà le proprie considerazioni.Useremo come piattaforma una ubuntu 16.04 LTS, ovviamente se usate un’altra piattaforma sia che sia un’altra distribuzione Linux piuttosto che un’altra famiglia di sistemi operativi come OpenBSD oppure Window, il procedimento potrà cambiare nella sitassi dei comandi usati ma i concetti sono gli stessi per tutte le piattaforme per cui facendo attenzione si può adattare la guida alla propria realtà.

Se trovate difficoltà lasciate un commento e cercherò di aiutarvi.

Per muoverci più agilmente impersoniamo l’utente root con:

sudo su root

Ora la prima cosa da fare è installare e/o aggiornare tutti i pacchetti che ci servono come prerequisito: è chiaro che se uno dei pacchetti che andiamo ad installare è già presente sul sistema semplicemente ignoreremo le segnalazioni relative.
Per l’installazione di python rimando al link: installare-lultima-versione-python

Fatto questo partiamo con il nostro amato  apt-get:

apt-get install build-essential libffi-dev libgmp3-dev libpq-dev libssl-dev python3 python3.6-dev python3-pip python3.6-venv

Se nel frattempo la versione di python è stata aggiornata modificate i comandi laddove si specifica la versione.
L’altro prerequisito e il virtual enviroment di python che serve ad isolare la nostra applicazioni dal resto del mondo in modo che le modifiche fatte al sistema non influenzino la nostra applicazione.

sudo pip install --upgrade virtualenvwrapper
sudo pip install --upgrade cryptography pyopenssl ndg-httpsclient pyasn1 

ci spostiamo su:

/usr/local/src

poi prepariamo l’ambiente per pgadmin con:

python3.6 -m venv ./pgadmin

ci spostiamo all’interno della directory appena creata

cd pgadmin

per attivare l’ambiente virtuale  appena creato digitiamo:

source bin/activate

Poi finalmente scarichiamo l’oggetto del nostro desiderio (attenzione ad aggiornare il numero della versione):

wget https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v4.0/pip/pgadmin4-4.0-py2.py3-none-any.whl

e infine lo installiamo:

pip install pgadmin4-4.0-py2.py3-none-any.whl

se tutto è andato bene dobbiamo solo creare il file di configurazione copiandolo da un template con:

cp ./lib/python3.6/site-packages/pgadmin4/config.py ./lib/python3.6/site-packages/pgadmin4/config_local.py

Può essere che vogliate cambiare l’indirizzo ip e la porta dove pgAdmin viene posizionato, in questo caso dovete variare, all’interno del file appena copiato, i seguenti parametri:

DEFAULT_SERVER = '127.0.0.1'
DEFAULT_SERVER_PORT = 5050

Finalmente si può vedere il tutto all’opera lanciando il programma con il comando:

python lib/python3.6/site-packages/pgadmin4/pgAdmin4.py

N.B.B. (Nota Bene Bene del 23/02/2020)

Dario Concilio (che ringrazio) segnala un bug che può essere risolto con la seguente patch:

https://github.com/lepture/flask-wtf/commit/8b028994b68f5fffbf920770a0b4943a5225b282 

Tenete presente la data di questa nota, può anche darsi che al momento in cui leggete il package sia stato aggiornato incorporando questa modifica e rendendo superfluo questo avviso.

N.B.
Alla prima esecuzione viene inizializzato il db utenti del’applicazione (diverso da quello del database) per cui bisogna porre attenzione alla richiesta dell’indirizzo email da usare come nome di accesso dell’amministratore e relativa password.
In caso di ERRORE per reinizializzare il database utenti bisogna cancellare la directory .pgadmin creata nella home dell’utente che la inizializza.
Anche per questo è IMPORTANTE eseguire queste operazioni come root altrimenti quando il programma verrà eseguito come servizio non troverà più il database utenti

Ovviamente se non avete un ambiente grafico sulla macchina non riuscirete a collegarvi a meno che non abbiate cambiato i parametri dell’indirizzo ip a cui è stato collegato il servizio.

Il prossimo passaggio è quello di rendere disponibile il server appena installato tramite una connessione sicura in SSL configurando il server web NGINX come un reverse proxy.

La prima cosa ovviamente è installare NGINX e per questo vi rimando all’articolo:

http://www.folstuff.eu/2017/07/ubuntu-16-04-lts-installare-lultima-versione-nginx/.

Subito dopo è necessario creare un file di configurazione per il sito che rimandi a quello servito da pgadmin4 su 127.0.0.1:5050.
Il file in questione è:

/etc/nginx/sites-available/scuola247.conf

E deve contenere le seguenti istruzioni:

##
## Pgadmin reverse proxy
##
#
# Default server configuration
#
server {
 listen 80 default_server;
 #
 # SSL configuration
 #
 listen 443 ssl default_server;
 #
 # Self signed certs generated by the ssl-cert package
 # Don't use them in a production server!
 #
 include snippets/snakeoil.conf;

root /var/www/html;

# Add index.php to the list if you are using PHP

index index.html index.htm index.nginx-debian.html;

server_name scuola247 scuola247.fulcro.net scuola247.sede.fulcro.net;

#
# expose PgAdmin to the outside world
#
 location / {
 proxy_pass http://127.0.0.1:5050/;
 }
}

Vi ricordo che il presente tutorial da’ per scontato che questa sia l’unica configurazione presente, se così non fosse, ovviamente si dovrà modificare opportunamente i file di cui sopra.

Ricordandovi di installare l’utility per la gestione dei siti di NGINX di cui ho trattato in:

http://www.folstuff.eu/2017/07/nginx-utility-la-gestione-dei-siti/

A questo punto i comandi da dare sono:

nginx_modsite -d default
nginx_modsite -e scuola247.conf

dopo aver impostato il vostro file host per risolvere il nome del sito all’indirizzo ip della vostra macchina come nell’esempio qui di seguito:

x.x.x.x                   scuola247

Potete finalmente godervi il vostro:

https://scuola247

Ora quello che manca per finire è la creazione di un servizio che faccia partire automaticamente all’avvio del sistema il server pgadmin.

La prima cosa da fare è creare il file:

/lib/systemd/system/pgadmin.service

E al suo interno mettere le seguenti informazioni:

#
# PgAdmin Web Admin interface for PostgreSQL Database Server
# 
[Unit]
Description=PgAdmin Web Admin interface for PostgreSQL Database Server
Requires=postgresql.service
After=postgresql.service
Documentation=https://pgadmin.org

[Service]
Type=simple
ExecStart=/usr/local/src/pgadmin/bin/python /usr/local/src/pgadmin/lib/python3.6/site-packages/pgadmin4/pgAdmin4.py
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=pgadmin.service

per abilitare il tutto occorre eseguire il comando:

sudo systemctl enable pgadmin

Ora alla partenza del sistema anche pgadmin partirà consentendoci di amministrare il serve postgres da qualsiasi browser.

È stata una faticaccia ma spero ne sia valsa la pena.

Andrea

Lascia un commento