installare QGIS server su Linux

QGIS server: come si installa su Debian/Ubuntu

Per installare QGIS server su un sistema Linux Debian o Ubuntu, si procede in modo simile a come si fa per QGIS desktop: tramite i package (PPA) distribuiti con le repository preparate per questi sistemi. Quindi innanzitutto bisogna verificare che nel file /etc/apt/sources.list ci sia configurata una “repo” aggiornata che contiene i pacchetti di QGIS.

Come indicato nella pagina ufficiale con le istruzioni per installare QGIS su sistemi Linux, le principali repo per sistemi debian/ubuntu sono queste:

  • https://qgis.org/debian (per l’ultima versione stabile) e https://qgis.org/debian-ltr (per la versione LTR);
  • https://qgis.org/ubuntugis  (per l’ultima versione stabile) e https://qgis.org/ubuntugis-ltr (per la versione LTR);

per chi non lo sapesse, ricordiamo che per QGIS, e quindi anche per QGIS server, sono sempre disponibili tre versioni : l’ultima stabile, la LTR (Long Time Release) e quella ancora in fase di sviluppo (dev).

Prima di scegliere una repo, verificate sempre che sia prevista la vostra versione di debian/ubuntu; per esempio nel caso della repo debian, se andate alla pagina qgis.org/debian/dists/ trovate l’elenco delle cartelle con i nomi delle versioni di debian/ubuntu attualmente supportate:

repo debian QGIS

Fatto ciò, potete aggiungere nel file /etc/apt/sources.list le righe corrispondenti per la vostra versione di debian/ubuntu. Per esempio se scegliamo la repo debian per un sistema Ubuntu 16.04 (nome: xenial) le righe da scrivere in sources.list sono queste:

Web server Apache

Visto che QGIS server è implementato come modulo FastCGI del web server Apache, è evidente che, prima di procedere con l’installazione di QGIS server,  Apache deve essere già installato e funzionante nel vostro sistema. Per chi è già abbastanza pratico di Apache non c’è nulla da aggiungere; qui diamo solo qualche rapida indicazione per i meno esperti.

Per verificare se Apache è già installato o meno, basta scrivere nel browser  http:\\localhost e dovreste ottenere una pagina di risposta, ovvero la homepage impostata per il web server; per esempio nel caso di Apache installato su sistema Ubuntu la homepage di default (come da installazione) appare così:

apache default homepage

Se invece Apache non c’è e dovete installarlo, è sufficiente digitare a terminale:

alla fine dell’installazione, i suoi file si trovano nella cartella /etct/apache2/.
/etc/apache2/

I suoi moduli sono invece contenuti nella cartella /usr/lib/apache2/modules/.

Alcuni comandi elementari, ma utili per gestire il servizio Apache sono:

apt-get install qgis-server

Chiusa questa breve parentesi su Apache, dopo aver configurato la nostra repo per QGIS server (oppure verificato che c’è già) , vediamo esattamente quali sono i passi da effettuare per installarlo.

Innanzitutto è sempre bene fare un apt-get update per aggiornare l’indice dei pacchetti per tutte le repo configurate nel sistema:

se dovesse comparire un messaggio di errore dovuto all’assenza della chiave per la comunicazione col server della repo, allora è possibile scaricare la chiave da un server di chiavi e aggiungerla ad apt in un unico passaggio, così:

dove al posto di CAEB3DC3BDF7FB45  scriverete il codice della chiave  comparso nel messaggio di errore.

Se prima di proseguire vogliamo controllare qual’è la versione di QGIS server disponibile con la repo configurata, a terminale scriviamo il seguente comando:

la risposta sarà di questo tipo:

apt-cache qgis-server

A questo  punto l’installazione di QGIS server è molto semplice, basta scrivere:

in pratica insieme a QGIS server si installano anche altre due componenti fondamentali per il suo funzionamento: il modulo python di QGIS ed il modulo FastCGI di Apache 2. A titolo puramente informativo, sappiate che il modulo mod-fcgid è una variante del modulo mod-fastcgi; pur implementando entrambi il FastCGI, si configurano e funzionano in modo differente.

