agentsclimarketplace

Headscale deploy

Skill magnus919/agent-skills/bundles/tailscale/skills/headscale-deploy

Deploy, configure, and maintain a self-hosted Headscale control server on Linux or Docker. Use when setting up a new Headscale instance, troubleshooting deployment issues, or configuring server settings.From its SKILL.md

Install
npx -y skills add magnus919/agent-skills --skill headscale-deploy

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 21 stars21 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

What its file declares

Copied from the file, not written here

The file declares its own license as MIT. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.

SKILL.md

4.6 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it

headscale-deploy

Overview

Headscale is an open-source, self-hosted implementation of the Tailscale control server. It allows you to run your own coordination plane for WireGuard-based mesh networking, giving you full control over your tailnet without relying on Tailscale's SaaS infrastructure. The Tailscale client connects to Headscale transparently — no client modifications needed.

Use this skill to deploy Headscale from scratch, configure server settings, manage DERP relay infrastructure, and diagnose deployment issues.

Prerequisites

  • Linux server (x86_64 or aarch64) or Docker host with compose support
  • DNS record pointing to the server (A/AAAA record for server_url)
  • Ports 80/443 accessible from the internet (or your tailnet's ingress point)
  • Port 3478/udp for STUN (optional, needed for NAT traversal)
  • Root or sudo access on the target machine

Deployment Methods

Docker Compose (Recommended)

The fastest and most maintainable approach. Use install-headscale.sh with --docker flag to generate a compose file and systemd drop-in, or create manually:

version: "3.9"
services:
  headscale:
    image: headscale/headscale:latest
    container_name: headscale
    restart: unless-stopped
    ports:
      - "8080:8080"
      - "3478:3478/udp"
    volumes:
      - ./data:/var/lib/headscale
      - ./config:/etc/headscale
    command: headscale serve

Binary Install

Direct binary installation on the host for lightweight or container-free environments. The install-headscale.sh script handles:

  1. Detecting platform (linux/amd64, linux/arm64)
  2. Downloading the release tarball from GitHub
  3. Installing the binary to /usr/local/bin
  4. Creating the headscale system user
  5. Writing a systemd unit file
  6. Creating default config at /etc/headscale/config.yaml

Configuration

Key config.yaml options:

OptionDescriptionExample
server_urlPublic URL of your Headscale instancehttps://headscale.example.com:443
listen_addrLocal bind address0.0.0.0:8080
metrics_listen_addrPrometheus metrics endpoint127.0.0.1:9090
dns_config.base_domainMagicDNS domain suffixexample.com
dns_config.magic_dnsEnable MagicDNStrue
derp.server.enabledEnable embedded DERP relayfalse
derp.server.region_idNumeric region ID999
derp.server.region_nameHuman-readable region name"my-headscale"
derp.urlsExternal DERP map URLs[]
db_typeDatabase backend: sqlite3 or postgressqlite3
tls_letsencrypt_hostnameAuto TLS via Let's Encrypt""
tls_cert_path / tls_key_pathManual TLS cert paths""

Verification

After deployment, verify the instance is healthy:

# Quick health check
curl -s https://headscale.example.com/health

# Comprehensive diagnostics
headscale-health-check.sh --json

# Check registered nodes
headscale nodes list

# Verify API access
headscale apikeys list

Gotchas

  • SQLite vs PostgreSQL: SQLite is fine for small tailnets (<100 nodes). For larger deployments or high-availability, use PostgreSQL. Plan your choice upfront — migration is non-trivial.
  • TLS certificate management: Let's Encrypt auto-provisioning is convenient but requires port 80 to be accessible for the HTTP-01 challenge. Use a reverse proxy (Caddy, Nginx, Traefik) for more flexibility.
  • Port conflicts: If port 8080 or 3478 is already in use, change listen_addr in config. Ensure no other service binds port 3478/udp for STUN.
  • DERP configuration: The embedded DERP relay works for small deployments. For production, set up dedicated DERP nodes to avoid single-region bottlenecks.
  • Configuration reload: Headscale does not hot-reload config. Restart the service after config changes: systemctl restart headscale or docker compose restart.
  • Database backups: Always back up /var/lib/headscale/db.sqlite3 (or your PostgreSQL DB) regularly.

Trigger Conditions

Use this skill when the user says any of:

  • "deploy headscale"
  • "install headscale"
  • "setup headscale server"
  • "headscale config"
  • "headscale configuration"
  • "headscale deployment"
  • "headscale health"
  • "headscale derp"
  • "self-hosted tailscale"
  • "tailscale control server"

What ships with it: 4 files

26.3 KB alongside SKILL.md, 3 of them executable

Keep looking

Skills are one crate of 326,614. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.