发布于 Mooloco Blog · #Homelab #SelfHosted #Docker


项目简介
Apache Guacamole 是一个无客户端的远程桌面网关。它让你可以通过浏览器直接访问 RDP、VNC、SSH 和 Telnet 服务,不需要在本地安装任何远程桌面软件。
浏览器 ───→ Guacamole Web ───→ Guacd 代理 ───→ 你的服务器
只需打开网页 │
RDP → Windows VM
VNC → Linux 桌面
SSH → 终端
核心功能
| 功能 | 说明 |
|---|---|
| 无客户端 | 只需要浏览器,Chrome/Firefox/Edge 都行 |
| 多协议 | 同时支持 RDP、VNC、SSH、Telnet、Kubernetes |
| 会话录制 | 可以录制所有操作,方便审计 |
| 双因素认证 | 支持 TOTP 等二次验证 |
| 多用户权限 | 细粒度的用户/用户组 + 连接权限管理 |
| 录音/录屏 | 支持音频传输和屏幕录制 |
| 复制粘贴 | 剪贴板在本地和远程之间互通 |
为什么在 Homelab 里需要它
过去你要管理家里这些机器:
Win10 LTSC (192.168.1.39) ← 要装 RDP 客户端
iStoreOS 旁路由 ← 要 SSH 客户端
gb-pve / ami-pve ← 要 SSH 客户端
→ 每换一台设备就要装一遍客户端
→ 手机上管理特别麻烦
有了 Guacamole:
浏览器打开 http://192.168.1.x:8090/guacamole
一个页面管所有机器
Windows/Mac/Linux/手机 都能用
部署方案
根据你的环境选择,这里给出两种常见场景。
场景一:内置 MySQL 容器(All-in-One)
适合没有现成数据库的新部署。
docker-compose.yml
version: "3.8"
services:
mysql:
image: mysql:8.0
container_name: guacamole-mysql
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASS:-guacadmin}
MYSQL_DATABASE: ${MYSQL_DATABASE:-guacamole_db}
MYSQL_USER: ${MYSQL_USER:-guacamole}
MYSQL_PASSWORD: ${MYSQL_PASS:-guacamole}
volumes:
- ./mysql-data:/var/lib/mysql
restart: unless-stopped
guacd:
image: guacamole/guacd
container_name: guacamole-guacd
restart: unless-stopped
guacamole:
image: guacamole/guacamole
container_name: guacamole-web
depends_on:
- guacd
- mysql
environment:
GUACD_HOSTNAME: guacd
MYSQL_HOSTNAME: mysql
MYSQL_DATABASE: ${MYSQL_DATABASE:-guacamole_db}
MYSQL_USER: ${MYSQL_USER:-guacamole}
MYSQL_PASSWORD: ${MYSQL_PASS:-guacamole}
ports:
- "8080:8080"
restart: unless-stopped
部署
mkdir -p /opt/guacamole && cd /opt/guacamole
# 创建 docker-compose.yml 后:
docker compose up -d mysql
# 初始化数据库
docker run --rm guacamole/guacamole \
/opt/guacamole/bin/initdb.sh --mysql > ./initdb.sql
docker exec -i guacamole-mysql mysql -u root -pguacadmin guacamole_db < ./initdb.sql
docker compose up -d
数据库文件(下同)
场景二:使用外部数据库(推荐 Homelab 场景)
适合局域网内已有数据库服务器的情况(如 NAS、独立数据库容器等)。
docker-compose.yml
services:
guacd:
image: guacamole/guacd:latest
container_name: guacd
restart: unless-stopped
networks:
- guac-net
guacamole:
image: guacamole/guacamole:latest
container_name: guacamole
restart: unless-stopped
depends_on:
- guacd
environment:
GUACD_HOSTNAME: guacd
GUACD_PORT: 4822
MYSQL_ENABLED: "true"
MYSQL_HOSTNAME: ${DB_HOST}
MYSQL_PORT: ${DB_PORT:-3306}
MYSQL_DATABASE: ${DB_NAME}
MYSQL_USER: ${DB_USER}
MYSQL_PASSWORD: ${DB_PASS}
TZ: Asia/Shanghai
ports:
- "8090:8080"
networks:
- guac-net
networks:
guac-net:
driver: bridge
.env 文件
DB_HOST=192.168.1.x
DB_PORT=3306
DB_NAME=guacamole_db
DB_USER=guacamole
DB_PASS=your_password_here
初始化数据库(只需一次)
docker run --rm guacamole/guacamole \
/opt/guacamole/bin/initdb.sh --mysql > ./initdb.sql
mysql -h ${DB_HOST} -u ${DB_USER} -p ${DB_NAME} < ./initdb.sql
启动
docker compose up -d
访问与使用
地址: http://你的服务器IP:8090/guacamole
默认账号: guacadmin
默认密码: guacadmin
登录后进入管理界面:
- 点击右上角用户头像 → 设置
- 连接 → 新建连接
- 填写:
- 名称:Win10 LTSC
- 协议:RDP(或 VNC / SSH)
- 主机名:192.168.1.39
- 端口:3389(RDP 默认)
- 认证:填写目标机器的用户名密码
- 保存后点击连接,浏览器里直接出现远程桌面
优势小结
| 优势 | 说明 |
|---|---|
| 🖥️ 跨平台 | 任何有浏览器的设备都能管理 |
| 🔒 集中认证 | 所有远程连接用 Guacamole 的账号统一管理 |
| 📦 轻量部署 | Docker 一条命令启动 |
| 🎥 审计回放 | 所有操作可录制,谁做了什么一目了然 |
| 🔗 多网段 | 通过 Guacamole 统一入口访问不同 VLAN 的设备 |
如果你也在自建 Homelab,这个工具值得一试。有问题欢迎留言交流。