Deploying Checkmate on Docker with Portainer and NPM
- Ro
- Jun 30
- 2 min read
# Checkmate Docker Compose + Nginx Proxy Manager Guide
Ready to take checkmate out of the home lab and host externally?
This guide shows you how to deploy Checkmate using Docker Compose using Stacks on Portainer, with Nginx Proxy Manager (NPM) in front!
Perfect for hosting on a cheap VPS somewhere, I prefer a VPS with Debian+Docker+Portainer, if this works for you, then here is the setup I used.
Below is the compose file that is compatible with portainer stacks.
Change https://monitoring.example.com in the compose file to be your URL
Create a DNS entry for monitoring.example.com pointing to the IP address of your NPM (Nginx Proxy Manager)
Make sure port 443 and 80 are forwarded to your NPM
Create a JWT Secret Key, there are details further down the page
NPM setup details are further down the page
services:
checkmate_client:
image: ghcr.io/bluewave-labs/checkmate-client:latest
container_name: checkmate_client
environment:
- UPTIME_APP_API_BASE_URL=https://monitoring.example.com/api/v1
- UPTIME_APP_CLIENT_HOST=https://monitoring.example.com
networks:
- checkmate_network
expose:
- 80
restart: unless-stopped
depends_on:
- checkmate_server
checkmate_server:
image: ghcr.io/bluewave-labs/checkmate-backend:latest
container_name: checkmate_server
environment:
- DB_CONNECTION_STRING=mongodb://checkmate_mongo:27017/uptime_db?replicaSet=rs0
- REDIS_URL=redis://checkmate_redis:6379
- CLIENT_HOST=https://monitoring.example.com
- JWT_SECRET=YOUR_JWT_SECRET_HERE
networks:
- checkmate_network
expose:
- 52345
restart: unless-stopped
depends_on:
- checkmate_mongo
- checkmate_redis
checkmate_mongo:
image: ghcr.io/bluewave-labs/checkmate-mongo:latest
container_name: checkmate_mongo
volumes:
- /srv/checkmate/mongo:/data/db
networks:
- checkmate_network
expose:
- 27017
command: ["mongod", "--quiet", "--replSet", "rs0", "--bind_ip_all"]
healthcheck:
test: echo "try { rs.status() } catch (err) { rs.initiate({_id:'rs0',members:[{_id:0,host:'checkmate_mongo:27017'}]}) }" | mongosh --port 27017 --quiet
interval: 5s
timeout: 30s
retries: 30
restart: unless-stopped
checkmate_redis:
image: redis:latest
container_name: checkmate_redis
volumes:
- /srv/checkmate/redis:/data
networks:
- checkmate_network
expose:
- 6379
restart: unless-stopped
networks:
checkmate_network:
driver: bridge
Generating a JWT Secret
You must generate a random JWT secret for the server. Here are two options:
On Linux or WSL:
openssl rand -hex 32
On Windows:
Install either Git for Windows or Win64 OpenSSL Light
openssl rand -hex 32
Paste that into the JWT_SECRET value in your compose.
Nginx Proxy Manager Configuration
Make sure you join your NPM Container to the "checkmate_network" so it can proxy the requests to checkmate_client container.
Create a Proxy Host
Domain: monitoring.example.com
Forward Host/IP: checkmate_client container IP
Forward Port: 80
Scheme: http
Enable Websockets Support
Force SSL ON
Use Let’s Encrypt certificate for monitoring.example.com
Add a Custom Location
Location: /api/v1
Forward Host/IP: checkmate_server container IP
Forward Port: 52345
Scheme: http
SSL Tab
Force SSL: ON
HTTP/2 Support: optional
HSTS: optional
Why the custom location?
/ goes to the client container
/api/v1 goes to the backend container
your browser stays HTTPS
no CORS or mixed content issues
Complete Setup
You should now be able to visit https://monitoring.example.com (Obviously change to your URL), and click register at the bottom of the page to set this initial super user.

Comments