11.1. Lesson: Installa QGIS Server¶
The goal for this lesson: To learn how to install QGIS Server on Debian Stretch. With negligible variations you can also follow it for any Debian based distribution like Ubuntu and its derivatives.
Nota
In Ubuntu you can use your regular user, prepending sudo
to
commands requiring admin permissions. In Debian you can work as admin (root
),
without using sudo
.
11.1.1.
Follow Along: Installa da pacchetti¶
In this lesson we’re going to do only the install from packages as shown here .
Installa QGIS Server con:
apt install qgis-server
# if you want to install server plugins, also:
apt install python-qgis
QGIS Server should be used in production without QGIS Desktop (with the accompanying X Server) installed on the same machine.
11.1.2.
Follow Along: QGIS Server eseguibile¶
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="https://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.
11.1.3. Follow Along: Configura il server HTTP¶
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.
First we need to install Apache by running the following command in a terminal:
apt install apache2 libapache2-mod-fcgid
You can run QGIS server on your default website, or configure a virtualhost specifically for this, as follows.
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 https://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 https://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 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.
mkdir /var/log/qgis/
chown www-data:www-data /var/log/qgis
mkdir /home/qgis/qgisserverdb
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
:
a2enmod fcgid
a2ensite qgis.demo
systemctl restart apache2
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:
apt install xvfb
Cea il file di servizio:
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
:
systemctl enable xvfb.service
systemctl start xvfb.service
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 https://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 sh -c "echo '127.0.0.1 qgis.demo' >> /etc/hosts"
.
Replace 127.0.0.1
with the IP of your server.
Nota
Remember that both the myhost.conf
and /etc/hosts
files should
be configured for our setup to work.
You can also test the access to your QGIS Server from other clients on the
network (e.g. Windows or macOS machines) by going to their /etc/hosts
file and point the myhost
name to whatever IP the server machine has on the
network. 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. On *nix
machines the
hosts
file is located in /etc
, while on Windows it’s under
the C:\Windows\System32\drivers\etc
directory. Under Windows you
need to start your text editor with administrator privileges before opening
the hosts file.
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="https://www.opengis.net/ogc">
<ServiceException code="Service configuration error">Service unknown or unsupported</ServiceException>
</ServiceExceptionReport>
Nota
curl can be installed with apt install curl
.
Apache è ora configurato.
Also, from your web browser you can check the capabilities of the server:
http://qgis.demo/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
11.1.4.
Follow Along: Crea un altro virtual host¶
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
.
Let’s set up the
myhost
name to point to the localhost IP by adding127.0.0.1 x
to the/etc/hosts
with the following command:sh -c "echo '127.0.0.1 myhost' >> /etc/hosts"
or by manually editing the file withgedit /etc/hosts
.Puoi controllare che
myhost
punti a localhosteseguendo nel terminaleping 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>
Apache doesn’t know that he’s supposed to answer requests pointing to the server named
myhost
. In order to setup the virtual host the simplest way would be to make amyhost.conf
file in the/etc/apache2/sites-available
directory that has the same content asqgis.demo.conf
except for theServerName
line that should beServerName myhost
. You could also change where the logs go as otherwise the logs for the two virtual hosts would be shared but this is optional.Let’s now enable the virtual host with
a2ensite myhost.conf
and then reload the Apache service withservice apache2 reload
.Se provi di nuovo ad accedere all’URL http: //myhost/cgi-bin/qgis_mapserv.fcgi noterai che tutto sta funzionando!
11.1.5. In Conclusion¶
Hai imparato come installare diverse versioni di QGIS Server dai pacchetti, come configurare Apache con QGIS Server, su distribuzioni Linux basate su Debian.
11.1.6. What’s Next?¶
Now that you’ve installed QGIS Server and it’s accessible through the HTTP protocol, we need to learn how to access some of the services it can offer. The topic of the next lesson is to learn how to access QGIS Server WMS services.