Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/hotosm/tasking-manager/llms.txt

Use this file to discover all available pages before exploring further.

HOT Tasking Manager supports two primary deployment paths: Docker Compose for quick self-hosted installations, and AWS CloudFormation for production-grade infrastructure with auto-scaling, load balancing, and managed database services. Choose Docker Compose if you want to run Tasking Manager on your own server with minimal cloud dependency, or AWS CloudFormation if you need a scalable, resilient deployment aligned with HOT’s own production setup.
Before deploying, you must register an OAuth2 application on OpenStreetMap to obtain a TM_CLIENT_ID, TM_CLIENT_SECRET, and TM_REDIRECT_URI. Visit openstreetmap.org to create your application and set the redirect URI to match your deployed frontend URL (e.g. https://tasks.example.org/authorized).

Docker Compose Deployment

Docker Compose is the fastest way to run a self-hosted Tasking Manager. The docker-compose.yml at the root of the repository defines six services: traefik (reverse proxy), tm-frontend (React), tm-backend (FastAPI), tm-migration (Alembic), tm-cron-jobs, and tm-db (PostGIS).

Prerequisites

  • Docker Engine 20.10.0 or newer
  • Docker Compose v2.0.0 or newer
1

Copy the environment file

Copy example.env to tasking-manager.env in the repository root and open it in an editor.
cp example.env tasking-manager.env
2

Configure required variables

At a minimum, set your OSM OAuth2 credentials and the shared application secret:
# OSM OAuth2 application credentials
TM_CLIENT_ID=your-client-id
TM_CLIENT_SECRET=your-client-secret
TM_REDIRECT_URI=http://127.0.0.1:3000/authorized

# Shared secret between frontend and backend
TM_SECRET=s0m3l0ngr4nd0mstr1ng-b3cr34tiv3
For production, replace 127.0.0.1:3000 throughout with your public domain and set TM_APP_BASE_URL and TM_APP_API_URL accordingly.
3

Start all services

Use the --env-file flag to avoid Docker Compose’s default .env file parsing behaviour, which can cause database health-check warnings:
docker compose --env-file tasking-manager.env up -d
The tm-migration container runs Alembic migrations on startup and exits cleanly before tm-backend begins accepting traffic.
4

Verify the deployment

Once all containers are healthy, the services are reachable at:
ServiceURL
Frontendhttp://127.0.0.1:3000
Backend APIhttp://127.0.0.1:3000/api/docs
Traefik routes requests based on path prefix: /api/ goes to tm-backend on port 5000, and everything else goes to tm-frontend on port 3000.

Using an External PostgreSQL Database

If you have an existing PostgreSQL/PostGIS instance (self-hosted or managed), set POSTGRES_ENDPOINT to its hostname and omit the tm-db service. The backend connects using the postgresql+asyncpg driver.
POSTGRES_ENDPOINT=your-db-host.example.com
POSTGRES_PORT=5432
POSTGRES_DB=tasking-manager
POSTGRES_USER=tm
POSTGRES_PASSWORD=your-password
Alternatively, supply a full connection JSON string that takes precedence over all individual variables:
DB_CONNECT_PARAM_JSON='{"username":"tm","password":"myprivatesecret","host":"tm4-database.example.org","port":"5432","dbname":"taskingmanager"}'

Frontend-Only Deployment

To run only the React frontend without the backend (for example, when pointing at a remote API), bring up just the tm-frontend service:
docker compose --env-file tasking-manager.env up -d tm-frontend
Set TM_APP_API_URL in your env file to the URL of the remote backend API.

Using the Override File

A sample override file docker-compose.override.sample.yml is included for local development. It exposes additional ports and enables live reload:
cp docker-compose.override.sample.yml docker-compose.override.yml
docker compose --env-file tasking-manager.env up -d
The override binds tm-db to host port 5433, tm-backend to port 5000, and tm-frontend to port 8000 with a volume mount for live reload.

Traefik Version Note

The docker-compose.yml uses Traefik v3.6.1 by default. If you are running Docker Engine older than 20.10 and experience compatibility issues, you can downgrade to traefik:v2.10 in the compose file. See the Traefik v2 to v3 migration guide for details.

Build docs developers (and LLMs) love