ASGI⚓︎
While uMap has been historically deployed using the WSGI specification, there is now an experimental ASGI endpoint. This will be the way to deploy uMap to use the live collaborative editing feature, which needs websockets.
Nginx⚓︎
When using ASGI, the nginx, the /
entrypoint should be:
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_redirect off;
proxy_buffering off;
proxy_pass http://umap/;
}
Also add this mapping for the $connection_upgrade
variable:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
Uvicorn⚓︎
Uvicorn must be installed in the umap virtualenv:
/path/to/umap/venv/bin/pip install uvicorn
And could then be run like this:
/path/to/umap/venv/bin/uvicorn \
--proxy-headers \
--uds /srv/umap/umap.sock \
--no-access-log \
umap.asgi:application
Systemd⚓︎
Here is an example service to manage uvicorn with systemd:
[Unit]
Description=umap
After=network.target
Requires=postgresql.service
[Service]
Type=simple
User=umap
WorkingDirectory=/srv/umap/
PrivateTmp=true
EnvironmentFile=/srv/umap/env
ExecStart=/srv/umap/venv/bin/uvicorn \
--proxy-headers \
--uds /srv/umap/uvicorn.sock \
--no-access-log \
umap.asgi:application
ExecReload=/bin/kill -HUP ${MAINPID}
RestartSec=1
Restart=always
[Install]
WantedBy=multi-user.target
Then to install it and enable it, copy it to /etc/systemd/system/umap.service
and run:
sudo systemctl enable umap.service
Env⚓︎
Uvicorn can be configured from env vars, for example to define the number of workers:
/srv/umap/env
UVICORN_WORKERS=4