本文是一篇技术博文,主要记录使用 Ghost 搭建网站 落日间 Sunset 的全过程。这是我和朋友叶梓涛一起搭建的创作空间,网站域名中的 Paidia 就意为古希腊语中「游戏」。

詹姆斯·卡斯在《有限与无限的游戏》中向我们展示了世界上两种可能的游戏。有限的游戏,其目的在于赢得胜利;无限的游戏,却旨在让游戏永远进行下去。有限的游戏在边界内玩,无限的游戏玩的就是边界。
有限的游戏,规则的存在是为了结束游戏。无限的游戏,人的存在是为了延续游戏。

之前听到一句很有意思的话说,“中国的互联网消灭了 url ”。做独立站点、写博客的人越来越少,头部的 app 吸纳了越来越多的流量。微信公众号、知乎、喜马拉雅、得到等这样的头部平台,在上面的内容创作就逐渐变成有限的游戏。你需要这个流量,自然也就需要遵守规则。

而建立自己的网站,某种程度上是互联网时代的特权,却需要一定的知识门槛和技术门槛。从网站的使用角度来说,可以分为静态网站动态网站,其主要区别是是否用到了数据库,有数据库功能就意味着有“后台”,就可以在线新建、编辑、发布文章,使用起来比较方便。但方便的背后是额外的成本付出,这种方案通常需要自己去租服务器。这里我用的是腾讯云的服务。

Ghost 安装

Ghost 是一个基于Node.js开发的免费开源博客平台,它有完整的后台,可以集成各种插件。官网上可以购买它的提供的全套服务,最基础版的价格是 $29 / 月,折合人民币大概 ¥2000 / 年,有点小贵。但它同时又是开源的,只要你愿意自己折腾,也可以达到同样的效果。

所以这篇文章也许就价值 2000 元哈哈 O(∩_∩)O~

确认 Ghost 安装模式

这里需要注意的 ghost 有两种安装方式:一种是本地的,适合自己玩;另一种是正式的,适合部署。

  1. 如果你还没有申请服务器,只是想在本地体验下 Ghost 是什么,那其实推荐本地安装,比较方便。
  2. 如果你吃下了这发安利,100%笃定要把它部署上线,那就直接走正式部署即可,但要注意所有后续的命令都需要在服务器上运行。

请在此做出尊贵的选择,你的选择将决定故事的走向(哈哈误)。

本地安装指引

本地安装的官方教程如下: https://ghost.org/docs/install/local/

其实也很简单,只需要执行以下两行命令即可:

1
2
npm install ghost-cli@latest -g
ghost install local

第二个命令执行之前,需要先 cd 到需要安装的一个空目录下。安装成功的话,提示如下:

2020-08-Graph

出现这个就说明完事啦!浏览器打开链接,按照提示步骤走就可以了。

如果说还可能发生什么意外情况的话,那就是第一步没成功,那说明你还没装 npm。

不会吧?不会吧?这年头还有人没装 npm 啊?太不可思议了吧!
哈开玩笑,如果真是这样,可以移步 廖雪峰的博客

远程部署安装指引

恭喜你!勇士!你选择一条艰难的、富有挑战的道路!就让我来教给勇士打败怪物的技巧 ~

这时需要确认一下你的服务器上运行的系统是什么?

  • 如果是 Ubuntu 16.04 or Ubuntu 18.04,那么恭喜你!这是 Ghost 官方支持的版本,照着教程走即可
  • 如果是 CentOS 一类的,那么很遗憾,这并不是 Ghost 官方支持的版本。但也不必担心,因为你遇到了这篇博文,博主已经把这条路上遇到的坑都趟过一遍了,也是可以安装的。
  • 如果你也不知道,那么就 … 继续吧 …

远程部署的官方教程如下: https://ghost.org/docs/install/ubuntu/

以下安装步骤,适用于 CentOS 的系统,特此声明。

安装 nodejs nginx

安装必要的组件

1
2
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash
sudo yum install nodejs nginx

2020-08-Graph

接着安装 Ghost-CLI,CLI 的全程是 Command Line Interface,即把命令行当遥控器,可以控制 Ghost 的开启和关闭。

1
sudo npm install ghost-cli@latest -g

最后出于安全性考虑,不能使用 root 用户,需要再建一个用户,把下面的 <user> 替换成用户的名字(随便起,但是不要起名 ghost):

1
2
3
4
5
6
7
8
9
10
11
# Create a new user and follow prompts
adduser <user>

# Add user to superuser group to unlock admin privileges
usermod -aG wheel <user>

# Set <user>'s password
passwd <user>

# Then log in as the new user
su - <user>

安装 ghost

先给 Ghost 建个家(目录),配置好钥匙(权限)。

1
2
3
4
5
6
7
8
9
10
11
# We'll name ours 'ghost' in this example; you can use whatever you want
sudo mkdir -p /var/www/ghost

# Replace <user> with the name of your user who will own this directory
sudo chown <user>:<user> /var/www/ghost

# Set the correct permissions
sudo chmod 775 /var/www/ghost

# Then navigate into it
cd /var/www/ghost

然后使用如下命令安装:

1
2
# Run the install process
ghost install --db=sqlite3

这里我把数据库设置成了 sqlite3,默认是 MySQL,但 MySQL 还要自己配置,太麻烦。
正常来说这样就可以装好了,如果已经装完但是依旧不能访问的话,可以运行 ghost setup 再配置一遍。

启动 ghost 服务

启动的命令是 ghost start,查看状态的命令是 ghost status,如下:

2020-08-Graph

配置 Nginx 反向代理

不知为啥,ghost 并不是那么兼容 CentOS,比如它无法识别 nginx 安装位置,这就需要手动配置了。

先运行 nginx -t 来检查下配置文件的路径,我这里显示的是 /etc/nginx/nginx.conf

然后再 /etc/nginx/conf.d/ 下建立如下的配置文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# File ghost.conf
server {
listen 80;
listen [::]:80;

server_name xpaidia.com; #你的域名

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;

}

client_max_body_size 50m;
}

然后重启 nginx 服务即可 systemctl restart nginx

配置 SSL + HTTPS

因为这个域名配置了默认 https,所以需要在 nginx 中额外监听443端口,这是需要修改上述配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# File ghost.conf
server {
listen 80;
listen 443 ssl;
listen [::]:80;

server_name xpaidia.com; #你的域名
ssl_certificate "/etc/pki/nginx/secret.crt";
ssl_certificate_key "/etc/pki/nginx/private/secret.key";

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;

}

client_max_body_size 50m;
}

secret.crtsecret.key 分别是公钥和私钥,具体如何申请可以参考: 全站 HTTPS 方案

Ghost 使用

在浏览器打开,就会看到这样的界面,然后就照着指引注册账号,就可以进入后台配置啦。

2020-08-Graph

参考资料: