인터페이스는 현지화되어 있으며, Skill 소개와 설명 문서는 선택한 언어로 AI가 자동 번역합니다. 코드·명령어·경로·전문 용어는 원문을 유지하며 원작자 문서가 우선합니다.
Skills 둘러보기
배포 및 운영 · SKILL.md

headscale-deploy

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.

Independent GitHub snapshot · Automated classification · Original documentation governs

Skill 문서

GitHub

name: headscale-deploy description: 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. license: MIT compatibility: linux, docker metadata: tags: headscale, tailscale, wireguard, vpn, deployment, devops spec-version: '1.0'

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"

When not to use

Do not use this skill for client-side setup (load tailscale-client instead), for ACL/policy authoring (load tailnet-policy), or for day-to-day management of an already-running server. It covers initial deployment and server configuration only.

저장한 Skills