{"id":22371328,"url":"https://github.com/3liz/py-qgis-server","last_synced_at":"2025-05-16T15:08:26.773Z","repository":{"id":43708524,"uuid":"133418611","full_name":"3liz/py-qgis-server","owner":"3liz","description":"QGIS embbeded WMS/WFS/WCS  asynchronous scalable http server","archived":false,"fork":false,"pushed_at":"2025-05-05T10:05:18.000Z","size":7419,"stargazers_count":74,"open_issues_count":0,"forks_count":16,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-05-05T11:24:45.774Z","etag":null,"topics":["python","qgis","qgis-server","tornado","wcs","wfs","wms"],"latest_commit_sha":null,"homepage":"https://docs.3liz.org/py-qgis-server","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/3liz.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2018-05-14T20:37:55.000Z","updated_at":"2025-05-05T10:04:20.000Z","dependencies_parsed_at":"2023-11-07T15:33:24.929Z","dependency_job_id":"b1e1315e-3266-4c1e-9c04-29ea789c84a0","html_url":"https://github.com/3liz/py-qgis-server","commit_stats":{"total_commits":443,"total_committers":9,"mean_commits":49.22222222222222,"dds":0.4018058690744921,"last_synced_commit":"ac59abf45f11e216b59d4c484d948a78baa24ded"},"previous_names":[],"tags_count":80,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3liz%2Fpy-qgis-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3liz%2Fpy-qgis-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3liz%2Fpy-qgis-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/3liz%2Fpy-qgis-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/3liz","download_url":"https://codeload.github.com/3liz/py-qgis-server/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254553958,"owners_count":22090417,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["python","qgis","qgis-server","tornado","wcs","wfs","wms"],"created_at":"2024-12-04T20:18:57.810Z","updated_at":"2025-05-16T15:08:21.748Z","avatar_url":"https://github.com/3liz.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# QGIS embedded WMS/WFS/WCS asynchronous scalable server\n\n[![PyPi version badge](https://badgen.net/pypi/v/py-qgis-server)](https://pypi.org/project/py-qgis-server/)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/py-qgis-server)](https://pypi.org/project/py-qgis-server/)\n[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/py-qgis-server)](https://pypi.org/project/py-qgis-server/)\n[![Docker Pulls](https://img.shields.io/docker/pulls/3liz/qgis-map-server)](https://hub.docker.com/r/3liz/qgis-map-server/tags)\n\n## Description\n\nThis is an asynchronous HTTP QGIS server written in python on top of the [tornado](http://www.tornadoweb.org/en/stable/) framework and the\n0MQ messaging framework for distributing requests workers.\n\nIt is based on the QGIS 3 server API for efficiently passing requests/responses using 0MQ messaging framework to workers.\n\nThe server may run as a self-contained single service or as a proxy server with an arbitrary number of workers running\nremotely or locally. Independent workers connect automatically to the front-end proxy with no need of special configuration\non the proxy side. Thus, this is ideal for auto-scaling configuration for use with container orchestrator as Rancher, Swarm or Kubernetes.\n\nThe server is aimed at solving some real situations encountered in production environment: zero conf scalability, handle long-running request situation, auto restart...\n\nPy-Qgis-server is constantly tested against QGIS release and ltr version.\nSee the QGIS [roadmap](https://www.qgis.org/en/site/getinvolved/development/roadmap.html#release-schedule).\n\n## Features\n\n- Multiples workers\n- Fair queuing request dispatching\n- Timeout for long-running/stalled requests\n- Full support of qgis server plugins\n- Auto-restart trigger for workers\n- Support streamed/chunked responses \n- SSL support\n- Support for access control extensions\n- Support for Qgis project stored in postgres database\n- Support adding new projects cache handlers as python extension \n- Preloading of Qgis projects in static cache\n- WFS3 support\n- Control exposition of [Qgis API](https://docs.qgis.org/3.16/en/docs/pyqgis_developer_cookbook/server.html#custom-apis)\n- Management API (experimental)\n\n## Requirements:\n\n- OS: Unix/Posix variants (Linux or OSX) (Windows not officially supported)\n- Python \u003e= 3.8\n- Qgis \u003e= 3.28\n- Some python knowledge about python virtualenv and package installation.\n- libzmq \u003e= 4.0.1 and pyzmq \u003e= 17\n\n## Documentation:\n\nLatest documentation is available on [docs.3liz.org](https://docs.3liz.org/py-qgis-server/)\n\n## Installation\n\n### From Pypi\n\n```bash\npip install py-qgis-server\n```\n\n### From docker\n\nDocker is the recommended way to deploy py-qgis-server as it ensure a working environment for\nrunning py-qgis-server\n\nFollow the readme in the [docker/](./docker) folder.\n\n### From source \n\nInstall in development mode\n```bash\npip install -e .\n```\n\n## Running the server\n\nThe server does not run as a daemon by itself, there are several ways to run a command as a daemon.\n\nFor example:\n\n* Use Supervisor http://supervisord.org/. Will gives you full control over logs and server status notifications.\n* Use the `daemon` command.\n* Use systemd\n* ...\n\n\n### Running the server\n\n```\nusage: qgisserver [-h] [-d] [-c [PATH]]\n                  [--version] [-p PORT] [-b IP] [-w NUM] [-j NUM] [-u SETUID]\n                  [--rootdir PATH] [--proxy] [--timeout SECONDS]\n\nqgis/HTTP/0MQ scalable server\n\noptional arguments:\n  -h, --help            show this help message and exit\n  -d, --debug           debug mode\n  -c [PATH], --config [PATH]\n                        Configuration file\n  --version             Return version number and exit\n  -p PORT, --port PORT  http port\n  -b IP, --bind IP      Interface to bind to\n  -w NUM, --workers NUM\n                        Num workers\n  -j NUM, --jobs NUM    Num server instances\n  -u SETUID, --setuid SETUID\n                        uid to switch to\n  --rootdir PATH        Path to qgis projects\n  --proxy               Run only as proxy\n  --timeout SECONDS     Set client timeout in seconds\n```\n\nBy default, the command will run server instances with workers and use unix sockets to communicate. This can \nbe used to run the server as a single command.\n\n#### Running proxy and workers separately\n\nIf the `--proxy` option the server will act as a proxy server to talk to independent qgis workers. \n\nQgis workers can be run using the command:\n\n```\nqgisserver-worker --host=localhost --rootdir=path/to/projects\n```\n\n\n### Requests to OWS services\n\nThe OWS requests use the following format:  `/ows/?\u003cows_query_params\u003e`\n\nExample:\n\n```\nhttp://myserver:8080/ows/?SERVICE=WFS\u0026VERSION=1.1.0\u0026REQUEST=GetCapabilities\u0026MAP=\u003cqgis_project_spec\u003e\n```\n\n### Requests to WFS3 OAPI\n\nThe requests use the following format:  `/wfs3/\u003cwfs3_api_endpoint\u003e?MAP=\u003cqgis_project_spec\u003e`\n\nExample:\n\n```\nhttp://myserver:8080/wfs3/collections.html?MAP=\u003cqgis_project_spec\u003e\n```\n\n### Accessing the Qgis landing page and other qgis API\n\nBy default, the landing page is not enabled, see the\n[documentation](https://docs.3liz.org/py-qgis-server/configuration.html#api-enabled-landing-page) on how to enable the landing page.\n\nQgis api may be exposed on demand by [configuring the api endpoints](https://docs.3liz.org/py-qgis-server/qgisapi.html)\n\n\n#### Using with lizmap\n\nIn order to use the server with lizmap, you must set the following configuration\nin your `lizmapConfig.ini.php`:\n\n```\n[services]\nwmsServerURL=\"http://my.domain:\u003cport\u003e/ows/\"\n...\n\n; Use relative path\nrelativeWMSPath=true\n```\n\n### Configuration\n\nThe configuration can be done either as configuration .ini file in or as environment variables.\n\nThe precedences of the configuration parameters is the following (from lowest to highest)\n\n- Defaults values\n- Environment variables\n- Config file\n- Command line options\n\n#### Configuration parameters\n\nPlease look at [the documentation](https://docs.3liz.org/py-qgis-server/index.html) for configuration options\n\n## Logging\n\nBy default, the server log on stdout/stderr and you have to configure redirection and log rotation \non your infrastructure environment\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3liz%2Fpy-qgis-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F3liz%2Fpy-qgis-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F3liz%2Fpy-qgis-server/lists"}