利用 Cloudflare Ghost RaspberryPi NAS 搭建个人博客
Cloudflare 真可谓是业界良心,对个人来说免费的服务已经可以跑的很 high 了。对于中小企业来说,25刀一个月可以说是超值大礼包。
这里 FOMO 下CF的股票代码 NET, 支持他就买cf的股票。
随着消费降级,也打算把自己的 blog 缩减一下成本。本来是 nextjs + django + postgresql。很多时候是给自己练手用的。现在迁移到 ghost, 也可以充分利用家里 raspberrypi 4。而且,人到中年懒的再继续折腾了。同时也要更好的利用中年三宝。
以上都是个人些感想。
硬件设备
- RaspberryPI 4 4G
- Synology DS720 Plus 6G (中年三宝之一)
首先, 在 raspberrypi 上安装 cloudflared:
- 添加 cloudflare 安装包签名
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
- 添加 cloudflare apt 源
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/cloudflared.list
- 更新 apt 源并且安装 cloudflare
sudo apt-get update && sudo apt-get install cloudflared
接着, 验证你的 cloudflare 账号:
cloudflared tunnel login
运行以上命令后,会打开浏览器授权,并选择一个 domain name 链接 raspberrypi
然后,创建一个 tunnel 并且给 tunnel 取名字:
cloudflared tunnel create ghost-raspi
这里把 tunnel 命名为 ghost-raspi, 然后验证 tunnel 是否创建成功
cloudflared tunnel list
You can obtain more detailed information for each tunnel with `cloudflared tunnel info <name/uuid>`
ID NAME CREATED CONNECTIONS
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ghost-raspi 2024-07-17T13:07:41Z 2xsjc06, 2xsjc08
接着继续,创建一个配置文件:
在 /home/xxx/ 下的 .cloudflared/ 目录下创建一个 config.yml 配置文件
url: http://localhost:8080
tunnel: <Tunnel-UUID>
credentials-file: /root/.cloudflared/<Tunnel-UUID>.json
配置路由:
分配一条 CNAME 记录,将流量指向隧道 subdomain:
cloudflared tunnel route dns <UUID or NAME> <hostname>
让 Cloudflare tunnel 奔跑起来
cloudflared tunnel run <UUID or NAME>
最后,检查 cloudflared 服务运行状态
通过以下命令获得 cloudflared 相关信息
cloudflared tunnel info <UUID or NAME>
以上是 cloudflare 的安装与配置。更具体的可以参考官方文档
安装配置 ghost
ghost 我使用 Docker 安装,方便快捷
首先创建一个 ghost 目录,然后进入目录,创建 docker-compose.yaml 和 config.production.json 文件
mkdir ghost
cd ghost
touch docker-compose.yaml
touch config.production.json
将一下内容复制到 docker-compose.yaml 文件里
# by default, the Ghost image will use SQLite (and thus requires no separate database container)
# we have used MySQL here merely for demonstration purposes (especially environment-variable-based configuration)
version: '3.1'
services:
ghost:
image: ghost:alpine
restart: unless-stopped
ports:
- 8080:2368
volumes:
- ./content:/var/lib/ghost/content
- ./config.production.json:/var/lib/ghost/config.production.json
environment:
# see https://ghost.org/docs/config/#configuration-options
database__client: mysql
# this url value is just an example, and is likely wrong for your environment!
url: https://www.example.com
# contrary to the default mentioned in the linked documentation, this image defaults to NODE_ENV=production (so development mode needs to be explicitly specified if desired)
#NODE_ENV: development
config.production.json 可以参考 ghost 官方文档
在之前建立的 ghost 目录下输入一下命令,就可以启动 ghost 服务了
docker-compose up -d
结论
Synology 上安装 mysql 几乎是傻瓜式,这里就不阐述了。这个时代可以问问 gpt 怎么折腾,应该挺方便。
后续,为了稳定性,可能会考虑 UPS 以防止跳电。预算充足的话也可以弄三个 raspberrypi 4/5 部署 k3s,防止单点故障。 (这里不推荐使用 3代,即使跑 k3s 还是很吃力)。