Go service layout
limedb, chess and the other deployable Go services all follow the same
shape. Copy it when starting a new one.
docker-compose.yml prod — what deploy.sh runsdocker-compose.dev.yml dev — hot reload, source mountedDockerfile / .dev one eachMakefile dev / dev-bg / dev-logs / dev-down / prod / prod-downcmd/ internal/ web/ go layoutWhy two compose files
Section titled “Why two compose files”deploy.sh on the server only ever runs plain docker compose up against
docker-compose.yml. Dev concerns — bind mounts, hot reload, exposed ports —
stay in .dev.yml so they can’t leak into prod by accident.
limedb splits a third, docker-compose.dev.ports.yml, for when you want the
cluster’s ports on the host.
limedb emits structured JSON and pipes through
humanlog to read it:
make install-tools # go install humanlogmake dev # up --build, piped through humanlogmake dev-logs # tail an already-running clusterProd labels
Section titled “Prod labels”Anything that should get a subdomain joins the caddy network and carries
caddy: http://<name>.namanvashistha.com + caddy.reverse_proxy: "{{upstreams PORT}}".
See the deploy script.