The goal for this lesson: To learn how to install QGIS Server on Debian Stretch. With negligible variations (prepending sudo to all admin commands) you can also follow it for any Debian based distribution like Ubuntu and its derivatives.
In this lesson we’re going to do only the install from packages as shown here .
First add the QGIS repository by creating the /etc/apt/sources.list.d/debian-qgis.list file with the following content:
# latest stable
deb http://qgis.org/debian stretch main
deb-src http://qgis.org/debian stretch main
After you add the qgis.org repository public key to your apt keyring (follow the above link on how to do it) you can run the apt-get update command to refresh the packages list and apt-get dist-upgrade to upgrade the packages.
Nota
Currently Debian stable has LTR qgis packages in the source jessie-backports, so the above steps are not necessary. Just add the jessie-backports repository and install with the -t jessie-backports option.
Installa QGIS Server con:
apt-get install qgis-server python-qgis
Nota
adding -y at the end of the apt-get command will run it straight away, without requiring confirmation.
QGIS Server deve essere utilizzato in produzione senza QGIS Desktop installato sulla stessa macchina.
L’eseguibile di QGIS Server è qgis_mapserv.fcgi. Puoi verificare dove è stato installato con find / -name 'qgis_mapserv.fcgi' che dovrebbe rispondere qualcosa di simile /usr/lib/cgi-bin/qgis_mapserv.fcgi.
Se vuoi fare una prova da terminale puoi eseguire /usr/lib/cgi-bin/qgis_mapserv.fcgi` che dovrebbe rispondere qualcosa come:
QFSFileEngine::open: No file name specified
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver ECW to unload from GDAL_SKIP environment variable.
Warning 1: Unable to find driver JP2ECW to unload from GDAL_SKIP environment variable.
Content-Length: 206
Content-Type: text/xml; charset=utf-8
<ServiceExceptionReport version="1.3.0" xmlns="http://www.opengis.net/ogc">
<ServiceException code="Service configuration error">Service unknown or unsupported</ServiceException>
</ServiceExceptionReport>
Questa è una buona cosa, ti dice che sei sulla strada giusta mentre il server sta dicendo che non hai chiesto un servizio supportato. Vedrai in seguito come fare richieste WMS.
Per accedere da un navigatore internet al server QGIS installato devi utilizzare un server HTTP.
In this lesson we’re going to use the Apache HTTP server, colloquially called Apache.
Per prima cosa devi installare Apache eseguendo il seguente comando in un terminale: apt-get install apache2 libapache2-mod-fcgid.
Nella cartella /etc/apache2/sites-available crea un file chiamato qgis.demo.conf, con questo contenuto:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
ServerName qgis.demo
DocumentRoot /var/www/html
# Apache logs (different than QGIS Server log)
ErrorLog ${APACHE_LOG_DIR}/qgis.demo.error.log
CustomLog ${APACHE_LOG_DIR}/qgis.demo.access.log combined
# Longer timeout for WPS... default = 40
FcgidIOTimeout 120
FcgidInitialEnv LC_ALL "en_US.UTF-8"
FcgidInitialEnv PYTHONIOENCODING UTF-8
FcgidInitialEnv LANG "en_US.UTF-8"
# QGIS log (different from apache logs) see http://docs.qgis.org/testing/en/docs/user_manual/working_with_ogc/ogc_server_support.html#qgis-server-logging
FcgidInitialEnv QGIS_SERVER_LOG_FILE /var/log/qgis/qgisserver.log
FcgidInitialEnv QGIS_SERVER_LOG_LEVEL 0
FcgidInitialEnv QGIS_DEBUG 1
# default QGIS project
SetEnv QGIS_PROJECT_FILE /home/qgis/projects/world.qgs
# QGIS_AUTH_DB_DIR_PATH must lead to a directory writeable by the Server's FCGI process user
FcgidInitialEnv QGIS_AUTH_DB_DIR_PATH "/home/qgis/qgisserverdb/"
FcgidInitialEnv QGIS_AUTH_PASSWORD_FILE "/home/qgis/qgisserverdb/qgis-auth.db"
# See http://docs.qgis.org/testing/en/docs/user_manual/working_with_vector/supported_data.html#pg-service-file
SetEnv PGSERVICEFILE /home/qgis/.pg_service.conf
FcgidInitialEnv PGPASSFILE "/home/qgis/.pgpass"
# Tell QGIS Server instances to use a specific display number
FcgidInitialEnv DISPLAY ":99"
# if qgis-server is installed from packages in debian based distros this is usually /usr/lib/cgi-bin/
# run "locate qgis_mapserv.fcgi" if you don't know where qgis_mapserv.fcgi is
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin/">
AllowOverride None
Options +ExecCGI -MultiViews -SymLinksIfOwnerMatch
Order allow,deny
Allow from all
Require all granted
</Directory>
<IfModule mod_fcgid.c>
FcgidMaxRequestLen 26214400
FcgidConnectTimeout 60
</IfModule>
</VirtualHost>
You can do the above in a linux Desktop system by pasting and saving the above configuration after doing sudo nano /etc/apache2/sites-available/qgis.demo.conf.
Nota
Alcune delle opzioni di configurazione sono spiegate nella sezione server Advanced configuration.
Crea ora la cartella che archivierà i registri di QGIS Server e il database di autenticazione.
sudo mkdir /var/log/qgis/
sudo chown www-data:www-data /var/log/qgis
mkdir /home/qgis/qgisserverdb
sudo chown www-data:www-data /home/qgis/qgisserverdb
Nota
www-data è l’utente Apache su sistemi basati su Debian e Apache deve accedre a queste posizioni o file. I comandi chown www-data ... `` cambiano il proprietario delle rispettive cartelle e file in ``www-data.
Ora puoi abilitare il servizio di rete virtuale, abilitare il modulo fcgid mod se non è già abilitato e riavviare il servizio apache2:
sudo a2enmod fcgid
sudo a2ensite qgis.demo
sudo service apache2 restart
Nota
Se hai installato QGIS Server senza eseguire un X server (incluso in Linux Desktop) e se vuoi anche usare il comando `` GetPrint``, allora dovresti installare un server X falso e dire a QGIS Server di usarlo. Puoi farlo eseguendo i seguenti comandi.
Installa xvfb:
sudo apt-get install xvfb
Cea il file di servizio:
sudo sh -c \
"echo \
'[Unit]
Description=X Virtual Frame Buffer Service
After=network.target
[Service]
ExecStart=/usr/bin/Xvfb :99 -screen 0 1024x768x24 -ac +extension GLX +render -noreset
[Install]
WantedBy=multi-user.target' \
> /etc/systemd/system/xvfb.service"
Abilita, avvia e verifica lo stato di xvfb.service:
sudo systemctl enable xvfb.service
sudo systemctl start xvfb.service
sudo systemctl status xvfb.service
In the above configuration file there’s a FcgidInitialEnv DISPLAY ":99" that tells QGIS Server instances to use display no. 99. If you’re running the Server in Desktop then there’s no need to install xvfb and you should simply comment with # this specific setting in the configuration file. More info at http://www.itopen.it/qgis-server-setup-notes/.
Now that Apache knows that he should answer requests to http://qgis.demo we also need to setup the client system so that it knows who qgis.demo is. We do that by adding 127.0.0.1 qgis.demo in the hosts file. We can do it with sudo sh -c "echo '127.0.0.1 qgis.demo' >> /etc/hosts". Replace 127.0.0.1 with the IP of your server.
Nota
Ricorda che entrambi i file myhost.conf and /etc/hosts devono essere configurati affinche l’installazione funzioni. Puoi anche testare l’accesso al tuo QGIS Server da altri client sulla rete (es. Macchine Windows o Macos) andando al loro file: /etc/hosts e puntando il nome myhost a qualunque IP del serve della rete. Puoiessere sicuro che quell’IP specifico non sia `` 127.0.0.1`` poiché questo è l’IP locale, accessibile solo dal computer locale. You can be sure that that specific IP is not 127.0.0.1 as that’s the local IP, only accessible from the local machine. Su macchine *nix il file hosts è posizionato in /etc, mentre su Windows è nella cartella C:\Windows\System32\drivers\etc. Sotto Windows è necessario avviare l’editor di testo con privilegi di amministratore prima di aprire il file hosts.
Puoi testare uno dei server qgis installati con una richiesta http dalla riga di comando curl http://qgis.demo/cgi-bin/qgis_mapserv.fcgi che dovrebbe produrre:
<ServiceExceptionReport version="1.3.0" xmlns="http://www.opengis.net/ogc">
<ServiceException code="Service configuration error">Service unknown or unsupported</ServiceException>
</ServiceExceptionReport>
Nota
curl can be installed with sudo apt-get install curl.
Apache è ora configurato.
Crea un altro host virtuale Apache che punta a QGIS Server. Puoi scegliere il nome che preferisci (coco.bango, super.duper.training, example.com, etc.) ma per semplicità userai myhost.
Puoi controllare che myhost punti a localhosteseguendo nel terminale ping myhost che dovrebbe produrre:
qgis@qgis:~$ ping myhost
PING myhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.029 ms
..
Puoi accedere a QGIS Server dal sito myhost eseguendo: ``curl http://myhost/cgi-bin/qgis_mapserv.fcgi`` accedendo all’URL dal tuo browser di Debian. Probabilmente otterrai:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /cgi-bin/qgis_mapserv.fcgi was not found on this server.</p>
<hr>
<address>Apache/2.4.25 (Debian) Server at myhost Port 80</address>
</body></html>
Se provi di nuovo ad accedere all’URL http: //myhost/cgi-bin/qgis_mapserv.fcgi noterai che tutto sta funzionando!
Hai imparato come installare diverse versioni di QGIS Server dai pacchetti, come configurare Apache con QGIS Server, su distribuzioni Linux basate su Debian.
Ora che hai installato QGIS Server ed è accessibile tramite il protocollo HTTP, dovrai imparare come accedere ad alcuni dei servizi che può offrire. L’argomento della prossima lezione è imparare come accedere ai servizi WMS di QGIS