Ghost进阶: 一些依赖项的配置

更新时间:2022年9月15日13点40分


配置方式

如果没有自定义配置Ghost将使用默认配置,自定义配置:config.development.jsonconfig.production.json,这两个文件分别应用于开发和生产运行环境,默认在环境变量中指定:

NODE_ENV=production(or development)

Docker部署的容器直接映射配置文件在本地,方便修改,修改后重启才能生效。这两个文件在容器中的路径是:

/var/lib/ghost/config.production.json
/var/lib/ghost/config.development.json

环境变量也可以替换默认配置中的选项,嵌套配置选项使用两个下划线分隔,例如:

admin__url=domain

对应:

"admin": {
  "url": "domain"
}

数据库的选择

Bookshelf.js是Ghost的ORM框架,尽管该框架已实现对 PostgreSQL的操作,Ghost源码仍移除了相应选项,官方表示团队中缺乏维护人员,5.0以后版本只支持Sqlite3和MySQL 8,并且在5.8版本以后生产环境只能使用MySQL。

docker下mysql有两个官方的库,大同小异:

  1. 由Docker团队维护,通过下载mysql:latest即可使用;
  2. 由Oracle的MySQL团队维护, 镜像地址是mysql/mysql-server:latest

评论插件的选择

最新的情况是,官方在5.9版本以上终于集成了评论系统,此前只能安装第三方评论插件,且需要在主题中添加几行代码

网站主题中可以设置评论部分仅限会员可见,但是第三方评论系统通常需要读者另外再登录一个账号,而可以单点登录并会员结合的评论系统,目前只有Cove实现了这一功能:数据在云端,价格在每月7.5美元以上,不推荐使用。

而最新的官方评论系统完全实现了上述需求。

Gravatar头像无法显示的问题

网站会员头像来自邮箱对应的Gravatar账号,无法在本站自主上传,Gravatar是一项网络头像服务。用户在Gravatar服务器上传了自己的头像并绑定邮箱,便可以在其他任何支持Gravatar的博客、论坛等地方显示它。

目前官方源在中国内地无法访问,要么用CDN源替代,要么在配置中禁用:

"privacy": {
    "useGravatar": false,
}

禁用是不必的,有国内可用的CDN源,推荐两个国内外皆可用的源:

https://gravatar.zeruns.tech/avatar/
https://use.sevencdn.com/avatar/

示例(替换url前缀):

"gravatar": {
	"url": "https://use.sevencdn.com/avatar/{hash}?s={size}&r={rating}&d={_default}"
},

管理面板的域

假设主站url是:https://content_domain,管理面板的默认路径是后面加上/ghost/。为管理面板指定不同域的配置:

"admin": {
  "url": "https://content_domain"
}

访问https://content_domain/ghost/将自动重定向到https://admin_domain/ghost/。官方文档中未说明的是:若想禁止重定向,无法通过路由routes.yaml和重定向redirects.json设置做到这一点,只能在自定义配置中增加一个字段:

"admin": {
	"url": "https://admin_domain",
	"redirects": false
}

不过此方法并不能隐藏网站后端,假设这么一种需求:

给博客上加了 CDN,这可以保护源站,另一方面又希望管理员绕过 CDN 直接在源站管理后台,通过分别设置管理端域名是无法实现的,因为Ghost Core 定义了 Content 和 Admin 两套 API,它们的 Base URL同样都是https://{admin_domain}/ghost/api/,而访问主站会向 Content API请求数据,也就是说会暴露管理端的域名和背后的 IP。如果不进行管理端的域名配置,而另外从反向代理的地址访问管理面板,又会有CORS(跨域请求资源限制) 的问题,其中预检请求发生了重定向错误意味着只能修改源码。

我不知道Ghost这么设计的意义,如果不需要切换主题和修改样式,那么其实也不需要单独配置管理端的url,只需要另外用一个域名+端口反向代理到ghost,然后防火墙设置这个端口只允许局域网和某个范围的外网IP(例如自己家里和办公地点的IP子网)可以访问,然后就可以通过该域名+端口进管理端,写作和发布文章和进行一些不涉及跨域的其他设置是没有问题的,这不会暴露内容前端的源站。


Ghost是一套开源的(博客)建站平台,这是一个持续更新的系列,用来列举一些官方文档和公开网络上尚未详细说明的问题与解决办法,您可以用标签 #Ghost 或搜索找到所有相关的文章。