Adding a new service
Follow these steps to add a new service to the ScaleTail collection:Copy the service template
Copy
templates/service-template into services/<service-name> and rename the compose and README files accordingly.Update compose.yaml
Make the following changes to your
compose.yaml:- Keep the Tailscale container named
tailscale-<service>and the app container namedapp-<service> - Set
IMAGE_URL,SERVICEPORT, and any other app variables in.env; do not commit secrets or real auth keys - Leave
network_mode: service:tailscalein place and keepdepends_onusing the Tailscale health check - Keep the
portssection commented unless LAN exposure is required; explain why in the README if you expose anything - Adjust volumes to match the service, and pre-create bind-mount paths so Docker does not create root-owned folders (optional)
- If the service needs devices (GPU, render, fuse, etc.) or extra capabilities, add them explicitly and mention them in the README (optional)
Configure the proxy port
Update
"Proxy":"http://127.0.0.1:80" in compose.yaml with the app’s actual internal port.Remove TS_SERVE_CONFIG if Serve/Funnel is not needed.Fill in the service README
Use the template to document:
- Briefly describe the app and why Tailscale helps
- List prerequisites (user in
dockergroup, GPU/group membership, devices) - Call out gotchas: initial admin setup, default credentials, path expectations, required group IDs, or config directory names that must change
- Clarify MagicDNS/HTTPS steps (
TS_ACCEPT_DNS), optional 0.0.0.0 port exposure, and any health checks - Link to upstream service docs and any official setup videos
Updating an existing service
When updating existing services:- Keep the sidecar pattern intact (
network_mode: service:tailscale, health checks,depends_on) - Avoid removing existing volumes or changing container names unless the change is clearly documented in the README