用 Docker Compose 自建私有 EasyTier 节点(含 Web 前端管理面板)
本文最后更新于5 天前,其中的信息可能已经过时,如有错误请发送邮件到lihenet@foxmail.com

EasyTier 公共节点频繁掉线、高峰期带宽拥塞、数据流经第三方服务器存在隐私风险——这些问题唯一的根治方案,就是拥有一台完全属于自己的 EasyTier 节点。本文将以 Docker Compose 为核心工具,从头演示在 Linux 服务器上部署带 Web 管理后台的私有 EasyTier 节点的完整流程。全程只需复制粘贴命令,无需 Docker 或 Linux 基础。

一、技术栈简介

组件作用
Docker容器化运行时,将服务与环境依赖打包为独立单元,消除”在我机器上能跑”的问题
Docker Compose多容器编排工具,通过 YAML 文件定义服务关系,一条命令完成全部容器的启动与停止
EasyTier去中心化 SD-WAN 组网工具,支持 P2P 打洞与中继转发,使分布在不同网络中的设备互联互通
WatchtowerDocker 镜像自动更新工具,定时拉取最新镜像并重启容器,保持服务版本最新

二、准备工作

2.1 服务器要求

  • 配置:1 核 CPU / 2 GB 内存即可满足基本使用
  • 系统:Ubuntu 20.04 / 22.04Debian 11+
  • 网络:必须具备公网 IPv4 地址(腾讯云轻量、阿里云 ECS 等均可)

2.2 端口放行(重要)

部署前需在云服务器控制台的安全组/防火墙中放行以下端口:

端口协议用途
12121TCPWeb 管理面板(浏览器访问)
21212UDP配置下发服务(设备注册连接用)
11010TCP + UDPEasyTier 节点通信端口(Peer 之间的组网流量)

其中 11010easytier-core 的默认监听端口。如果后续在 Web 面板中修改了监听端口,需同步更新防火墙规则。如果未放行此端口,其他节点将无法与你的服务器建立 P2P 连接或中继连接。

2.3 SSH 客户端

Windows 用户可使用 Termius、FinalShell 或系统自带终端;macOS / Linux 用户直接使用终端即可。

三、第一步:连接服务器

通过 SSH 登录服务器:

ssh root@你的服务器IP

登录后更新系统软件包:

apt update && apt upgrade -y

四、第二步:安装 Docker 与 Docker Compose

4.1 一键安装 Docker

curl -fsSL https://get.docker.com | bash

执行完成后验证:

docker --version

预期输出:Docker version 27.x.x 或更高。

4.2 启动并设为开机自启

systemctl enable docker
systemctl start docker

4.3 验证 Docker Compose

docker compose version

预期输出:Docker Compose version v2.x.x。注意新版本命令为 docker compose(空格),而非旧版的 docker-compose(连字符)。

五、第三步:理解部署架构

本方案共启动三个容器,拓扑关系如下:

┌──────────────────────────────────────────────────┐
│                    你的服务器                       │
│                                                   │
│  ┌────────────┐  ┌────────────┐  ┌────────────┐  │
│  │ easytier-  │  │  easytier  │  │ watchtower │  │
│  │    web     │  │   (core)   │  │            │  │
│  │            │  │            │  │            │  │
│  │ :12121 TCP │  │  虚拟组网   │  │  自动更新   │  │
│  │ Web 管理页 │◄─┤  节点服务   │  │  Docker镜像 │  │
│  │            │  │            │  │            │  │
│  │ :21212 UDP │  │ :11010     │  │            │  │
│  │ 配置下发   │──┤ 对等通信   │  │            │  │
│  └────────────┘  └────────────┘  └────────────┘  │
│       ▲                                           │
│       │ 浏览器访问 http://IP:12121                  │
└───────┼───────────────────────────────────────────┘
        │
   ┌────┴────┐
   │  你的电脑 │
   └─────────┘

容器一:easytier-web

提供 Web 管理后台,核心组件 easytier-web-embed 是一个全栈二进制文件,同时承载三个功能:

