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.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.
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
- AWS CloudFormation
Docker Compose Deployment
Docker Compose is the fastest way to run a self-hosted Tasking Manager. Thedocker-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
Copy the environment file
Copy
example.env to tasking-manager.env in the repository root and open it in an editor.Configure required variables
At a minimum, set your OSM OAuth2 credentials and the shared application secret: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.Start all services
Use the The
--env-file flag to avoid Docker Compose’s default .env file parsing behaviour, which can cause database health-check warnings:tm-migration container runs Alembic migrations on startup and exits cleanly before tm-backend begins accepting traffic.Verify the deployment
Once all containers are healthy, the services are reachable at:
Traefik routes requests based on path prefix:
| Service | URL |
|---|---|
| Frontend | http://127.0.0.1:3000 |
| Backend API | http://127.0.0.1:3000/api/docs |
/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), setPOSTGRES_ENDPOINT to its hostname and omit the tm-db service. The backend connects using the postgresql+asyncpg driver.Frontend-Only Deployment
To run only the React frontend without the backend (for example, when pointing at a remote API), bring up just thetm-frontend service:TM_APP_API_URL in your env file to the URL of the remote backend API.Using the Override File
A sample override filedocker-compose.override.sample.yml is included for local development. It exposes additional ports and enables live reload: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
Thedocker-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.