这是“我今天学到的东西”系列的一部分,在这里我分享所学的新知识。在Xfinity中遇到端口转发问题后,我决定寻找替代解决方案。我过去曾使用Cloudflare隧道(以前称为Argo隧道)将笔记本电脑上运行的网站公开到Internet。因此,我决定在我为父亲设置的Ghost博客网站上尝试一下。

我已经设置的东西

  1. Cloudflare免费套餐帐户并添加了域
  2. 安装了Docker的Raspberry pi

总体架构如下所示:整体架构

这是我执行的步骤:

  • 创建一个Docker卷
docker volume create ghost-synergywin-net
  • 创建一个使用搬运工容器图像[1]
docker run -d -e url=http://localhost:3001 -p 3001:2368 --name some-ghost -v ghost-synergywin-net:/var/lib/ghost/content ghost

我将树莓派端口3001映射到容器端口2368,并将环境变量url作为localhost传递。将位置安装/var/lib/ghost/contentghost-synergywin-net卷。

  • 确认虚拟站点已启动
curl http://localhost:3001

接下来,我将url环境变量替换为实际域

docker run -d -e url=https://synergywin.net -p 3001:2368 --name some-ghost -v ghost-synergywin-net:/var/lib/ghost/content ghost

接下来是将该网站安全地公开到Internet。因为,树莓派正在我的局域网(LAN)上运行。我需要使其可以从Internet访问。为此,我使用了Cloudflare隧道

  • 我将域synergywin.net添加到Cloudflare
  • 在Raspberry pi上安装了[2] cloudflared可执行文件
  • 对创建cert.pem文件的cloudflared进行身份验证[3]
  • 创建了一条隧道
    cloudflared tunnel create ghost-synergywin-net
    
  • 为隧道创建了一个配置文件
credentials-file: /home/pi/.cloudflared/<uuid>.json
tunnel: <uuid>

ingress:
  - hostname: synergywin.net
    service: http://localhost:3001
  - service: http_status:404
  • 在Cloudflare仪表板中使用.cfargotunnel.com为主机名添加了一个CNAME
  • 使用上述配置运行隧道
cloudflared tunnel --config config.yaml run &

其实就是这样。我现在可以通过互联网访问我父亲的博客。

奖励,我还SSL协议可以通过单击Cloudflare本身免费启用SSL ,只需单击一个单选按钮即可:)

参考:

  1. https://hub.docker.com/_/ghost
  2. https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation
  3. https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/setup