Docker

The Docker image is the recommended way to run Northplane. It includes the web UI, the agent and the Browser SSH module, all prebuilt.

Prerequisites

  • Docker with Docker Compose
  • Headscale and a Northplane config file, as described in Before installing

Installation

Mount the config file and a directory for Northplane's own data, which holds its database and the agent's state:

services:
  headplane:
    image: ghcr.io/tale/headplane:latest
    container_name: headplane
    restart: unless-stopped
    ports:
      - "3000:3000"
    volumes:
      - "./config.yaml:/etc/headplane/config.yaml"
      - "./headplane-data:/var/lib/headplane"

If Headscale runs in Docker too, put both containers on the same network and point headscale.url at the container, for example http://headscale:8080.

Run docker compose up -d, then open http://localhost:3000/admin.

Signing in

Until SSO or proxy authentication is set up, sign in with a Headscale API key, created inside the Headscale container:

docker exec headscale headscale apikeys create --expiration 90d

See API keys for how keys and sessions work.

Health checks

The image has a built-in healthcheck, so docker ps reports whether Northplane is up. It follows Northplane's port and TLS settings, and runs every 30 seconds with a 5 second timeout and 3 retries. To change the timing, override it in the compose file:

services:
  headplane:
    healthcheck:
      interval: 2m

Debugging

The image has no shell. For one, switch to the matching -shell tag, such as ghcr.io/tale/headplane:latest-shell. It's the same build on Alpine, with bash and curl.

Next steps

On this page