Ricordiamo anche (vedi questo precedente articolo) che QGIS server usa molte librerie in comune con QGIS desktop, ma non è richiesto che sia installato anch’esso; se lo fosse, è importante che siano entrambi  della stessa versione (es.: 2.16).

Completata l’installazione, dentro la cartella /usr/lib/cgi-bin/ troveremo il file  qgis_mapserv.fcgi e dentro la cartella /etc/apache2/mods-available/ i file fcgid.conf e fcgid.load .

qgis server cartelle

Non dovrebbe essere necessario, perchè con l’installazione avviene anche l’abilitazione del modulo FastCGI; tuttavia nell’incertezza eseguiamo a terminale:

dobbiamo anche abilitare il “rewrite” dei moduli di Apache per consentire il meccanismo di autenticazione base HTTP (HTTP basic access auth), che nel contesto di una transazione HTTP,  è un metodo per fornire credenziali di accesso tra client e server:

e per concludere riavviamo Apache:

Configurazione di Apache

QGIS server è un modulo FastCGI di Apache, quindi per farlo funzionare correttamente quando è invocato da un client, la sola installazione non è sufficiente ma, bisogna anche aggiornare opportunamente la configurazione di Apache. Se non lo fate, è probabile che se nel browser scrivete l’URL  http://localhost/cgi-bin/qgis_mapserv.fcgi?  viene restituito questo messaggio di errore:

error 404 not found

Senza voler scendere nei dettagli, per i meno esperti diciamo che la configurazione di Apache su sistemi Debian/Ubuntu, per maggiore flessibilità, si può effettuare tramite diversi file .conf che fanno capo, in modo gerarchico (usando degli include) ad un file principale di configurazione che si chiama apache2.conf  ed è dentro la cartella /etc/apache2/.

Per comodità il file apache2.conf è suddiviso in tre sezioni: configurazioni globali del processo server, configurazioni del default server, configurazioni per i virtual hosts; le impostazioni desiderate si possono scrivere direttamente entro ciascuna di esse oppure in altri file .conf esterni che vengono richiamati dentro apache2.conf con la direttiva IncludeOptional.

Uno di questi file riguarda i virtual host di Apache, si chiama 000-default.conf (o default.conf , dipende dalla distro) ed è dentro la cartella /etc/apache2/sites-available/ ed è questo che useremo per le impostazioni utili al corretto funzionamento di QGIS server FastCGI.

Innanzitutto dobbiamo dire ad Apache cosa corrisponde a /cgi-bin/ scritto nell’URL (con ScriptAlias) e poi dare delle direttive per la directory /usr/lib/cgi-bin/ che contiene il modulo qgis_mapserv.fcgi.
Allora apriamo con un normale text editor ( come sudo) il file 000-default.conf e scriviamo dopo la riga  DocumentRoot /var/www/html:

Notiamo anche la presenza della riga FcgidIOTimeout 120; essa serve ad aumentare a 120 sec il tempo massimo di attesa per la risposta del modulo FastCGI ad una data richiesta. Infatti il valore di default (40 sec) è troppo basso e si rischia che la risposta del modulo FastCGI non arrivi in tempo, provocando un errore, come per esempio questo:

Apache internal error 500

Salviamo le modifiche fatte nel file 000-default.conf e riavviamo il web server Apache ( … da fare sempre ogni volta che si modifica la configurazione di Apache!):

Ok, non ci resta che verificare se ora QGIS server funziona bene; un modo semplice consiste nell’ inviare una richiesta GetCapabilities WMS, scrivendo nel browser il seguente URL:

se è tutto ok, otterremo la risposta con le Capabilities del servizio WMS implementato da QGIS server :

WMS GetCapabilities

