11.1. Lesson: instalar QGIS Server

El objetivo de esta lección: Aprender a instalar QGIS Server en Debian Stretch. Con variaciones insignificantes, también puede seguirlo para cualquier distribución basada en Debian como Ubuntu y sus derivados.

Nota

En Ubuntu puede usar su usuario habitual, anteponiendo sudo a los comandos que requieren permisos de administrador. En Debian puedes trabajar como administrador (root), sin usar sudo.

11.1.1. moderate Follow Along: Instalar desde paquetes

En esta lección vamos a hacer solo la instalación desde paquetes como se muestra aquí <https://qgis.org/en/site/forusers/alldownloads.html#linux>`_ .

instalar QGIS Server con:

apt install qgis-server
# if you want to install server plugins, also:
apt install python-qgis

QGIS Server debe usarse en producción sin QGIS Desktop (con el X Server adjunto) instalado en la misma máquina.

11.1.2. moderate Follow Along: Servidor QGIS Ejecutable

El ejecutable del servidor QGIS es qgis_mapserv.fcgi. Puede comprobar dónde se ha instalado ejecutando find / -name 'qgis_mapserv.fcgi' que debería generar algo como /usr/lib/cgi-bin/qgis_mapserv.fcgi.

Opcionalmente, si desea hacer una prueba de línea de comandos en este momento, puede ejecutar el comando /usr/lib/cgi-bin/qgis_mapserv.fcgi que debería generar algo como:

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>

Esto es bueno, le dice que estamos en el camino correcto ya que el servidor dice que no hemos solicitado un servicio compatible. Más adelante veremos cómo realizar solicitudes WMS.

11.1.3. Follow Along: Configuración del Servidor HTTP

Para acceder al servidor QGIS instalado desde un navegador de Internet, necesitamos usar un servidor HTTP.

En esta lección vamos a usar el Servidor Apache HTTP, llamado coloquialmente Apache.

Primero necesitamos instalar Apache ejecutando el siguiente comando en una terminal

apt install apache2 libapache2-mod-fcgid

Puede ejecutar el servidor QGIS en su sitio web predeterminado o configurar un host virtual específicamente para esto, de la siguiente manera.

En el directorio /etc/apache2/sites-available cree un archivo llamado qgis.demo.conf, con este contenido:

<VirtualHost *:80>
  ServerAdmin [email protected]
  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>

Puede hacer lo anterior en un sistema de escritorio Linux pegando y guardando la configuración anterior después de hacer nano /etc/apache2/sites-available/qgis.demo.conf.

Nota

Consulte algunas de las opciones de configuración que se explican en la sección Servidor Canfiguración avanzada.

Ahora creemos los directorios que almacenarán los registros del servidor QGIS y la base de datos de autenticación:

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``es el usuario de Apache en sistemas basados en Debian y necesitamos que Apache tenga acceso a esas ubicaciones o archivos. Los comandos ``chown www-data... cambia el propietario de los respectivos directorios y archivos a www-data.

Ahora podemos habilitar host virtual, habilite el mod fcgid si aún no está habilitado y reinicie el servicio apache2:

a2enmod fcgid
a2ensite qgis.demo
systemctl restart apache2

Nota

Si instaló QGIS Server sin ejecutar un X Server (incluido en Linux Desktop) y si también desea usar el comando GetPrint, entonces debe instalar un X Server falso y decirle a QGIS Server que lo use. Puede hacerlo ejecutando los siguientes comandos.

Instala xvfb:

apt install xvfb

Crea el archivo de servicio:

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"

Activa, inicia y prueba el estado de xvfb.service:

systemctl enable xvfb.service
systemctl start xvfb.service
systemctl status xvfb.service

En el archivo de configuración anterior hay un FcgidInitialEnv DISPLAY ": 99" `` que le dice a las instancias del servidor QGIS que usen el display no. 99. Si está ejecutando el servidor en el escritorio, entonces no hay necesidad de instalar xvfb y simplemente debe comentar con ``# esta configuración específica en el archivo de configuración. Más información en https://www.itopen.it/qgis-server-setup-notes/.

Ahora que Apache sabe que debe responder las solicitudes a http: //qgis.demo, también necesitamos configurar el sistema cliente para que sepa quién es qgis.demo. Podemos hacer esto añadiendo el archivo 127.0.0.1 qgis.demo in the hosts . Podemos hacerlo con sh -c "echo '127.0.0.1 qgis.demo' >> /etc/hosts". Reemplace 127.0.0.1 con la IP de su servidor.

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.

Podemos probar uno de los servidores qgis instalados con una solicitud http desde la línea de comando con``curl http://qgis.demo/cgi-bin/qgis_mapserv.fcgi`` que debería generar:

<ServiceExceptionReport version="1.3.0" xmlns="https://www.opengis.net/ogc">
<ServiceException code="Service configuration error">Service unknown or unsupported</ServiceException>
</ServiceExceptionReport>

Nota

curl se puede instalar con apt install curl.

Apache ahora está configurado.

Además, desde su navegador web puede verificar las capacidades del servidor:

http://qgis.demo/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities

11.1.4. moderate Follow Along: Crea otro host virtual

Creemos otro host virtual Apache que apunte al servidor QGIS. Puede elegir el nombre que desee (coco.bango, super.duper.training, example.com, etc.) pero por simplicidad vamos a usar myhost.

  • Configuremos el nombre myhost para que apunte a la IP localhost agregando 127.0.0.1 x a /etc/hosts con el siguiente comando: sh -c" echo ' 127.0.0.1 myhost'>> /etc/hosts" o editando manualmente el archivo con gedit/etc/hosts.

  • Podemos comprobar que myhost apunta al localhost ejecutando en la terminal el comando ping myhost que debería generar:

[email protected]:~$ 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
  • Intentemos si podemos acceder a QGIS Server desde el sitio myhost haciendo: curl http://myhost/cgi-bin/qgis_mapserv.fcgi o accediendo a la url desde su navegador de caja Debian. Probablemente obtendrá:

<!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 no sabe que se supone que debe responder a las solicitudes que apuntan al servidor llamado myhost. Para configurar el host virtual, la forma más sencilla sería crear un archivo myhost.conf en el directorio /etc/apache2/sites-available que tenga el mismo contenido que qgis.demo.conf excepto la línea ServerName que debería ser ServerName myhost. También puede cambiar dónde van los registros, ya que de lo contrario se compartirían los registros de los dos hosts virtuales, pero esto es opcional.

  • Ahora habilitemos el host virtual con a2ensite myhost.conf y luego recarguemos el servicio Apache con service apache2 reload.

  • Si intenta nuevamente acceder a la url http://myhost/cgi-bin/qgis_mapserv.fcgi notará que todo está funcionando ahora!

11.1.5. In Conclusion

Aprendió cómo instalar diferentes versiones de QGIS Server desde paquetes, cómo configurar Apache con QGIS Server, en distribuciones Linux basadas en 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.