checkmate.so hosting (demo + staging)
Config for BlueWave's hosted instances at demo.checkmate.so and
staging.checkmate.so: one host, one nginx gateway terminating TLS, two
independent Checkmate stacks running the mono image
(ghcr.io/bluewave-labs/checkmate), plus a shared
Capture agent. It replaces the old
docker/unified/ setup (nginx client images + separate backend images + a
republished Mongo image) and doubles as a worked example of running the mono
image behind a TLS reverse proxy.
How deploys work
.github/workflows/build-image.yml builds and pushes the image, then SSHes in
and runs docker compose pull <service> && docker compose up -d <service> in
this directory:
- merge to
develop→ image tagged:develop→checkmate-stagingrecreated - merge to
master→ image tagged:master→checkmate-demo(prod) recreated
The host keeps a git checkout of this repo (on develop); the deploy does
git pull first so compose changes land with the code. Note the deploy only
recreates the checkmate service — changes to gateway/nginx.conf or the mongo
services need a manual docker compose up -d / gateway restart on the host.
Host-local files (not committed)
Kept next to this compose file on the host:
server-prod.env/server-staging.env— Checkmate server env (DB_CONNECTION_STRING,JWT_SECRET,CLIENT_HOST=https://demo.checkmate.soetc.). The oldUPTIME_APP_*client vars are no-ops now and can be removed; if a client override is ever needed, use theCLIENT_CONFIG_*vars (see the Configuration section of the root README).mongo-prod.env/mongo-staging.env— Mongo credentials.mongo/data-prod/mongo/data-staging— Mongo data directories.
TLS certs live in /etc/letsencrypt (see certbot-compose.yaml; certbot
answers ACME challenges on port 8080 behind the gateway).
One-time migration from docker/unified
cd ~/checkmate && git pull(must be on a branch containing this directory).- Stop the old stack:
cd docker/unified && docker compose down. - Move host-local files here:
mv docker/unified/{server-prod.env,server-staging.env,mongo-prod.env,mongo-staging.env} docs/hosting/checkmate-so/mv docker/unified/mongo docs/hosting/checkmate-so/mongo - Check the Mongo data version before first start. The old
checkmate:mongo-*images were builtFROM mongo(floating latest), so the data files follow whatever version was current at their last image build. Rundb.adminCommand({ getParameter: 1, featureCompatibilityVersion: 1 })against the old container first and make the compose'smongo:tag match (checked 2026-07-09: both stacks report FCV 8.2, hence themongo:8.2pin here). A lower pin than the data's FCV will refuse to start; a higher one should step up one release at a time. cd docs/hosting/checkmate-so && docker compose up -d.