前言
差不多一年半前的某天产生了“我要建个人网站”这个想法。在向好友们寻求意见的时候得到了“要不要用 Ghost 建你的博客?”的建议。日后反复对比了 Ghost 、 WordPress 等开源博客程序与 Medium/Tumblr/Blogger 等传统博客,认定了 Ghost 并开始做准备。然而准备工作一拖就是一年多,直到2017年的9月才付诸实施建成自己的博客。
时隔一年发现 Ghost 早已发布 1.0 版本,通过 Ghost-CLI 安装相当简便;Let's Encrypt 的部署也已经可以一键完成,只想让人感慨拖延真不是什么好习惯时间可以让问题不再是问题。
在此记录一下完整安装过程。
安装前的准备工作
1. VPS
- 1GB 内存
2. 域名
- 为 Blog.Asakawa.com 设置 DNS 解析记录
域名解析服务选择 CloudFlare
提前将域名解析到 VPS 的 IP 地址以方便部署 HTTPS
重要 如果希望一键启用 HTTPS 则不要使用 CloudFlare 的 CDN
3. 系统
- Ubuntu 16.04
Ghost 官方推荐使用 Ubuntu 16.04,个人用的是 Ubuntu 17.10。 - 一个非 root 用户
- MySQL
- Nginx
- Node V6 或更高
使用 Ghost-CLI 安装 Ghost
首先执行
apt update
apt upgrade
apt install -y build-essential
安装 Nginx
apt install -y nginx
ufw allow 'Nginx Full' #允许 Nginx 通过 ufw
安装 MySQL
如果不使用远程数据库需要安装 MySQL。
apt-get install mysql-server
mysql_secure_installation #进行 MySQL 安全检查,删除匿名用户、删除 Test 数据库、禁止远程登录等
mysql -u root -p
mysql> CREATE DATABASE ghost; #创建名为 ghost 的数据库
mysql> exit
运行 Ghost 需要创建一个 MySQL 用户,可以在之后的安装过程中一并完成设置。
安装 Node.js 和 Ghost-CLI
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
apt-get install -y nodejs
npm i -g ghost-cli
安装 ghost-cli
时可能会报错,不过实际操作下来后续步骤没受到什么影响。
安装 Ghost
adduser <user> #创建一个非 root 用户
usermod -aG sudo <user>
由于 Ghost-CLI 运行时会自动创建 ghost 用户,所以在这里创建的非 root 用户要另选用户名
mkdir -p /var/www/ghost #创建安装目录
chown [user]:[user] /var/www/ghost #授权
cd /var/www/ghost
su <user>
在目录 /var/www/ghost 下安装 Ghost
$ ghost install
Ghost 将会自动安装。
系统不是Ubuntu 16.04,是否继续安装?
Y
安装完成后按提示输入
域名
https://blog.asakawa.com/
MySQL主机
localhost 或者远程主机
用户名
root 或者其他有权限的用户
密码
上述用户的密码
数据库名
为 Ghost 创建一个新的数据库
之后会依次询问
是否为 Ghost 设置 MySQL 用户
如果没有自行创建可输入Y
,为 Ghost 创建新的 MySQL 用户。
是否设置Nginx
Y
是否设置SSL
N
Ghost-CLI 会自动设置 Nginx 的配置。如果这里选择设置 SSL,Ghost-CLI 会使用 acme.sh 申请 Let's Encrypt 证书并自动添加到 Nginx 的配置中。
完善 Ghost 的配置
vim /var/www/ghost/config.production.json
可以看到刚刚的url
和database
等设置,这里需要修改的是mail
部分使用 Mailgun 发送 Ghost 的邮件,当然也可以使用其他邮件服务。
"mail": {
"from": "[email protected]",
"transport": "SMTP",
"options": {
"service": "Mailgun",
"auth": {
"user": "[email protected]",
"pass": "password"
}
}
},
保存退出,
sudo ghost restart
重启应用设置。
到此为止 Ghost 的安装已经完成,访问 asakawa.org 可以看到 Ghost 登陆面板,在第一时间通过 asakawa.org/ghost/ 完成主用户注册。
设置 SSL
此前由于安全性原因,通过 certbot-nginx
签发 Let's Encrypt 证书被暂停,目前已经修复可以正常使用。
最后要做的是申请 Let's Encrypt 证书为网站启用 HTTPS。
Certbot 提供了 Nginx 插件,非常简单就能完成 Let's Encrypt 证书的部署,管理也很方便。没有使用 Ghost-CLI 来配置 SSL 是因为除了 Ghost 还想要在主机上尝试搭建其他网站。
首先安装 Certbot
和 Certbot-nginx
插件,
apt-get update
apt-get install software-properties-common
add-apt-repository ppa:certbot/certbot
apt-get update
apt-get install python-certbot-nginx
接下来只需要执行
certbot --nginx
Certbot 会自动读取 Nginx 设置,可以按提示选择要验证的域名或者直接验证所有域名。
证书申请完成后会依次询问
是否直接为 Nginx 添加 SSL 设置
Y
是否设置 HTTP 自动跳转为 HTTPS
Y
执行
systemctl restart nginx
再访问 Ghost 即可看到绿锁。
测试 Certbot 的证书续期能否运行
certbot renew --dry-run
提示正确后就可以为设置证书的定时续期了。
执行
crontab -e
添加
0 4 1 * * certbot renew #每月自动续期
保存退出
到此为止完成启用 HTTPS 的设置。
吃一堑长一智的插曲
Ghost-CLI 与 LNMP 一键包有冲突。最开始知识有限,排查了多次才意识到这个问题。
特别感谢
Higan 向我推荐了 Ghost
参考: