Docker 部署 wg-easy 教程:一键搭建 WireGuard VPN 服务器

如果你希望在 VPS 或 Linux 服务器上快速搭建一套稳定、安全、易管理的 WireGuard VPN,那么 wg-easy 是一个非常适合的选择。它将复杂的 WireGuard 配置封装成一个网页管理界面,支持新建客户端、下载配置、扫码导入和连接状态查看,适合个人使用、家庭网络、远程办公和开发环境。

本文将从零开始,详细介绍如何用 Docker 部署 wg-easy,完成服务器启动、端口开放、Web 管理界面登录以及客户端接入配置。

1. 什么是 wg-easy?

wg-easy 是一款基于 WireGuard 的 Web 管理工具,目标是让复杂的 VPN 部署变得更简单。它的主要特点包括:

  • 适合 Docker 一键部署
  • 用网页界面管理服务器和客户端
  • 支持客户端二维码和配置文件导入
  • 适合轻量级 VPN 方案和远程访问场景
  • 帮你避开手工编写大量 WireGuard 配置文件

如果你想要的是“快速搭建 VPN,但又不想手动处理繁琐的配置”,wg-easy 非常适合。

2. Docker部署wg-easy前需要准备什么?

在开始 Docker 部署 wg-easy 前,确认以下条件都满足:

  • 一台公网 VPS 或 Linux 服务器
  • 已安装 Docker
  • 服务器开放了 51820/UDP 与 51821/TCP
  • 你拥有公网 IP 或绑定了一个域名
  • 你的系统支持 WireGuard 所需的网络能力

2.1 安装 Docker

如果你的服务器还没有安装 Docker,可以使用下面的方法:

1
curl -sSL https://get.docker.com | sh

如果你希望查看更详细的安装步骤,可以参考这篇文章:

也可以直接访问 Docker 官方文档 获取说明。

3. 生成 wg-easy 管理员密码哈希

在启动容器前,先为 Web 管理界面设置登录密码。这个步骤在 wg-easy 安装 流程里非常关键,直接决定后续是否能正常登录 wg-easy 管理界面。这里推荐使用官方自带的密码生成命令:

1
docker run --rm -it ghcr.io/wg-easy/wg-easy wgpw 'YOUR_PASSWORD'

将 YOUR_PASSWORD 替换成你的实际密码。执行后,命令会返回类似如下内容:

1
PASSWORD_HASH='$2b$12$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW'

这里得到的 PASSWORD_HASH 就是之后容器启动时需要使用的密码哈希值。你只需要保留中间那段哈希字符串即可,不需要引号。

这一步很关键:不要直接使用明文密码填写到容器参数里,否则管理页面的安全性会明显下降。

4. Docker 启动 wg-easy 容器:完整命令

下面是一条完整的 Docker 启动 wg-easy 命令,适合直接用于 VPS 或 Linux 服务器环境:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
docker run --detach \
--name wg-easy \
--env LANG=chs \
--env WG_HOST=your-domain-or-public-ip \
--env PASSWORD_HASH='\$2b\$12\$coPqCsPtcFO.Ab99xylBNOW4.Iu7OOA2/ZIboHN6/oyxca3MWo7fW' \
--env PORT=51821 \
--env WG_PORT=51820 \
--volume ~/.wg-easy:/etc/wireguard \
--publish 51820:51820/udp \
--publish 51821:51821/tcp \
--cap-add NET_ADMIN \
--cap-add SYS_MODULE \
--sysctl 'net.ipv4.conf.all.src_valid_mark=1' \
--sysctl 'net.ipv4.ip_forward=1' \
--restart unless-stopped \
ghcr.io/wg-easy/wg-easy

参数说明

  • --name wg-easy:给容器起一个名字,便于后续管理。
  • --env LANG=chs:界面语言设置为中文,方便使用。
  • --env WG_HOST:填写你的公网 IP 或域名。客户端连接时会用到这个地址。
  • --env PASSWORD_HASH:刚才生成的管理员密码哈希值。
  • --env PORT=51821:Web 管理界面的端口。
  • --env WG_PORT=51820:WireGuard 监听端口。
  • --volume ~/.wg-easy:/etc/wireguard:把配置目录挂载到宿主机,确保数据持久化。
  • --publish 51820:51820/udp:映射 WireGuard UDP 端口。
  • --publish 51821:51821/tcp:映射管理界面端口。
  • --cap-add NET_ADMIN 和 --cap-add SYS_MODULE:给容器增加网络管理权限,WireGuard 依赖这些能力。
  • --sysctl 'net.ipv4.ip_forward=1':启用 IP 转发,保证 VPN 流量可以正常转发。
  • --restart unless-stopped:容器异常后自动重启。

