Headscale-Server in 5 Minuten mit docker-compose einrichten

English Deutsch

Dieses Headscale-Setup verwendet sqlite – mit einem deutlich geringeren Speicher- & CPU-Fußabdruck als PostgreSQL für einfache Anwendungsfälle. Ich empfehle dies für fast jede Installation: Headscale muss nicht so viele Anfragen verwalten und die Verwendung von sqlite3 ist für alle bis auf die anspruchsvollsten Setups ausreichend.

Zuerst das Verzeichnis erstellen, in dem Headscale und alle Daten liegen sollen (in diesem Beispiel verwenden wir /opt/headscale).

headscale_init_dirs.sh
sudo mkdir -p /opt/headscale

Nun das folgende Skript in /opt/headscale ausführen, um die Dateien und Verzeichnisse zu initialisieren, die Headscale benötigt:

headscale_init_files.sh
mkdir -p ./config
touch ./config/db.sqlite
curl https://raw.githubusercontent.com/juanfont/headscale/main/config-example.yaml -o ./config/config.yaml

docker-compose-Konfiguration

Hinweis: Es gibt eine alternative docker-compose-Konfiguration für die Verwendung mit Traefik als Reverse-Proxy, siehe Headscale docker-compose-Konfiguration für Traefik HTTPS-Reverse-Proxy

Nun ist es Zeit, /opt/headscale/docker-compose.yml zu erstellen:

docker_compose_headscale.yml
services:
  headscale:
    image: headscale/headscale:latest
    volumes:
      - ./config:/etc/headscale/
      - ./data:/var/lib/headscale
    ports:
      - 27896:8080
    command: headscale serve
    restart: unless-stopped

Dies konfiguriert Headscale so, dass sein HTTP-Server auf Port 27896 läuft. Dieser Port kann per Reverse-Proxy auf die Domain der Wahl weitergeleitet werden.

Konfiguration

Nun sollte der Servername in config/config.yaml bearbeitet werden:

headscale_config.yaml
server_url: https://headscale.mydomain.com

Beachten, dass tailscale nach jeder Änderung neu gestartet werden muss

Als Nächstes siehe Namespace auf Headscale-Server erstellen für Details zum Erstellen eines Namespace. Sobald ein Namespace erstellt wurde (vergleichbar mit einem Konto beim kommerziellen Tailscale-Dienst), können Clients verbunden werden (die Client-Software heißt tailscale), siehe z.B. Tailscale mit Headscale-Server auf Linux verbinden

Autostart

Mit der in unserem vorherigen Beitrag Systemd-Service für ein docker-compose-Projekt in 10 Sekunden erstellen beschriebenen Methode richten wir nun den Autostart beim Booten für Headscale mit systemd ein. Dieser Befehl startet es auch sofort:

create_docker_compose_service.sh
curl -fsSL https://techoverflow.net/scripts/create-docker-compose-service.sh | sudo bash /dev/stdin

Logs ansehen

Diesen Befehl verwenden, um die Logs anzuzeigen und zu verfolgen:

docker_compose_logs.sh
docker-compose logs -f

Beispielausgabe:

headscale_docker_compose_logs.txt
headscale_1  | [GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
headscale_1  |
headscale_1  | [GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
headscale_1  |  - using env:    export GIN_MODE=release
headscale_1  |  - using code:   gin.SetMode(gin.ReleaseMode)
headscale_1  |
headscale_1  | [GIN-debug] GET    /metrics                  --> github.com/zsais/go-gin-prometheus.prometheusHandler.func1 (4 handlers)
headscale_1  | [GIN-debug] GET    /health                   --> github.com/juanfont/headscale.(*Headscale).Serve.func2 (4 handlers)
headscale_1  | [GIN-debug] GET    /key                      --> github.com/juanfont/headscale.(*Headscale).KeyHandler-fm (4 handlers)
headscale_1  | [GIN-debug] [GIN-debug] GET    /register                 --> github.com/juanfont/headscale.(*Headscale).RegisterWebAPI-fm (4 handlers)
headscale_1  | [GIN-debug] POST   /machine/:id/map          --> github.com/juanfont/headscale.(*Headscale).PollNetMapHandler-fm (5 handlers)
headscale_1  | [GIN-debug] POST   /machine/:id              --> github.com/juanfont/headscale.(*Headscale).RegistrationHandler-fm (5 handlers)
headscale_1  | [GIN-debug] GET    /oidc/register/:mkey      --> github.com/juanfont/headscale.(*Headscale).RegisterOIDC-fm (5 handlers)
headscale_1  | [GIN-debug] GET    /oidc/callback            --> github.com/juanfont/headscale.(*Headscale).OIDCCallback-fm (5 handlers)
headscale_1  | [GIN-debug] GET    /apple                    --> github.com/juanfont/headscale.SwaggerUI (4 handlers)
headscale_1  | [GIN-debug] GET    /apple/:platform          --> github.com/juanfont/headscale.(*Headscale).AppleMobileConfig-fm (4 handlers)
headscale_1  | [GIN-debug] GET    /swagger                  --> github.com/juanfont/headscale.SwaggerUI (4 handlers)
headscale_1  | [GIN-debug] GET    /swagger/v1/openapiv2.json --> github.com/juanfont/headscale.SwaggerAPIv1 (4 handlers)
headscale_1  | [GIN-debug] GET    /api/v1/*any              --> github.com/gin-gonic/gin.WrapF.func1 (5 handlers)
headscale_1  | [GIN-debug] POST   /api/v1/*any              --> github.com/gin-gonic/gin.WrapF.func1 (5 handlers)
headscale_1  | [GIN-debug] PUT    /api/v1/*any              --> github.com/gin-gonic/gin.WrapF.func1 (5 handlers)
headscale_1  | [GIN-debug] PATCH  /api/v1/*any              --> github.com/gin-gonic/gin.WrapF.func1 (5 handlers)
headscale_1  | [GIN-debug] HEAD   /api/v1/*any              --> github.com/gin-gonic/gin.WrapF.func1 (5 handlers)
headscale_1  | [GIN-debug] OPTIONS /api/v1/*any              --> github.com/gin-gonic/gin.WrapF.func1 (5 handlers)
headscale_1  | [GIN-debug] DELETE /api/v1/*any              --> github.com/gin-gonic/gin.WrapF.func1 (5 handlers)
headscale_1  | [GIN-debug] CONNECT /api/v1/*any              --> github.com/gin-gonic/gin.WrapF.func1 (5 handlers)
headscale_1  | [GIN-debug] TRACE  /api/v1/*any              --> github.com/gin-gonic/gin.WrapF.func1 (5 handlers)
headscale_1  | 2022-01-16T19:04:04Z WRN Listening without TLS but ServerURL does not start with http://
headscale_1  | 2022-01-16T19:04:04Z INF listening and serving (multiplexed HTTP and gRPC) on: 0.0.0.0:8080
headscale_1  | 2022-01-16T19:04:04Z INF Setting up a DERPMap update worker frequency=86400000
headscale_1  | 2022-01-16T19:04:04Z INF listening and serving (multiplexed HTTP and gRPC) on: 0.0.0.0:8080
headscale_1  | 2022-01-16T19:04:04Z INF Setting up a DERPMap update worker frequency=86400000

Check out similar posts by category: Headscale, Networking, VPN, Wireguard