功能模块端口说明
Web 前端12121 (TCP)浏览器中的可视化管理界面
API 后端12121 (TCP)账号注册、验证码、数据接口
配置下发服务21212 (UDP)设备注册与配置同步

容器二:easytier

EasyTier 组网核心进程 easytier-core,负责:

  • 通过 /dev/net/tun 创建虚拟网卡,构建二层/三层覆盖网络
  • 执行 P2P NAT 穿透与中继转发
  • 向配置下发服务注册并同步策略

启动参数 --config-server udp://127.0.0.1:21212/admin 中,admin 为 Web 面板中的注册用户名,需保持一致。

容器三:watchtower

可选的辅助容器。每隔 3600 秒检查一次镜像更新,自动拉取新版本并清理旧镜像。如不需要可删除此段配置。

六、第四步:编写 docker-compose.yml

6.1 创建项目目录

mkdir -p /root/ET
cd /root/ET

6.2 创建配置文件

nano docker-compose.yml

将以下完整内容粘贴进去(nano 编辑器:粘贴后按 Ctrl+O → 回车保存 → Ctrl+X 退出):

version: '3.8'

services:
  # ==========================================
  # 容器 1:EasyTier Web 管理后台
  # 提供可视化管理界面 + API + 配置下发
  # ==========================================
  easytier-web:
    image: easytier/easytier:latest
    container_name: easytier-web
    restart: always
    network_mode: host
    labels:
      com.centurylinklabs.watchtower.enable: 'true'
    entrypoint: easytier-web-embed
    command:
      - "-a"
      - "12121"      # Web 前端与 API 后端共用端口
      - "-l"
      - "12121"      # API 监听端口
      - "-c"
      - "21212"      # 配置下发端口 (UDP)

  # ==========================================
  # 容器 2:Watchtower 自动更新(可选)
  # 如不需要,删除整个 watchtower 段落
  # ==========================================
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    environment:
      - TZ=Asia/Shanghai
      - WATCHTOWER_NO_STARTUP_MESSAGE
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    command: --interval 3600 --cleanup --label-enable

  # ==========================================
  # 容器 3:EasyTier 组网核心
  # 创建虚拟网络,提供 P2P 与中继服务
  # ==========================================
  easytier:
    image: easytier/easytier:latest
    # 国内网络慢可换 DaoCloud 镜像:
    # image: m.daocloud.io/docker.io/easytier/easytier:latest
    hostname: "tencent-vm"
    container_name: easytier
    labels:
      com.centurylinklabs.watchtower.enable: 'true'
    restart: unless-stopped
    network_mode: host
    cap_add:
      - NET_ADMIN
      - NET_RAW
    environment:
      - TZ=Asia/Shanghai
    devices:
      - /dev/net/tun:/dev/net/tun
    volumes:
      - /etc/easytier:/root
      - /etc/machine-id:/etc/machine-id:ro
    command: --config-server udp://127.0.0.1:21212/admin
    #                                ↑               ↑
    #                          本机:配置端口    你的 Web 用户名

6.3 关键配置说明

  • network_mode: host —— 容器直接使用宿主机网络栈,避免 Docker NAT 导致的二次地址转换问题。EasyTier 涉及大量 P2P 与 UDP 通信,host 模式是最优选择。此模式下 ports 映射无效。
  • cap_add: NET_ADMIN + NET_RAW —— NET_ADMIN 授予容器管理网络接口的权限(创建 TUN 虚拟网卡所需);NET_RAW 允许原始套接字操作(P2P NAT 穿透所需)。
  • /dev/net/tun —— Linux 内核 TUN/TAP 虚拟网络设备。EasyTier 通过此设备创建虚拟网卡,实现跨网络的二层互联。此项为必需配置,移除将导致容器无法启动。
  • command: --config-server udp://127.0.0.1:21212/admin —— easytier-core 的启动参数。末尾的 admin 必须与 Web 面板中注册的用户名一致,否则设备无法正确关联。
  • 节点通信端口 —— easytier-core 默认监听 11010 端口(TCP + UDP)用于 Peer 间通信。部署后务必在云服务器安全组中放行此端口,否则其他节点无法连接。