端口放行建议

如果你用的是云服务器,记得在安全组或防火墙中放行:

1
2
3
# 示例:Ubuntu / Debian ufw
ufw allow 51820/udp
ufw allow 51821/tcp

如果不放行,外部设备就无法正常连接到 VPN 服务。

5. 访问 wg-easy Web 管理界面

容器启动成功后,打开浏览器访问:

1
http://你的服务器公网IP:51821

例如:

1
http://203.0.113.10:51821

输入你在之前设置的密码即可登录。

登录成功后,你会看到 wg-easy 提供的管理界面,里面支持:

  • 新增客户端
  • 删除客户端
  • 下载 .conf 配置文件
  • 扫码配置移动设备
  • 查看连接状态

6. 创建 WireGuard 客户端并下载配置

在 wg-easy 管理界面 中,选择“Add Client”或类似入口,然后创建一个客户端:

  1. 设定客户端名称
  2. 生成唯一密钥对
  3. 下载对应配置文件
  4. 将配置文件导入到 WireGuard 客户端
  5. 启用连接

如果你使用的是手机端,通常可以直接扫描二维码快速加入网络;如果你使用的是电脑端,则更推荐导入 .conf 文件。

通常这类配置中会包含:

  • 服务器公钥
  • 客户端私钥
  • 服务器地址
  • 分配的内网 IP
  • 允许访问的网段

7. WireGuard 客户端配置示例

下面是一份标准的 WireGuard 客户端配置 示例,适合用于手机端、电脑端和其他支持 WireGuard 的设备:

1
2
3
4
5
6
7
8
9
10
[Interface]
PrivateKey = CLIENT_PRIVATE_KEY
Address = 10.0.0.2/24
DNS = 8.8.8.8, 1.1.1.1

[Peer]
PublicKey = SERVER_PUBLIC_KEY
Endpoint = your-domain-or-public-ip:51820
AllowedIPs = 0.0.0.0/0, ::/0
PersistentKeepalive = 25

说明:

  • Address:客户端在 VPN 内部分配的 IP
  • Endpoint:服务器公网地址和端口
  • AllowedIPs = 0.0.0.0/0:表示所有流量走 VPN
  • PersistentKeepalive:用于保持 NAT 环境下的连接稳定

8. wg-easy 常见问题:连接不上、访问失败和不能上网

8.1 连接不上 VPN

这通常是下面几种原因:

  • 防火墙没有放行 51820/UDP
  • 服务器没有开启 IP 转发
  • Docker 容器没有正常启动
  • 客户端配置中的 Endpoint 地址不正确

可以先检查容器状态:

1
2
docker ps -a
docker logs wg-easy

如果看到相关报错信息,通常能直接定位问题。

8.2 网页访问失败

确认以下几点:

  • 51821/TCP 已放行
  • 容器处于运行状态
  • 服务器绑定了正确的公网 IP 或域名
  • 你访问的是 http://IP:51821,不是 https:// 或错误端口

8.3 配置文件导入后不能连网

这通常是 DNS 或路由规则没有正常工作。请确认:

  • AllowedIPs 设置正确
  • 服务器端已开启 IP 转发
  • 客户端设备已启用 WireGuard 连接
  • 你是否需要挂载内网网段或特定访问路由

9. wg-easy 部署后的优化建议

如果你打算长期稳定运行 wg-easy,建议注意以下几点:

  • 将配置目录挂载到宿主机持久目录,如 ~/.wg-easy
  • 使用域名替代裸 IP,避免更换服务器后客户端重新配置
  • 配置 Nginx 或 Caddy 做反向代理,以便实现 HTTPS 访问
  • 定期备份 WireGuard 配置目录
  • 使用强密码并定期更新镜像,避免版本过旧造成安全风险

10. 总结

使用 Docker 部署 wg-easy,可以在较短时间内搭建起一套简单、可管理、适合日常使用的 WireGuard VPN 服务器。它适合需要快速实现远程访问、家庭网络穿透和分流代理的场景,尤其适合不想手动维护复杂 WireGuard 配置的用户。

如果你已经完成服务搭建,下一步就是在手机或电脑端导入生成的配置文件,测试客户端连接是否正常。