Docker下中心化部署EasyTier

Docker下中心化部署EasyTier

KaguraiYoRoy
2025-04-15 / 0 评论 / 211 阅读 / 正在检测是否收录...

EasyTier本身是个去中心化的p2p工具,任意节点都可作为转发服务器使用。但是每个节点的配置文件都得手动编写,从tailscale迁移过来时觉得有点不习惯。再加上摸索阶段经常需要修改配置文件的内容,故打算还是中心化部署EasyTier的Dashboard,统一管理设备。

项目仓库:

官方文档并未提供单独部署config-server的方式,但是实际上也不难,服务端已经包含在下载下来的二进制文件中了。本文着重论述通过Docker Compose安装,需要二进制模式安装的可参考下方参考文章。

分析

dashboard的部署主要分为两个部分,一个是后端RESTful API,一个是前端web控制台。其中API的服务端即Release里的easytier-web,直接运行即可运行服务,而web控制台是静态HTML,官方提供了一个网站但是自建api用不了,源码也开源在GitHub仓库下的easytier-web目录下。

开整

部署API

Docker部署,没什么好说的。

需要开放两个端口:

  1. 11211/tcp: API接口,HTTP
  2. 22020/udp: 用于客户端(easytier-core)和服务器通信

目录映射需要映射容器内/app文件夹,用作存储持久化数据。

Compose文件如下:

services:
  easytier:
    restart: always
    hostname: easytier
    volumes:
      - /opt/easytier/api:/app
    ports:
      - "127.0.0.1:11211:11211"
      - "22020:22020/udp"
    environment:
      - TZ=Asia/Shanghai
    image: easytier/easytier:latest 
    entrypoint: easytier-web

此处镜像和官方文档的Docker部署客户端用的是同一个,默认入口点是easytier-core,因此运行webapi需要指定entrypointeasytier-web
因为API接口需要HTTPS,故此处没有直接将11211端口暴露公网,而是暴露到127.0.0.1再使用反向代理实现HTTPS。

设置反向代理

我使用的是1Panel,因此直接在面板中创建一个网站,反向代理到设置的API端口即可。

部署Web控制台

如果直接使用官方的控制台然后填入自建API地址的话实测会有CORS跨域问题,解决后发现注册会过不了验证码,不清楚为什么。查阅issues说用自己的域名部署就不会出这个问题。

正常部署流程

拉取代码仓库,配置nodejs环境,执行下面两个指令编译出html文件:

pnpm -r install
pnpm -r build

再将编译出的文件上传到服务器上。

不正常部署流程

因为懒得配置nodejs环境了我选择直接偷官方的(官方对不起!(红豆泥私密马赛qwq))
在1Panel面板中为网站添加反向代理:
QQ20250415-004902.png
将官方的web控制台反向代理到API站点下的/web/路径。

注册控制台账号

完成部署后打开https://你的域名/web/,将Api Host改为https://你的域名,注意填Api Host的时候URL末尾不要带“/”,否则会出莫名其妙的问题。点击下方Register注册一个账号

1.png

再使用这个账号登录即可进入控制台。

客户端配置

将启动参数全部删除,仅保留--config-server udp://你的ip:22020/你的用户名即可。运行easytier-core,再回到控制台即可看到设备。

2.png

点击右边的设置按钮,点击Create为其创建网络,接下来的步骤就和本地GUI模式操作一样了,这里就不赘述了。保存后在network栏选择新建的网络即可加入。

3.png

因为Docker重启容器内数据会丢失,Docker下部署客户端时需要映射一个文件到容器内/usr/local/bin/et_machine_id用作保存machine id,否则每次重启后都需要重新为其配置网络。同时,给容器设置hostname可以作为设备在web控制台显示的名称。

这里贴一下我的compose:

services:
  easytier:
    command: '--config-server udp://<ip>:22020/KaguraiYoRoy'
    environment:
      - TZ=Asia/Shanghai
    hostname: truenas
    image: easytier/easytier:latest
    labels:
      com.centurylinklabs.watchtower.enable: 'true'
    mem_limit: 0m
    network_mode: host
    privileged: True
    restart: always
    volumes:
      - >-
        /mnt/systemdata/DockerData/easytier/app/et_machine_id:/usr/local/bin/et_machine_id
  watchtower:
    command: '--interval 3600 --cleanup --label-enable'
    environment:
      - TZ=Asia/Shanghai
      - WATCHTOWER_NO_STARTUP_MESSAGE
    image: containrrr/watchtower
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

参考文章:

1

评论 (0)

取消