umap/docs/deploy/docker.md
Yohan Boniface 023645a160 wip: make Redis service optional in Docker image
Co-authored-by: David Larlet <david@larlet.fr>
2025-04-03 17:12:12 +02:00

2.6 KiB
Raw Blame History

Docker

An official uMap docker image is available on the docker hub. But, if you prefer to run it with docker compose, here is the configuration file:

services:
  db:
    # check https://hub.docker.com/r/postgis/postgis to see available versions
    image: postgis/postgis:14-3.4-alpine
    environment:
      - POSTGRES_HOST_AUTH_METHOD=trust
    volumes:
      - umap_db:/var/lib/postgresql/data

  app:
    # Check https://hub.docker.com/r/umap/umap/tags to find the latest version
    image: umap/umap:2.9.3
    ports:
      # modify the external port (8001, on the left) if desired, but make sure it matches SITE_URL, below
      - "8001:8000"
    environment:
      - DATABASE_URL=postgis://postgres@db/postgres
      - SITE_URL=https://localhost:8001/
      - STATIC_ROOT=/srv/umap/static
      - MEDIA_ROOT=/srv/umap/uploads
    volumes:
      - umap_userdata:/srv/umap/uploads
      # FIX the path on the left, below, to your location 
      # OPTIONAL, you can comment the line below out for default
      # values to apply
      - /home/ubuntu/umap.conf:/etc/umap/umap.conf
    restart: always
    depends_on:
      - db
    
volumes:
  umap_userdata:
  umap_db:

Note that youll have to set a SECRET_KEY environment variable that must be secret and unique. One way to generate it is through the secrets module from Python:

$ python3 -c 'import secrets; print(secrets.token_hex(100))'

User accounts can be managed via the Django admin page ({SITE_URL}/admin). The required superuser must be created on the container command line with this command:

umap createsuperuser

## Developping with Docker

If you want to develop with podman or docker, here are commands that might be useful, given that you have a postgreSQL server running locally and that your settings are located at umap.conf:

You can build the docker image with:

podman build -t umap .

And run it with:

podman run -v ./umap.conf:/tmp/umap.conf -e UMAP_SETTINGS=/tmp/umap.conf -it --network host umap  

Real time collaboration

To enable real time collaboration when using Docker, a Redis service must be added. Something like this in docker-compose.py world:

services
  redis:
    image: redis:latest
    healthcheck:
      test: ["CMD-SHELL", "redis-cli ping | grep PONG"]

    command: ["redis-server"]

  app:
    depends_on:

      redis:
        condition: service_healthy

    environment:
      - WEBSOCKET_ENABLED=1
      - REDIS_URL=redis://redis:6379