再进行一次Headscale的Docker部署
前言
最近又被群友提起,要组个虚拟局域网,
欸恰好,我手头有个多的广州大宽带云服务器:)
于是兜兜转转又拾起了在古早博客里面写的Headscale(下文可能称HS)组网文章,然后再做点修缮
也是在看Headscale文档的时候发现了一个新的UI: Headplane, 有一种别样的原版的风格,很讨我喜欢)
TIPS: 不用管为什么右上角加载不出来头像, 这个得问微软/作者
任务前置
首先, 本文默认你有
一定的Linux命令行操作知识
一台服务器和域名(大陆内服务器需完成备案,需要有SSL证书) (又Tips: SSL证书这个HS客户端其实提供了acme来自动申请le证书,但是我懒得折腾,直接部署了我自己的SSL)
会配置反向代理(比如Nginx,图省事的用面板)
已经安装Docker和Docker Compose
什么? 这些都不会? 那就装1Panel去, 图形化操作也不会那就没救了
以下则为要做的炒鸡简单的架构示意
配置OIDC服务
这一步我会很快带过,因为每一个OIDC服务商的配置不一样,我这里只展示Azure Entra ID的
首先到portal.azure.com , 登录你的租户(没有的自己注册去)
在Entra ID中选择应用注册,然后创建一个新应用
(一个重定向URI是不够的)
创建完成之后再增加一个
并创建一个应用机密(客户端密码),时间你自己选,然后复制值保留备用(只能查看一次)
下一步拉配置文件
由于本文中使用了两个组件,分别为Headscale本体还有Headplane,且他们配置文件都是config.yaml
,所以配置前请先仔细看有没有弄错文件(
Headscale配置文件
本文将使用v0.26.0作为教学,那么根据官方文档,首先要把示例配置文件拉下来
配置文件地址为: https://github.com/juanfont/headscale/blob/v0.26.0/config-example.yaml
如果你连GitHub打不开那也烷基八氮咯
接下来要进行逐个修改
将server_url修改为https://yourdomain.com:443
listen_addr为0.0.0.0:8080
prefix处你喜欢改就改
derp项将其开启(如果你有其他小鸡在作为derp也可以不开启)
region_code和region_name这个自己喜欢改就改,改了之后会是这样显示的
urls项默认为官方derp服务, 如果你怕奇奇怪怪的绕路,那么可以删掉变成这样
urls: []
往下滑,policy项的mode设置为database,否则面板不能修改ACL
接下来是重头戏,oidc配置
在配置文件327行处可以看到有被注释掉的oidc配置,嫌找的慢的可以直接复制下面代码
oidc:
issuer: "https://login.microsoftonline.com/<你的租户ID>/v2.0"
client_id: "<客户端ID>"
client_secret: "<客户端密钥>"
scope: ["openid", "profile", "email"]
extra_params:
# 让登录时提示选择用户
prompt: select_account
把该填的填完然后扔回配置文件里即可
Headplane配置文件
该作者也是学习到了hs的精髓,依旧手拉配置文件
下载 https://github.com/tale/headplane/blob/main/config.example.yaml
然后进行修改
cookie_secret改为一个32字符的任何文本
url: 改成 https://yourdomain.com
docker: enabled: 改为true
往下滑来到OIDC一栏,同上面hs的配置文件一样填写即可,记得把下面redirect_url改成https://yourdomain.com/admin/oidc/callback
这样hp的配置文件也搞定了:)
配置反代
默认你们会配置反代了
相当于把/反代到8080(即hs的端口),把/admin反代到3000(即hp的端口)
我是直接用的1p面板生成的openresty配置文件),实在懒得写了,大伙图个乐呵
务必配置SSL
部署容器
在上面步骤完成之后这一步已经相当简单了
找一个地方创建文件夹,然后写个docker compose文件
#改自Headplane文档
services:
headplane:
image: ghcr.io/tale/headplane:0.6.0
container_name: headplane
restart: unless-stopped
ports:
- '3000:3000'
volumes:
- './headplane-config/:/etc/headplane/'
# 这里出现的headscale是因为hp会修改hs的配置文件来实现在面板中修改配置
- './headscale-config/:/etc/headscale/'
- './headplane-data:/var/lib/headplane'
- '/var/run/docker.sock:/var/run/docker.sock:ro'
headscale:
image: headscale/headscale:0.26.0
container_name: headscale
restart: unless-stopped
command: serve
labels:
# 这一个同hp配置的docker那里一样
me.tale.headplane.target: headscale
ports:
- '8080:8080'
# udp是给STUN用的
- '3478:3478/udp'
volumes:
- './headscale-data:/var/lib/headscale'
- './headscale-config:/etc/headscale'
然后依次将你的两个配置文件分别放到headscale-config文件夹和headplane-config文件夹(没有你就不会创建吗)中
然后docker compose up,那么一切就将正常运行
如果你发现容器在卡重启,那我建议仔细看看日志输出
再配置一下Headplane配置文件
还记得配置文件里跳过的一些东西吗?
现在你的容器已经创建好了,执行以下命令:
docker exec headscale headscale apikeys create --expiration 999d
如果跑不起来那就自己修
得到的APIKey将他填入headscale_api_key:一栏中
开始使用
在一切大(问)功(题)告(频)成(出)之后,现在你理应可以打开https://yourdomain.com/admin页面了
我建议你现在就用SSO登录, 因为第一个使用SSO进行登录的会获得后台面板权限,后面在想进admin面板的就只能添加permitted user了
至于后面的操作,那就是你该探索的东西了:)