Gluetun WebUI
一个轻量级的网页界面,用于监控和控制 Gluetun — Docker 的 VPN 客户端容器。
功能
- ✨ 多VPN支持 — 同时监控和控制多达 20 个 Gluetun 实例
- 实时 VPN 状态横幅(已连接 / 暂停 / 已断开)
- 公共出口 IP、国家、地区、城市和组织
- VPN 提供商、协议(WireGuard / OpenVPN)、服务器详情
- 端口转发和 DNS 状态
- 启动 / 停止 VPN 控制
- 自动刷新,间隔可配置(5秒 – 60秒)
- 历史条中最后 30 次轮询以颜色区分
- 响应式设计(移动端、平板、桌面)
截图

要求
- Docker + Docker Compose
- Gluetun 运行并启用其 HTTP 控制服务器(默认端口
8000) - Gluetun 和 gluetun-webui 在同一 Docker 网络中
linux/amd64 和 linux/arm64(适用于 Mac Intel/Apple Silicon、Linux 和 Windows)。快速开始
选项 A1:单实例(推荐)
在现有的 compose 文件中,和 Gluetun 一起添加 gluetun-webui:
gluetun-webui:
image: scuzza/gluetun-webui:latest
container_name: gluetun-webui
ports:
- "127.0.0.1:3000:3000"
environment:
- GLUETUN_CONTROL_URL=http://gluetun:8000
# Uncomment if Gluetun auth is enabled:
#- GLUETUN_API_KEY=yourtoken
#- GLUETUN_USER=username
#- GLUETUN_PASSWORD=password
networks:
- your_network_name
restart: unless-stopped
read_only: true
tmpfs:
- /tmp
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
healthcheck:
test: ["CMD", "wget", "-qO-", "http://localhost:3000/api/health"]
interval: 30s
timeout: 5s
start_period: 10s
retries: 3选项 A2:多个实例
通过独立的仪表板监控 2 个以上 Gluetun 实例:
gluetun-webui:
image: scuzza/gluetun-webui:latest
container_name: gluetun-webui
ports:
- "127.0.0.1:3000:3000"
environment:
- GLUETUN_1_NAME=VPN - London
- GLUETUN_1_URL=http://gluetun-1:8000
- GLUETUN_1_API_KEY=token1
- GLUETUN_2_NAME=VPN - Amsterdam
- GLUETUN_2_URL=http://gluetun-2:8000
- GLUETUN_2_API_KEY=token2
- GLUETUN_3_NAME=VPN - Singapore
- GLUETUN_3_URL=http://gluetun-3:8000
- GLUETUN_3_API_KEY=token3
networks:
- your_network_name
restart: unless-stopped
read_only: true
tmpfs:
- /tmp
security_opt:
- no-new-privileges:true
cap_drop:
- ALL
选项 B:本地构建
git clone https://github.com/Sir-Scuzza/gluetun-webui.git
cd gluetun-webui
docker compose up -d --build然后运行(任一选项):
docker compose up -dUI 可通过 http://localhost:3000 访问
网络设置
Gluetun 和 gluetun-webui 必须在同一 Docker 网络中,以确保 http://gluetun:8000 能正确解析。
相同的 compose 文件 — 只需将两个服务添加到同一网络(最常见):
services:
gluetun:
networks:
- arr-stack
gluetun-webui:
networks:
- arr-stack
networks:
arr-stack:
driver: bridge分离的 compose 文件 — 将 Gluetun 现有网络作为外部网络引用。使用 docker network ls 查找您的网络名称:
networks:
ext-network:
external: true
name: your_gluetun_network_name多重 VPN 支持
多实例
gluetun-webui 支持同时监控和控制多个 Gluetun 实例。每个实例以响应式网格中的独立仪表盘显示。
配置:使用编号环境变量:
gluetun-webui:
image: scuzza/gluetun-webui:latest
environment:
# Instance 1
- GLUETUN_1_NAME=VPN 1
- GLUETUN_1_URL=http://gluetun-1:8000
- GLUETUN_1_API_KEY=token1 # optional
# Instance 2
- GLUETUN_2_NAME=VPN 2
- GLUETUN_2_URL=http://gluetun-2:8000
- GLUETUN_2_API_KEY=token2 # optional
# Instance 3
- GLUETUN_3_NAME=VPN 3
- GLUETUN_3_URL=http://gluetun-3:8000
- GLUETUN_3_USER=admin
- GLUETUN_3_PASSWORD=secret # optional (HTTP Basic auth)
支持:最多20个实例(通过 GLUETUN_1_URL 到 GLUETUN_20_URL)
响应式:1 个全宽仪表盘 → 2 个半宽 → 3 个三分之一宽 → 4 个四分之一宽 → 5个以上可滚动
向后兼容性
如果未配置编号变量,则回退到传统单实例模式:
environment:
- GLUETUN_CONTROL_URL=http://gluetun:8000 # legacy
- GLUETUN_API_KEY=token
每个实例的认证
每个实例可以有不同的认证:
# Instance with API key
- GLUETUN_1_API_KEY=my-secret-token
Instance with HTTP Basic auth
- GLUETUN_2_USER=admin
- GLUETUN_2_PASSWORD=mysecret
Instance with no auth
- GLUETUN_3_URL=http://gluetun-3:8000 # auth optional
---
配置
| 变量 | 默认值 | 描述 |
|---|---|---|
| GLUETUN_1_ 到 GLUETUN_20_ | _(空)_ | 多实例配置(最多20个实例) |
| GLUETUN_{N}_URL | – | 实例 N 的 Gluetun HTTP 控制服务器 URL |
| GLUETUN_{N}_NAME | Instance {N} | 实例 N 的显示名称 |
| GLUETUN_{N}_API_KEY | _(空)_ | 实例 N 的 Bearer 令牌(如果启用认证) |
| GLUETUN_{N}_USER | _(空)_ | 实例 N 的 HTTP 基本认证用户名 |
| GLUETUN_{N}_PASSWORD | _(空)_ | 实例 N 的 HTTP 基本认证密码 |
| GLUETUN_CONTROL_URL | http://gluetun:8000 | 旧版 – 仅单实例(如果没有 GLUETUN_1_* 变量则回退) |
| GLUETUN_API_KEY | _(空)_ | 旧版 – 单实例的 Bearer 令牌 |
| GLUETUN_USER | _(空)_ | 旧版 – HTTP 基本认证用户名 |
| GLUETUN_PASSWORD | _(空)_ | 旧版 – HTTP 基本认证密码 |
| PORT | 3000 | Web UI 监听的端口 |
| TRUST_PROXY | false | 如果运行在反向代理(nginx、Traefik 等)后面,设为 true |
安全性
- 端口绑定到
127.0.0.1— 不对网络暴露 - 容器以非 root 用户运行,文件系统只读,并移除多余权限
- 对所有 API 路由应用速率限制
- 上游错误详情仅记录在服务器端 — 浏览器返回通用消息
反向代理配置
如果你在反向代理(nginx、Traefik、Caddy 等)后运行 gluetun-webui,请在环境变量中设置 TRUST_PROXY=true:
gluetun-webui:
image: scuzza/gluetun-webui:latest
environment:
- GLUETUN_CONTROL_URL=http://gluetun:8000
- TRUST_PROXY=true # Required for reverse proxies
这允许应用程序正确解析 X-Forwarded-For 及相关头信息,以实现准确的速率限制和 IP 识别。注意: 仅当您确实位于反向代理之后时才启用此功能,因为它信任来自您反向代理的代理头。反向代理认证
VPN 启动/停止控制没有内置认证。如果您将 UI 暴露到本地主机以外,请将其置于带有 HTTP 基本认证的反向代理后面。
Caddy(Caddyfile):
your.domain.com {
basicauth {
user $2a$14$
}
reverse_proxy localhost:3000
}
使用命令生成哈希:caddy hash-passwordNginx (nginx.conf):
location / {
auth_basic "Restricted";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://localhost:3000;
}
使用以下命令生成密码文件:htpasswd -c /etc/nginx/.htpasswd userTraefik(Docker 标签):
labels:
- "traefik.enable=true"
- "traefik.http.routers.gluetun-webui.rule=Host(
your.domain.com)"
- "traefik.http.routers.gluetun-webui.middlewares=auth"
- "traefik.http.middlewares.auth.basicauth.users=user:$$apr1$$
"
生成哈希:htpasswd -nb user password致谢
- Gluetun — 此 Web UI 所针对的 VPN 客户端容器
- gluetun-monitor — 与此 Web UI 配套的优秀监控工具
- AI 辅助开发 — 本项目在 AI 辅助下构建
许可证
MIT
--- Tranlated By Open Ai Tx | Last indexed: 2026-05-26 ---