Production

Two ways to deploy.

Use a Compose file, and Compose pulls the images for you. Or copy a published image path and docker pull it yourself. pnpm deploy:stack and pnpm deploy:standalone still build from a git checkout and ignore OTTERSCALE_IMAGE_TAG.

Option 1

Compose file

Download the file and its env example. Save the example as .env and set OTTERSCALE_IMAGE_TAG. docker compose -f that file --env-file .env up -d pulls the GHCR images and starts them. Stack is four containers on a VM. Standalone is one container.

Stack

Headscale, core, the console, and edge. For a VM with Docker Compose.

otterscale-stack.yaml
otterscale-stack.env.example

Standalone

One container. For a VM, or a platform that runs a single image.

otterscale-standalone.yaml
otterscale-standalone.env.example

Option 2

Pull an image

Copy an image path and run docker pull, or paste that path into a host that does not run Compose. You do not need the Compose file for this. The latest tag is the current publish.

No published docker images.

Where it runs

Pick a provider

The image list above is the tag. On a VM, use Standalone (one container) or Stack (multiple containers). Other hosts run the standalone image. tailscale up needs raw TCP to port 18080 when an HTTPS proxy sits in front of Headscale.