- Instalar QGIS
- Configurar Nginx
- Configurar fastcgi
- Configurar postgresql
- Configurar proyecto QGIS
- Ejemplo uso OpenLayers
Para instalar un versión actual de QGIS en un servidor Debian/Ubuntu primero hay que añadir el repositorio y la llave tal como esta indicado aquí
Después instalamos QGIS Server con:
sudo apt-get install qgis-server
- Activar configuración por defecto haciendo enlace simbólico:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
- Configurar puerto 6080 como default para Nginx cambiando el fichero
/etc/nginx/sites-available/default
:
server {
listen 6080 default_server;
listen [::]:6080 default_server ipv6only=on;
-
Reiniciar Nginx:
sudo service nginx restart
-
Comprobar acceso: http://localhost:6080/
- Instalar fastcgi:
sudo apt-get install fcgiwrap
- Añadir configuración insertando al fichero
/etc/nginx/sites-available/default
:
location ~ ^/cgi-bin/.*\.fcgi$ {
gzip off;
include fastcgi_params;
root /usr/lib;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
fastcgi_read_timeout 600;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param QGIS_SERVER_LOG_FILE /logs/qgisserver.log;
fastcgi_param QGIS_SERVER_LOG_LEVEL 0;
fastcgi_param QGIS_DEBUG 1;
}
- Cambiar permisos:
chmod g+w /var/run/fcgiwrap.socket
- Encender fastcgi:
service fcgiwrap start
- Reencender nginx:
sudo service nginx restart
Comprobamos que GetCapabilities del QGIS Server funciona correctamente:
http://localhost:6080/cgi-bin/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
- Primero hay que instalar postgresql:
- Instalar postgresql con:
sudo apt-get install postgresql postgresql-contrib
- Crear usuario gisadmin:
sudo -i -u gisadmin
- Crear base de datos gis_test:
createdb gis_test
- Después configuramos el servicio con
pg_service.conf
para no dejar las contraseñas en los archivos de QGIS:
- Creamos el archivo
/etc/postgresql-common/pg_service.conf
con este contenido:
####################### gis_test
[gis_test]
host=localhost
port=5432
dbname=gis_test
user=gisadmin
password=XXX
-
Comprobamos el acceso correcto con:
psql “service=gis_test”
-
En el caso que queremos dejar el archivo
pg_service.conf
en otro directorio, hace falta definir la varialbePGSERVICEFILE
en/etc/nginx/sites-available/default
:
fastcgi_param PGSERVICEFILE "/var/servers/pg_service.conf";
- Opcional: Instalar pgrouting
- Añadir repositorio:
sudo add-apt-repository ppa:georepublic/pgrouting-unstable
- Instalar:
sudo apt-get install postgresql-9.3-pgrouting
Este paso hay que repetir para cada nuevo proyecto de QGIS que se suba al servidor. Para la descripción genérica se usa el nombre proyectoqgis tanto como nombre del fichero del proyecto como para las carpetas:
- Subir fichero QGIS
proyectoqgis.qgs
a carpeta/home/psig/proyectoqgis/
- Cambiar permisos:
chmod a+x /home/psig/proyectoqgis/proyectoqgis.qgs
- Crear carpeta
/usr/lib/cgi-bin/proyectoqgis/
- Crear enlaces simbólico a proyecto:
sudo ln -s /home/psig/proyectoqgis/proyectoqgis.qgs /usr/lib/cgi-bin/proyectoqgis/proyectoqgis.qgs
- Crear enlaces simbólico a script fastcgi:
sudo ln -s /usr/lib/cgi-bin/qgis_mapserv.fcgi /usr/lib/cgi-bin/proyectoqgis/qgis_mapserv.fcgi
Ahora comprobamos el correcto funcionamiento:
- Comprobamos que GetCapabilities del QGIS Server con este proyecto funciona correctamente:
- Comprobamos que QGIS server sirve un mapa:
- Ahora comprobamos que esta accesible desde fuera, substituyendo la IP por el dominio:
GetCapabilities: http://mapes.castelldefels.org/cgi-bin/testqgis/qgis_mapserv.fcgi?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetCapabilities
<!DOCTYPE html>
<html>
<head>
<title>Test WMS MapProxy</title>
<link rel="stylesheet" href="https://openlayers.org/en/v4.6.5/css/ol.css" type="text/css">
<script src="https://openlayers.org/en/v4.6.5/build/ol.js"></script>
<head>
<body>
<div id="map" class="map"></div>
<script>
var wmsLayer = new ol.layer.Tile({
source: new ol.source.TileWMS({
url: 'http://mapes.castelldefels.org/cgi-bin/Base_Mapa_Web/qgis_mapserv.fcgi?map=/home/psig/Base_Mapa_Web.qgs',
params: {
'LAYERS': 'Base_Web',
},
serverType: 'qgis'
})
});
var map = new ol.Map({
target: 'map',
layers: [wmsLayer],
view: new ol.View({
center: [219484, 5053529],
zoom: 14
})
});
</script>
</body>
</html>