Headscale docker-compose-Konfiguration mit PostgreSQL
Diese Konfiguration ist für größere Installationen gedacht als unsere SQLite-basierte Standardkonfiguration. Sie lässt sich etwas leichter korrekt sichern und ist bei größeren Arbeitslasten schneller. Allerdings verbraucht sie mehr RAM, insbesondere bei Installationen mit geringer Arbeitslast, und du hast zwei Docker-Container, die du bei Wartungsarbeiten berücksichtigen musst (obwohl sie über eine einzige docker-compose-Instanz verwaltet werden). Ich empfehle nicht, einen gemeinsamen Postgres-Server zu verwenden, obwohl dies durchaus möglich ist.
Erstelle zuerst ein zufälliges Passwort mit
echo POSTGRES_PASSWORD=$(pwgen 30 1) > .envDie docker-compose.yml sieht so aus:
services:
headscale:
image: headscale/headscale:latest
volumes:
- ./config:/etc/headscale/
- ./data:/var/lib/headscale
ports:
- 27896:8080
command: serve
restart: unless-stopped
depends_on:
- postgres
postgres:
image: postgres
restart: unless-stopped
volumes:
- ./pg_data:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- POSTGRES_DB=headscale
- POSTGRES_USER=headscaleNun erstellen wir die Standard-Headscale-Konfiguration:
mkdir -p ./config
curl https://raw.githubusercontent.com/juanfont/headscale/main/config-example.yaml -o ./config/config.yamlIn config/config.yaml müssen wir diese Änderungen vornehmen:
Server-URL setzen:
server_url: https://headscale.mydomain.comKommentiere die SQLite-Datenbank aus (füge # am Anfang jeder Zeile hinzu):
# SQLite config
# db_type: sqlite3
# db_path: /var/lib/headscale/db.sqliteUnd kommentiere Postgres ein und konfiguriere es:
# Postgres config
db_type: postgres
db_host: postgres
db_port: 5432
db_name: headscale
db_user: headscale
db_pass: ohngooFaciice2hooGoo1Ahvif3ahlStelle sicher, dass all diese auskommentiert sind und du das Passwort aus .env kopierst. Es ist extrem wichtig, dass du hier ein einzigartiges Passwort verwendest, um Angriffe von unprivilegierten Host-Prozessen auf die Docker-Container zu verhindern.
Meine Empfehlung ist, Headscale über traefik oder nginx als Reverse Proxy zu betreiben, anstatt die eingebaute Let’s Encrypt / ACME-Unterstützung zu verwenden. Dies ermöglicht nicht nur die gemeinsame Nutzung von Port & IP-Adresse mit anderen Diensten, sondern Standard-Dienste wie Traefik und/oder nginx sind auch wesentlich besser im Hinblick auf die Exposition gegenüber dem Internet getestet und bieten daher einen potenziellen Sicherheitsvorteil. Außerdem erleichtern sie die serviceunabhängige Verwaltung von Zertifikaten und bieten eine zusätzliche Ebene für Debugging usw.
Du kannst auch benutzerdefinierte IP-Adressbereiche konfigurieren:
ip_prefixes:
- fd5d:7b60:4742::/48
- 100.64.0.0/10aber dies ist optional.
Weitere Informationen zum Autostart etc. findest du unter How to setup headscale server in 5 minutes using docker-compose