Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: add very minimal documentation for deploying uMap with ASGI #2480

Merged
merged 1 commit into from
Feb 6, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
83 changes: 83 additions & 0 deletions docs/deploy/asgi.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
# 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](nginx.md), 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/;
}
```

## 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](https://www.uvicorn.org/deployment/) from env vars,
for example to define the number of workers:

```env title="/srv/umap/env"
UVICORN_WORKERS=4
```
4 changes: 2 additions & 2 deletions docs/deploy/nginx.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Here are some configuration files to use umap with nginx and [uWSGI](https://uws

```nginx title="nginx.conf"
upstream umap {
server unix:///srv/umap/uwsgi.sock;
server unix:///srv/umap/umap.sock;
}

server {
Expand Down Expand Up @@ -69,7 +69,7 @@ master = true
# maximum number of worker processes
processes = 4
# the socket (use the full path to be safe)
socket = /srv/umap/uwsgi.sock
socket = /srv/umap/umap.sock
# ... with appropriate permissions - may be needed
chmod-socket = 666
stats = /srv/umap/stats.sock
Expand Down
1 change: 1 addition & 0 deletions mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ nav:
- Docker: deploy/docker.md
- Helm: deploy/helm.md
- Nginx: deploy/nginx.md
- ASGI: deploy/asgi.md
- Changelog: changelog.md
theme:
name: material
Expand Down
Loading