Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Services

Services are grouped by machine in the services manifest. Machines with Tailscale enabled automatically expose their hostname for reachability checks via atelier.machine.tailscaleHost.

Machines

MachinePlatformTailscale
terebithiaOracle Cloud aarch64terebithia
moonlark
prattle

terebithia

All services run behind Caddy with Cloudflare DNS TLS.

mkService-based

ServiceDomainPortRuntimeDescription
cachetcachet.dunkirk.sh3000bunSlack emoji/profile cache
hn-alertshn.dunkirk.sh3001bunHacker News monitoring
indikoindiko.dunkirk.sh3003bunIndieAuth/OAuth2 server
l4l4.dunkirk.sh3004bunImage CDN — Slack image optimizer
canvas-mcpcanvas.dunkirk.sh3006bunCanvas MCP server
controlcontrol.dunkirk.sh3010bunAdmin dashboard for Caddy toggles
traversetraverse.dunkirk.sh4173bunCode walkthrough diagram server
cedarlogiccedarlogic.dunkirk.sh3100customCircuit simulator

Multi-instance

ServiceDomainPortDescription
emojibot-hackclubhc.emojibot.dunkirk.sh3002Emojibot for Hack Club
emojibot-df1317df.emojibot.dunkirk.sh3005Emojibot for df1317

Custom / external

ServiceDomainDescription
bore (frps)bore.dunkirk.shHTTP/TCP/UDP tunnel proxy
heraldherald.dunkirk.shGit SSH hosting + email
knotknot.dunkirk.shTangled git hosting
spindlespindle.dunkirk.shTangled CI
n8nn8n.dunkirk.shWorkflow automation

Services manifest

The manifest is now grouped by machine. Evaluate with:

nix eval --json .#services-manifest

Output shape:

{
  "terebithia": {
    "hostname": "terebithia",
    "tailscale_host": "terebithia",
    "services": [{ "name": "cachet", "health_url": "https://cachet.dunkirk.sh/health", ... }]
  }
}

Architecture

Each mkService module provides:

  • Systemd service — initial git clone for scaffolding, subsequent deploys via GitHub Actions
  • Caddy reverse proxy — TLS via Cloudflare DNS challenge, optional rate limiting
  • Data declarationssqlite, postgres, files feed into automatic backups
  • Dedicated user — sudo for restart/stop/start, per-user Tailscale SSH ACLs
  • Port conflict detection — assertions prevent two services binding the same port