使用 PostgreSQL 的 Headscale docker-compose 配置
此配置适用于比我们基于 sqlite 的标准配置更大的安装。它往往更容易正确备份,对于更大的工作负载会更快。但是,它会消耗更多 RAM,特别是对于低工作负载安装,并且你在维护期间需要担心两个 docker 容器(尽管它们使用单个 docker-compose 实例管理)。我不建议使用共享的 postgres 服务器,尽管这当然是可能的。
首先,使用以下命令创建随机密码
headscale_generate_env.sh
echo POSTGRES_PASSWORD=$(pwgen 30 1) > .envdocker-compose.yml 看起来像这样:
docker-compose.yml
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=headscale现在我们创建默认的 headscale 配置:
headscale_fetch_config.sh
mkdir -p ./config
curl https://raw.githubusercontent.com/juanfont/headscale/main/config-example.yaml -o ./config/config.yaml在 config/config.yaml 中我们需要做这些更改:
设置服务器 URL:
headscale_server_url_snippet.sh
server_url: https://headscale.mydomain.com注释掉 sqlite 数据库(在每行前面添加 #):
headscale_disable_sqlite_snippet.sh
# SQLite config
# db_type: sqlite3
# db_path: /var/lib/headscale/db.sqlite并取消注释并配置 postgres:
headscale_postgres_config.yml
# Postgres config
db_type: postgres
db_host: postgres
db_port: 5432
db_name: headscale
db_user: headscale
db_pass: ohngooFaciice2hooGoo1Ahvif3ahl确保所有这些都已取消注释,并且你从 .env 复制密码。在此处使用唯一密码非常重要,以防止来自非特权主机进程的攻击到 docker 容器。
我的建议是使用 traefik 或 nginx 反向代理 headscale,而不是使用内置的 Let’s Encrypt / ACME 支持。这不仅允许与其他服务共享端口和 IP 地址,像 Traefik 和/或 nginx 这样的标准服务在暴露于互联网方面经过了更充分的测试,因此提供潜在的安全优势。此外,它们使以服务无关的方式管理证书变得更容易,并提供额外的调试等层。
你还可以配置自定义 IP 地址范围:
headscale_ip_prefixes.yml
ip_prefixes:
- fd5d:7b60:4742::/48
- 100.64.0.0/10但这是可选的。
有关自动启动等的更多信息,请参阅如何使用 docker-compose 在 5 分钟内设置 headscale 服务器
Check out similar posts by category:
Headscale, Networking, VPN
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow