本地数据库客户端怎么远程连回家里服务器?CloudBeaver + cpolar 搭一个浏览器版数据库工作台
本地数据库客户端怎么远程连回家里服务器?CloudBeaver + cpolar 搭一个浏览器版数据库工作台
人在公司,数据库服务跑在家里的 NAS 或小主机上;临时要看一眼 PostgreSQL、MySQL,手边电脑又没装数据库客户端。这个时候,与其在每台电脑上反复装 DBeaver、配驱动、导连接,不如把数据库客户端本身做成一个 Web 工作台。
这篇用 CloudBeaver 搭一个浏览器版数据库管理入口:CloudBeaver 跑在内网服务器的 Docker 里,本地先通过8978端口验证;需要在外面临时访问时,再用 cpolar 把8978映射成公网 HTTPS 地址。重点依然是“能用,但收得住”,不是把数据库和管理面板长期裸露出去。
和上一篇《没有公网 IP 怎么远程连 PostgreSQL?DBeaver + cpolar 安全连接完整教程》的区别:上一篇是DBeaver 桌面客户端直连 PostgreSQL 的 5432 TCP 端口,更偏向固定电脑上的单库连接;本文是CloudBeaver Web 数据库工作台,浏览器打开后统一管理多种数据库,外网只访问 Web 面板,不直接暴露数据库端口。
1. 这套方案面向哪些场景?
CloudBeaver 可以理解成运行在服务器上的 DBeaver Web 版。数据库连接配置保存在 CloudBeaver 工作台里,用户通过浏览器访问面板,再由 CloudBeaver 去连接内网数据库。
可以优先考虑这些场景:
- 家里 NAS、小主机、实验服务器上跑了多种数据库,想用浏览器统一查看。
- 外出时偶尔要查数据、看表结构,不想在临时电脑上安装桌面客户端。
- 团队内部有一个测试库或开发库,希望用 Web 面板降低接入成本。
- 不想直接把 PostgreSQL
5432、MySQL3306、MongoDB27017这类数据库端口映射到公网。
不建议直接用于这些场景:
- 高频生产数据库运维,尤其涉及批量写入、DDL、权限变更。
- 对审计、堡垒机、双因素认证有强合规要求的企业生产环境。
- 希望把数据库管理入口长期公开给所有人使用。
我的建议是:CloudBeaver 更偏 homelab、测试环境、个人开发环境;如果要进生产,先把身份认证、网络边界、账号权限和审计流程补齐。
2. 访问链路先拆清楚
本文的链路是:
外部浏览器 ↓ cpolar HTTPS 公网地址 ↓ 内网服务器 8978 ↓ CloudBeaver 容器 ↓ 内网数据库 PostgreSQL / MySQL / MariaDB / 其他数据库这里有一个很重要的边界:cpolar 映射的是 CloudBeaver 的 Web 端口8978,不是数据库端口。
也就是说,公网访问者先进入 CloudBeaver 登录页,再由 CloudBeaver 使用你配置好的数据库账号连接内网数据库。相比直接暴露5432或3306,这条链路更容易控制,也更适用于临时远程查看。
本文示例只部署 CloudBeaver 本体,不强行绑定某一种数据库。你可以连接已有的 PostgreSQL、MySQL、MariaDB、SQLite、Oracle、SQL Server 等数据库。为了让命令更稳定,数据库连接部分会以“已有内网数据库”为前提说明。
3. 环境准备
准备一台内网机器,可以是 Linux 服务器、NAS、Mac mini、Windows 上的 Docker Desktop。本文命令以 Linux/macOS 终端为例。
需要安装:
- Docker
- Docker Compose v2
- cpolar
- 一个可访问的内网数据库服务
先检查 Docker:
docker version检查 Docker Compose:
docker compose version如果这两条命令都能输出版本信息,就可以继续。
再确认 CloudBeaver 要使用的端口没有被占用:
lsof -i :8978如果没有输出,说明8978当前空闲。若已有服务占用,可以把后文 Compose 文件里的宿主机端口改成别的端口,例如18978:8978,但 cpolar 映射时也要跟着改成本机的18978。
4. 用 Docker Compose 部署 CloudBeaver
先创建一个单独目录:
mkdir -p ~/cloudbeaver-workbench cd ~/cloudbeaver-workbench写入docker-compose.yml:
cat > docker-compose.yml <<'YAML' services: cloudbeaver: image: dbeaver/cloudbeaver:25.0.5 container_name: cloudbeaver restart: unless-stopped ports: - "8978:8978" volumes: - cloudbeaver_workspace:/opt/cloudbeaver/workspace volumes: cloudbeaver_workspace: YAML这份配置很短,但关键点都在里面:
dbeaver/cloudbeaver:25.0.5:CloudBeaver 官方 Docker 镜像。这里固定到具体版本,避免以后latest更新导致教程复现结果变化;实际使用时可以按官方发布记录升级。8978:8978:宿主机8978端口映射到容器内 Web 服务端口。cloudbeaver_workspace:保存 CloudBeaver 的初始化配置、连接配置和工作区数据。restart: unless-stopped:机器重启后自动恢复,除非你手动停止过容器。
启动服务:
docker compose up -d查看容器状态:
docker compose ps正常情况下,会看到cloudbeaver处于running或Up状态。
如果启动失败,先看日志:
docker logs cloudbeaver --tail=100常见问题通常是端口冲突、Docker 服务没启动,或者镜像拉取网络不稳定。不要急着改 CloudBeaver 配置,先把容器能稳定跑起来。
5. 本地访问并完成初始化
在内网机器或同一局域网电脑上打开:
http://127.0.0.1:8978如果你是在另一台局域网电脑上访问,把127.0.0.1换成服务器内网 IP,例如:
http://192.168.1.20:8978第一次打开 CloudBeaver,会进入初始化向导。按页面提示创建管理员账号。这里不要用弱密码,也不要用和数据库相同的密码。
建议管理员账号这样处理:
- 用户名不要直接用
admin这类太容易猜的名字。 - 密码长度至少 12 位,包含大小写字母、数字和符号。
- 不要把 CloudBeaver 管理员账号当数据库账号使用。
初始化完成后,先在本地浏览器里登录一次,确认能进入工作台页面。这个步骤是后面远程访问前的分水岭:本地都打不开时,不要先查 cpolar,先查 CloudBeaver 容器和端口。
可以用命令快速验证 HTTP 服务是否响应:
curl -I http://127.0.0.1:8978只要能看到 HTTP 响应头,例如HTTP/1.1 200、302或同类返回,就说明 Web 服务已经在监听。
6. 在 CloudBeaver 里添加数据库连接
进入 CloudBeaver 后,创建一个新的数据库连接。不同版本界面文案会有小差异,但流程大致是:
- 点击新建连接。
- 选择数据库类型,例如 PostgreSQL、MySQL、MariaDB。
- 填写 Host、Port、Database、Username、Password。
- 测试连接。
- 保存连接。
如果 CloudBeaver 和数据库在同一台 Docker 主机上,Host 不一定能直接写127.0.0.1。原因是127.0.0.1在容器里指向 CloudBeaver 容器自己,而不是宿主机。
常见写法有三种:
| 数据库位置 | Host 怎么填 |
|---|---|
| 数据库在另一台内网机器 | 填数据库服务器内网 IP,例如192.168.1.30 |
| 数据库和 CloudBeaver 在同一个 Docker Compose 网络 | 填数据库 service 名,例如postgres或mysql |
| 数据库跑在宿主机上 | Linux 可填宿主机网卡 IP;Docker Desktop 可尝试host.docker.internal |
端口按数据库实际监听端口填写,例如:
- PostgreSQL:
5432 - MySQL / MariaDB:
3306 - SQL Server:
1433
这里建议专门创建一个低权限数据库账号给 CloudBeaver 使用。比如只读查看场景,就不要用数据库管理员账号。上一篇 DBeaver + PostgreSQL 教程里已经演示过只读账号的思路,本文不重复展开 SQL 细节,原则仍然一样:远程入口能查就别给写,能访问一个库就别给全库。
7. 用 cpolar 映射 CloudBeaver 的 8978 端口
CloudBeaver 本地验证通过后,再接入 cpolar。
先确认 cpolar 本地 Web UI 可访问:
curl -I http://127.0.0.1:9200浏览器打开:
http://127.0.0.1:9200登录 cpolar 账号后,可以用命令行直接启动 HTTP 隧道:
cpolar http 8978终端会输出一个公网地址,通常类似:
https://xxxx.cpolar.top具体域名以你终端实际输出为准。复制这个 HTTPS 地址,用手机流量或外部网络打开,就能访问 CloudBeaver 登录页。
如果你更习惯 Web UI,也可以在http://127.0.0.1:9200里创建隧道:
- 协议:
http - 本地地址:
8978 - 域名类型:先用随机域名测试
- 创建后到“状态 / 在线隧道列表”复制公网 HTTPS 地址
免费随机域名会变化,适用于临时访问和测试。如果你希望长期使用固定入口,再考虑配置固定域名或保留地址。但长期开放前,请先看完后面的安全边界。
8. 外网访问时怎么验证链路
建议按这个顺序验证,不要一上来就改配置:
8.1 本机确认 CloudBeaver 还活着
curl -I http://127.0.0.1:8978有 HTTP 响应,说明 CloudBeaver 本地服务正常。
8.2 确认容器状态
docker compose ps如果容器退出,看日志:
docker logs cloudbeaver --tail=1008.3 确认 cpolar 隧道还在
如果你是用命令行启动的:
cpolar http 8978这个终端窗口关闭后,临时隧道也会结束。需要继续访问,就重新启动隧道并使用新的公网地址。
8.4 用外部网络打开 HTTPS 地址
最好用手机关闭 Wi-Fi 后访问 cpolar HTTPS 地址。能看到 CloudBeaver 登录页,说明公网到 CloudBeaver 面板这段已经通了。
登录后再测试数据库连接。如果 CloudBeaver 页面能打开,但数据库连接失败,问题通常在 CloudBeaver 到数据库这段内网链路,不在 cpolar。
9. 安全边界:别把数据库工作台当普通网页长期裸露
CloudBeaver 是数据库管理入口,不是博客首页。它能看到表结构、执行 SQL、导出数据,所以安全边界要比普通 Web 应用更克制。
我会按下面这几条处理。
9.1 外网只映射 CloudBeaver,不映射数据库端口
本文没有使用cpolar tcp 5432或cpolar tcp 3306,而是映射8978。这样外部访问者面对的是 CloudBeaver 登录页,而不是数据库原生端口。
这不代表绝对安全,但至少把数据库端口从公网扫描面里拿掉了。
9.2 CloudBeaver 账号和数据库账号分开
CloudBeaver 管理员账号负责登录工作台,数据库账号负责连接具体数据库。两套账号不要共用密码。
CloudBeaver Community 版的能力边界也要说清楚:它面向个人和小团队自用的 Web 数据库工作台。如果你需要更细的企业级权限、集中身份认证、审计能力,应按 CloudBeaver 官方版本能力重新评估,不要把本文这套个人远程访问方案直接搬进生产。
数据库账号尽量按用途创建:
- 查数据:只读账号。
- 调试开发库:限制在开发库或测试库。
- 生产库:能不用 CloudBeaver 连就不用;必须连时,走团队的审批、审计和备份流程。
9.3 隧道按需开启,用完关闭
临时访问时,用:
cpolar http 8978用完按Ctrl + C结束。不要因为“下次方便”就长期挂着数据库管理入口。
如果你已经在 cpolar 后台配置了固定隧道,至少要做到:
- CloudBeaver 使用强密码。
- 数据库连接账号低权限。
- 不在 CloudBeaver 里保存高权限生产库密码。
- 定期检查连接列表,删除不用的连接。
9.4 不要把 CloudBeaver 当公网多人协作平台
CloudBeaver 支持 Web 化访问,但本文场景是个人或小范围远程维护。多人长期使用时,权限、审计、备份、误操作恢复都要单独设计。
尤其是能执行 SQL 的工具,一次错误的UPDATE或DROP不会因为它长在浏览器里就变得温柔。
10. 常见问题
Q1:CloudBeaver 页面能打开,但连接数据库失败怎么办?
先判断数据库是不是 CloudBeaver 容器能访问到。
如果数据库在另一台内网机器,Host 填内网 IP,例如192.168.1.30,不要填你自己电脑上的127.0.0.1。
如果数据库在同一个 Compose 文件里,Host 填 service 名。如果数据库跑在宿主机,优先填宿主机内网 IP。Docker Desktop 环境可以尝试host.docker.internal。
Q2:为什么不直接用 cpolar 映射 PostgreSQL 5432 或 MySQL 3306?
可以,但适用场景不同。
上一篇 DBeaver + PostgreSQL 文章走的是桌面客户端直连数据库 TCP 端口,偏向你明确只连某一个 PostgreSQL,并且本机有 DBeaver 的情况。本文选择 CloudBeaver,是为了把数据库客户端做成 Web 工作台,外部只打开浏览器,不直接暴露数据库端口。
如果只是偶尔用 DBeaver 连一个库,TCP 隧道更直接;如果要统一管理多种数据库,CloudBeaver 更顺手。
Q3:cpolar 随机地址变了,CloudBeaver 连接会丢吗?
不会影响 CloudBeaver 到数据库的内网连接,但会影响你从外网访问 CloudBeaver 的入口地址。
随机地址用于临时访问更省心。固定入口需要配置固定域名或保留地址,配置前先把 CloudBeaver 和数据库账号权限收紧。
Q4:CloudBeaver 的配置会不会容器删除后丢失?
本文使用了 Docker volume:
volumes: - cloudbeaver_workspace:/opt/cloudbeaver/workspace只要不删除这个 volume,CloudBeaver 的工作区数据会保留。停止或重建容器不会直接清空配置。
如果要备份,可以先停止容器,再备份 Docker volume。迁移到新机器时,也要把这个工作区数据一起迁过去。
Q5:忘记 CloudBeaver 管理员密码怎么办?
个人测试环境里,最省事的做法通常是备份必要连接信息后重新初始化工作区。生产或多人环境不要这样粗暴处理,应按 CloudBeaver 官方文档的用户管理和恢复流程操作。
为了避免这个问题,初始化后就把管理员账号、恢复方式、数据库连接账号分别记录到密码管理器里。
11. 收尾:浏览器版数据库工作台的价值在“统一入口”
这套方案跑通后,你得到的是一个内网数据库工作台:CloudBeaver 负责统一管理连接,cpolar 负责在需要时给它一个临时公网 HTTPS 入口。
它和 DBeaver 桌面客户端不是替代关系,更像两个不同入口:
- 固定电脑、单库深度操作:DBeaver 桌面客户端更直接。
- 多设备浏览器访问、多数据库统一查看:CloudBeaver 更方便。
最后再强调一次边界:不要为了远程方便,把数据库管理入口长期裸露在公网。先本地验证,再临时映射;先低权限账号,再考虑外网访问。数据库远程管理这件事,能打开只是开始,能随时关掉才安心。
标签建议:CloudBeaver、数据库、Docker、cpolar、远程访问
