https://github.com/3liz/py-qgis-server
QGIS embbeded WMS/WFS/WCS asynchronous scalable http server
https://github.com/3liz/py-qgis-server
python qgis qgis-server tornado wcs wfs wms
Last synced: about 1 year ago
JSON representation
QGIS embbeded WMS/WFS/WCS asynchronous scalable http server
- Host: GitHub
- URL: https://github.com/3liz/py-qgis-server
- Owner: 3liz
- License: mpl-2.0
- Created: 2018-05-14T20:37:55.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2025-05-05T10:05:18.000Z (about 1 year ago)
- Last Synced: 2025-05-05T11:24:45.774Z (about 1 year ago)
- Topics: python, qgis, qgis-server, tornado, wcs, wfs, wms
- Language: Python
- Homepage: https://docs.3liz.org/py-qgis-server
- Size: 7.08 MB
- Stars: 74
- Watchers: 12
- Forks: 16
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: license.txt
Awesome Lists containing this project
README
# QGIS embedded WMS/WFS/WCS asynchronous scalable server
[](https://pypi.org/project/py-qgis-server/)
[](https://pypi.org/project/py-qgis-server/)
[](https://pypi.org/project/py-qgis-server/)
[](https://hub.docker.com/r/3liz/qgis-map-server/tags)
## Description
This is an asynchronous HTTP QGIS server written in python on top of the [tornado](http://www.tornadoweb.org/en/stable/) framework and the
0MQ messaging framework for distributing requests workers.
It is based on the QGIS 3 server API for efficiently passing requests/responses using 0MQ messaging framework to workers.
The server may run as a self-contained single service or as a proxy server with an arbitrary number of workers running
remotely or locally. Independent workers connect automatically to the front-end proxy with no need of special configuration
on the proxy side. Thus, this is ideal for auto-scaling configuration for use with container orchestrator as Rancher, Swarm or Kubernetes.
The server is aimed at solving some real situations encountered in production environment: zero conf scalability, handle long-running request situation, auto restart...
Py-Qgis-server is constantly tested against QGIS release and ltr version.
See the QGIS [roadmap](https://www.qgis.org/en/site/getinvolved/development/roadmap.html#release-schedule).
## Features
- Multiples workers
- Fair queuing request dispatching
- Timeout for long-running/stalled requests
- Full support of qgis server plugins
- Auto-restart trigger for workers
- Support streamed/chunked responses
- SSL support
- Support for access control extensions
- Support for Qgis project stored in postgres database
- Support adding new projects cache handlers as python extension
- Preloading of Qgis projects in static cache
- WFS3 support
- Control exposition of [Qgis API](https://docs.qgis.org/3.16/en/docs/pyqgis_developer_cookbook/server.html#custom-apis)
- Management API (experimental)
## Requirements:
- OS: Unix/Posix variants (Linux or OSX) (Windows not officially supported)
- Python >= 3.8
- Qgis >= 3.28
- Some python knowledge about python virtualenv and package installation.
- libzmq >= 4.0.1 and pyzmq >= 17
## Documentation:
Latest documentation is available on [docs.3liz.org](https://docs.3liz.org/py-qgis-server/)
## Installation
### From Pypi
```bash
pip install py-qgis-server
```
### From docker
Docker is the recommended way to deploy py-qgis-server as it ensure a working environment for
running py-qgis-server
Follow the readme in the [docker/](./docker) folder.
### From source
Install in development mode
```bash
pip install -e .
```
## Running the server
The server does not run as a daemon by itself, there are several ways to run a command as a daemon.
For example:
* Use Supervisor http://supervisord.org/. Will gives you full control over logs and server status notifications.
* Use the `daemon` command.
* Use systemd
* ...
### Running the server
```
usage: qgisserver [-h] [-d] [-c [PATH]]
[--version] [-p PORT] [-b IP] [-w NUM] [-j NUM] [-u SETUID]
[--rootdir PATH] [--proxy] [--timeout SECONDS]
qgis/HTTP/0MQ scalable server
optional arguments:
-h, --help show this help message and exit
-d, --debug debug mode
-c [PATH], --config [PATH]
Configuration file
--version Return version number and exit
-p PORT, --port PORT http port
-b IP, --bind IP Interface to bind to
-w NUM, --workers NUM
Num workers
-j NUM, --jobs NUM Num server instances
-u SETUID, --setuid SETUID
uid to switch to
--rootdir PATH Path to qgis projects
--proxy Run only as proxy
--timeout SECONDS Set client timeout in seconds
```
By default, the command will run server instances with workers and use unix sockets to communicate. This can
be used to run the server as a single command.
#### Running proxy and workers separately
If the `--proxy` option the server will act as a proxy server to talk to independent qgis workers.
Qgis workers can be run using the command:
```
qgisserver-worker --host=localhost --rootdir=path/to/projects
```
### Requests to OWS services
The OWS requests use the following format: `/ows/?`
Example:
```
http://myserver:8080/ows/?SERVICE=WFS&VERSION=1.1.0&REQUEST=GetCapabilities&MAP=
```
### Requests to WFS3 OAPI
The requests use the following format: `/wfs3/?MAP=`
Example:
```
http://myserver:8080/wfs3/collections.html?MAP=
```
### Accessing the Qgis landing page and other qgis API
By default, the landing page is not enabled, see the
[documentation](https://docs.3liz.org/py-qgis-server/configuration.html#api-enabled-landing-page) on how to enable the landing page.
Qgis api may be exposed on demand by [configuring the api endpoints](https://docs.3liz.org/py-qgis-server/qgisapi.html)
#### Using with lizmap
In order to use the server with lizmap, you must set the following configuration
in your `lizmapConfig.ini.php`:
```
[services]
wmsServerURL="http://my.domain:/ows/"
...
; Use relative path
relativeWMSPath=true
```
### Configuration
The configuration can be done either as configuration .ini file in or as environment variables.
The precedences of the configuration parameters is the following (from lowest to highest)
- Defaults values
- Environment variables
- Config file
- Command line options
#### Configuration parameters
Please look at [the documentation](https://docs.3liz.org/py-qgis-server/index.html) for configuration options
## Logging
By default, the server log on stdout/stderr and you have to configure redirection and log rotation
on your infrastructure environment