七、第五步:启动服务

cd /root/ET
docker compose up -d

首次执行将从 Docker Hub 拉取镜像,耗时取决于网络状况。预期输出:

[+] Running 3/3
 ✔ Container easytier-web   Started
 ✔ Container watchtower     Started
 ✔ Container easytier       Started

验证容器运行状态:

docker ps

若某容器 STATUS 显示 RestartingExited,使用以下命令查看日志定位问题:

docker logs easytier        # 组网核心日志
docker logs easytier-web    # Web 后台日志

八、第六步:访问 Web 管理面板

浏览器打开:

http://你的服务器IP:12121

首次部署后系统会自动创建一个默认管理员账户(用户名 admin,密码 admin)。登录后请立即修改密码。

如需创建新账户,点击 Register 注册。用户名需与 compose 文件中 command 末尾的用户名保持一致。若验证码无法加载,请检查 compose 中 -l 参数配置,并确保通过公网 IP 或域名(而非 127.0.0.1)访问面板。

九、日常维护

9.1 查看运行状态

docker ps                    # 查看容器运行状态
docker logs easytier         # 查看组网核心日志
docker logs easytier-web     # 查看 Web 后台日志
docker logs -f easytier      # 实时跟踪日志(Ctrl+C 退出)

9.2 重启服务

cd /root/ET
docker compose restart       # 重启全部容器
docker restart easytier      # 仅重启组网核心

9.3 停止服务

cd /root/ET
docker compose down          # 停止并移除全部容器(持久化配置不受影响)

9.4 手动升级

cd /root/ET
docker compose pull          # 拉取最新镜像
docker compose up -d         # 以新镜像重启

9.5 端口维护提醒

日常使用中需确保以下端口在云服务器安全组中保持放行状态:

  • 12121 (TCP) — Web 管理面板
  • 21212 (UDP) — 配置下发服务
  • 11010 (TCP+UDP) — 节点通信端口(默认值,如 Web 面板中修改了监听端口则需同步更新防火墙)

十、常见问题

Q1:注册时验证码无法加载

确认 compose 中 -l 参数正确,且使用公网 IP(非 127.0.0.1)访问 Web 面板。如仍无法加载,在浏览器中手动设置 API 地址为 http://公网IP:12121

Q2:easytier 容器反复重启,日志显示 connection refused

按以下步骤排查:

# 1. 确认 easytier-web 容器在运行
docker ps | grep easytier-web

# 2. 确认 21212 UDP 端口处于监听状态
ss -tuln | grep 21212

# 3. 确认 compose 中的用户名与 Web 注册的一致
docker inspect easytier | grep config-server

Q3:设备无法连接自建节点

逐一排查:① 安全组是否放行 21212 UDP 和 11010 TCP+UDP;② 连接命令中的用户名与密码是否与 Web 面板注册的一致;③ 连接协议为 udp://,非 tcp://

Q4:国内服务器拉取镜像缓慢或超时

将两处 image: easytier/easytier:latest 替换为 DaoCloud 国内镜像源:

image: m.daocloud.io/docker.io/easytier/easytier:latest

Q5:不需要自动更新,如何移除 Watchtower

删除 compose 中 watchtower: 整段内容,同时删除 easytier-webeasytier 容器中的 labels 配置项。

十一、结语

至此,你已拥有一个完全自主可控的 EasyTier 私有节点。回顾整个部署流程:

  1. 安装 Docker 运行环境
  2. 编写 docker-compose.yml
  3. 一条命令启动全部服务
  4. 通过 Web 面板管理设备与策略

私有节点意味着带宽独占、延迟可控、数据路径透明。无需依赖公共基础设施的可用性,所有流量经过你自己的服务器。

如部署中遇到本文未覆盖的问题,欢迎在评论区留言交流,或前往 EasyTier GitHub 提交 Issue。
QQ群技术交流:1017257623

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