原因
数据库期末考试在即,我需要在本地运行一个练习用的数据库。但是,由于需要往来宿舍和图书馆,分别在宿舍主机和笔记本上安装两个独立的数据库会很割裂。虽然有云服务器,但是考虑到令人咂舌的带宽费用,最终还是放弃了在云服务器上建数据库。
不过,虽然云服务器不行,但是我有域名呀!于是,我便想到了利用互联网活菩萨 — cloudflare 的 tunnel 功能。
实操
在 CF 里拥有一个自己的域名
- 购买一个域名。推荐上 https://namecheap.com 购买,价格实惠。(tip:如果你有学校邮箱,还可以白嫖一年的 .me 域名~)
- 将域名托管到 CF。具体操作:在 CloudFlare 的控制台主页,选择“添加域名”,然后根据提示在 NameCheap 中更改 NameServer(即名称服务器)
服务端设置
- CF 控制台 - ZeroTrust - Network (第一次进入 ZeroTrust 需要选择套餐,选择免费版。完善一下付款信息即可,不会真的扣钱)
- 新建 Tunnel
- 类型选择 TCP
- 根据提示在你想要部署的 MySQL 的主机上安装 cloudflared 守护程序。下面我以 docker 为例
- 复制 docker run 命令。推荐在官方给出的 docker run 命令后加上 -d 参数,确保容器在后台运行
- 继续在 CF 网页上完成设置,包括自定义子域名等
- 在终端运行以下命令:
cloudflared tunnel login
如果是 docker,则修改命令为:
docker exec -it <your cloudflared container name> cloudflared tunnel login
在弹出的网页浏览器中选择你的域名,等待 CF 下载证书
- 将资源连接到 CF
在终端运行以下命令:
cloudflared tunnel --hostname <your domain> --url tcp://localhost:<port>
同样的,如果是 docker,在前面加上
docker exec -it 即可客户端设置
- 在客户端安装 cloudflared 守护程序
- 运行以下命令:
cloudflared access tcp --hostname <your domain> --url localhost:<port>
确保机器的防火墙允许从 80 和 443 端口出站,否则 cloudflared 将返回错误
- 成功!
结语
现在你可以在类似 DataGrip 等的客户端工具,通过输入 localhost:3306 来连接你的远程 MySQL 服务器啦!
当然,其他的 TCP 连接也是可以的。CF 本身还支持其他协议类型,如原生支持 http/https 等。合理利用 CF 的服务,你就是互联网上最靓的仔
