May 27, 2021

如何零成本部署一个 Ghost 网站

Ghost 是一个类似 WordPress 的博客系统,在之前的版本中提供了 Rest API 用于读取网站的内容,这样你就可以只把 Ghost 用作一个管理后台,再用 Next.js 之类的框架使用这个 API 构建一个静态网站。

要部署一个静态网站很简单,而且不用花钱,Vercel 和 Cloudflare Pages 大概是目前最流行的选择。而部署一个动态网站,比如基于 Node.js 的 Ghost 就稍微有些麻烦,不仅性能不如静态网站,也有维护成本,而且静态网站不用考虑安全问题,这也是为什么很多人选择静态网站的原因之一。我这里会介绍一种零成本运行 Ghost 的方法,会用到以下服务:

  • Fly.io: 类似 Heroku 的 PaaS,支持基于 Dockerfile 部署服务,刚好 Ghost 有一个社区维护的 Docker 镜像。你需要在你的系统上先安装它的 CLI 工具。
  • LiteStream: 用于实时备份和还原 SQLite 的工具,我们要部署的这个 Ghost 网站将会使用 SQLite 而不是 MySQL,一是免费稳定的 MySQL 服务比较少,二是维护数据库也有成本。LiteStream 只需要一个兼容 AWS S3 的存储服务。
  • 京东云对象存储: 用于存储备份的 SQLite 文件,任何与 AWS S3 兼容的云对象存储皆可,不过京东云提供了每月 10G 的免费额度,完全够用了。

首先 Fork egoist-bot/ghost-litestream 这个 repo:

git clone git@github.com:USER_NAME/ghost-litestream.git

然后修改里面的 etc/litestream.yml,用你创建的京东云对象存储 bucket 信息替换掉里面默认的:

access-key-id: xxx
secret-access-key: xxx

dbs:
  - path: /var/lib/ghost/content/data/ghost.db
    replicas:
      - type: s3
        bucket: bucket_name
        path: ghost
        endpoint: s3.xxx.jdcloud-oss.com
        force-path-style: true

然后把 Dockerfile 里的这一行改成你要使用的网站域名:

ENV url=http://example.com

最后在这个项目里运行 flyctl launch 就行了,在你的 Fly.io 后台可以看到相关项目,在 Certificates 那一栏可以绑定域名。绑定完成后打开你的网站,便可以看到默认的 Ghost 首页,Ghost 的后台页面在 /ghost,首个创建的用户会成为管理员。

至于如何运用 Ghost API 构建静态网站,可以参考官方说明

更新于 Jun 25, 2021
禁止转载