Se invece il web server ci restituisce un messaggio di errore, probabilmente abbiamo sbagliato a scrivere la configurazione appena vista (… rivedetela!) oppure ci sono altre impostazioni che contrastano con quelle fatte per QGIS server, cosa possibile se Apache non è “pulito” (come da installazione) ma è configurato anche per altri servizi. In questo caso capire dove sta il problema potrebbe non essere semplice e, se non siete pratici di Apache, meglio farsi aiutare da qualcuno più esperto!

Altre direttive di configurazione

La configurazione appena vista è quella di base, sufficiente per il corretto funzionamento del modulo FastCGI di QGIS server. Tuttavia altre direttive possono essere utili ed essere scritte sempre nel file 000-default.conf. Generalmente sono del tipo FcgidInitialEnv, ovvero direttive che assegnano il valore di alcune variabili d’ambiente usate da QGIS server.

Le seguenti direttive impostano il set di codifica dei caratteri da adoperare:

Queste altre impostano le modalità di LOG di QGIS server:

la prima è uno switch on/off per attivare la modalità di debug, poi viene specificato il percorso del file di LOG e infine viene indicato il livello di LOG desiderato: 0 per qualunque informazione, 1 solo per i warnings, 2 solo per gli errori critici.

Attenzione che il modulo FastCGI di Apache deve avere i permessi di accesso al file di LOG, quindi eventualmente bisogna cambiare l’owner della cartella che lo contiene con www-data,  il particolare utente che esegue il web server:

Altra impostazione utile riguarda il sistema di autenticazione di QGIS (vedi sulla documentazione online: Authentication system); se si ha intenzione di usarlo, ovvero definire l’accesso alle risorse tramite password, allora serve scrivere nel file di configurazione qual’è il DB SqLite adoperato per l’autenticazione:

Anche in questo caso, vale quanto detto per il file di LOG e cioè il modulo FastCGI  deve avere i permessi di accesso alla cartella che contiene il DB di autenticazione.

QGIS server, come QGIS, può usare dei plugin scritti in Python; ce ne sono alcuni sul repository ufficiale (plugins per QGIS server) ma ognuno che ci riesca, si può realizzare i propri. In ogni caso, perchè possano essere usati,  devono essere messi in una apposita cartella e questa deve essere dichiarata nel file di configurazione:

Richieste GetPrint

QGIS server ha la possibilità di stampare le mappe WMS (come immagine o come PDF) usando gli stessi template definiti col print-composer su QGIS; il suo servizio WMS infatti contempla anche una richiesta GetPrint (proprietaria) che consente ad un client di stampare la mappa richiamando tali modelli di stampa.

Perchè questa richiesta GetPrint funzioni correttamente, è però necessario che il sistema in cui viene installato QGIS server abbia un X server; per chi non è pratico di Linux l’ X server (o X Window ) è il gestore del sistema grafico a finestre e quindi è già presente nei sistemi Linux desktop (tipici ambienti desktop sono : Gnome, Unity, KDE, LXDE, Cinammon, … etc).

Il problema si pone allora per i sistemi server che tipicamente non includono un ambiente a finestre ma come interfaccia-utente prevedono solo il terminale con i comandi testuali (la shell). La soluzione per la GetPrint consiste allora nell’installare un cosiddetto fake X server e dire a QGIS server di usare quello.

Il fake X server più noto per sistemi Linux si chiama Xvfb e si installa molto semplicemente così:

finita l’installazione, dobbiamo creare il corrispondente file di servizio che chiameremo xvfb.service e posizioniamo nella directory /etc/systemd/system/ (dovete farlo come sudo); il contenuto di questo file, che possiamo scrivere con un normale text-editor, è il seguente:

Notiamo che in esso si fa riferimento al display (screen) del sistema, individuandolo con il numero 99; questa indicazione deve essere uguale al valore di una variabile d’ ambiente DISPLAY,  impostata con una direttiva FcgidInitialEnv, insieme alle altre viste prima, cioè dentro il file 000-default.conf

essa specifica che le istanze del modulo FastCGI, quindi QGIS server, possono usare il display n. 99.
Non ci resta che abilitare e poi avviare il servizio Xvfb:

se poi volessimo controllare lo stato del servizio, c’è il comando:

 

condividi: