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.
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.
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 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>
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
Recuerde que los archivos myhost.conf
y /etc/hosts
deben configurarse para que nuestra configuración funcione. También puede probar el acceso a su servidor QGIS desde otros clientes en la red (por ejemplo, máquinas Windows o macOS) yendo a su archivo /etc/hosts
y apunte el nombre myhost
a cualquier IP la máquina del servidor tiene en la red. Puede estar seguro de que esa IP específica no es 127.0.0.1
, ya que esa es la IP local, solo accesible desde la máquina local. En las máquinas *nix
, el archivo hosts
se encuentra en /etc
, mientras que en Windows se encuentra en C:\Windows\System32\drivers\directorio etc
. En Windows, debe iniciar su editor de texto con privilegios de administrador antes de abrir el archivo de hosts.
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.
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 agregando127.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 congedit/etc/hosts
.Podemos comprobar que
myhost
apunta al localhost ejecutando en la terminal el comandoping myhost
que debería generar:
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
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 archivomyhost.conf
en el directorio/etc/apache2/sites-available
que tenga el mismo contenido queqgis.demo.conf
excepto la líneaServerName
que debería serServerName 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 conservice 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?¶
Ahora que ha instalado QGIS Server y es accesible a través del protocolo HTTP, necesitamos aprender cómo acceder a algunos de los servicios que puede ofrecer. El tema de la siguiente lección es aprender cómo acceder a los servicios WMS de QGIS Server.