Cap1 前言
本文在2023.11.09更新。
目前
Ghost
已经升级到 5.x 大版本了。
大概用了接近三年的 WordPress 博客平台,因为诸多原因放弃了它,目前看好的依然是Ghost平台,现在版本已经更新到 Version 2,本地测试下的确不错,所以写下这篇文章。
由于 Version 2 还没好很好的解决从 WordPress 过渡,所以我放弃原来的文章转移并且转移到 Hexo博客 上。目前博客当作新博客来写作吧。
Cap2 安装Node.js环境
目前主机配置是腾讯云低配机:1 CPU/1G RAM/1Mbps/40G ROM
,系统是 Ubuntu 20.04
。关于系统脚手架只支持:Ubuntu 16.04
, Ubuntu 18.04
或 Ubuntu 20.04
。Ghost博客需要在 Node.js
环境下运行,查看Ghost文档有了自己脚手架:Ghost-Cli,所以很大的程度上比之前方便多了。
nvm是一个nodejs版本管理的工具,为什么需要nvm?nodejs版本迭代很快,而且转移包依赖很麻烦,总之nvm解决很对版本问题。具体可以查看Github的说明:nvm。
由于 Ghost 不允许 root 安装,所以需要新建一个普通的账户:
adduser <user> # ghost不允许root用户安装,所以需要新建个<user>用户
usermod -aG sudo <user> # 给予<user>用户为超级权限
su - <user> # 登录用户
sudo apt update
sudo apt upgrade # 更新软件
这里的
<user>
用户名可以自己任意修改,例如jaxson
、ubuntu
等。但请不要使用
ghost
作为用户名,因为和ghost-cli
用户名产生冲突。
2020.12.31更新:
安装 Node.js
没有上面那么麻烦,直接执行下面命令就行了:
# 添加 Nodejs 14 源
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash
# 安装 Node.js
sudo apt-get install -y nodejs # 大陆服务器暂时别执行这一步,看看下面的内容
国内的机器安装可能比较慢,因为不可描述的原因导致的,如果着急的话可以使用下面的方法。
2020.12.31更新:
针对国内服务器修改 Node.js
源:
sudo cp /etc/apt/sources.list.d/nodesource.list /etc/apt/sources.list.d/nodesource.list.bak # 备份
sudo vim /etc/apt/sources.list.d/nodesource.list
将里面的内容修改成,注意系统代号 focal
:
deb https://mirrors.ustc.edu.cn/nodesource/deb/node_14.x focal main
deb-src https://mirrors.ustc.edu.cn/nodesource/deb/node_14.x focal main
参考文档:中国科学技术大学 Node 源
保存后执行安装 Nodejs
:
sudo apt update
sudo apt-get install -y nodejs # 安装 Node.js
设置npm
镜像源(非中国大陆机器不用设置):
npm config set registry https://r.npm.taobao.org # npm 镜像替换为淘宝npm节点
npm config set disturl https://npm.taobao.org/dist # node-gyp 编译依赖的 node 源码镜像
npm config set node_sqlite3_binary_host_mirror https://npm.taobao.org/mirrors # sqlite3 镜像
npm config set sqlite3_binary_site https://npm.taobao.org/mirrors/sqlite3/
npm config set sharp_binary_host https://npmmirror.com/mirrors/sharp
npm config set sharp_libvips_binary_host https://npmmirror.com/mirrors/sharp-libvips
sudo npm install -g npm # 更新 npm
# ghost-cli 使用 yarn 包管理器,所以进行源配置
sudo npm install -g yarn
yarn config set registry https://r.npm.taobao.org # yarn 镜像替换为淘宝npm节点
yarn config set disturl https://npm.taobao.org/dist # node-gyp 编译依赖的 node 源码镜像
yarn config set node_sqlite3_binary_host_mirror https://npm.taobao.org/mirrors # sqlite3 镜像
yarn config set sharp_binary_host https://npmmirror.com/mirrors/sharp
yarn config set sharp_libvips_binary_host https://npmmirror.com/mirrors/sharp-libvips
yarn config set sqlite3_binary_site https://npm.taobao.org/mirrors/sqlite3/ # sqlite3 镜像
Cap3 安装Nginx环境
如果你需要SSL
配置需要NGINX 1.9.5
或更高版本,当然你可以选择下载Nginx源码进行编译安装,省事可以直接执行:
sudo apt-get install nginx
nginx -v # 输出版本号
如果ufw已激活,则防火墙允许HTTP和HTTPS连接,所以打开防火墙:
sudo ufw allow 'Nginx Full'
Cap4 安装数据库
Ghost安装数据库推荐的是MySQL
:
sudo apt install mysql-server
如果运行的是Ubuntu 18.04,则需要输入密码以确保MySQL与Ghost-CLI兼容:
# 进入数据库管理
sudo mysql
# 执行下列语句进行修改数据库密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '这是你要替换的密码';
# 退出数据库管理
quit;
# 退出mysql用户并且登录用户账户
su - <user>
不推荐安装 MariaDB
是因为不支持了,建议使用 MySQL
,如果使用 MySQL8.x
大版本内存不足可以看看下面的解决方案。
Cap5 安装 Ghost-Cli & Ghost
sudo npm install ghost-cli@latest -g # 安装Ghost脚手架
创建网站目录:
# 创建ghost文件夹的网站目录,这个名字可以自己随便定义
sudo mkdir -p /var/www/ghost
# 使文件夹拥有权限,<user>是当前用户名
# 例如当前用户名是ubuntu,那么应该是:sudo chown ubuntu:ubuntu /var/www/ghost
sudo chown <user>:<user> /var/www/ghost
# 设置读写权限
sudo chmod 775 /var/www/ghost
# 定位
cd /var/www/ghost
# 进行Ghost博客平台安装
ghost install
安装过程根据主机性能来决定,下面是选项配置讲解:
Enter your blog URL:
博客展示地址,格式:http(s):(www.)example.com
,不支持ip地址。Enter your MySQL hostname:
数据库主机地址,回车默认是localhost
。Enter your MySQL username: / Enter your MySQL password:
数据库用户名/密码,上面安装的数据库用户名是root
,密码是自己设置的。Enter your Ghost database name:
Ghost博客数据库名Do you wish to set up "ghost" mysql user?
设置数据库用户名为ghost
,这个为了避免权限太大导致数据瞎搞,Ghost官方推荐是y
。Do you wish to set up Nginx?
自动化Nginx,推荐y
。Do you wish to set up SSL?
配置SSL
证书,推荐y
,如果你有证书问题,请查看文章最下面的问题。Enter your email (For SSL Certificate):
个人邮箱,配置ssl证书需要的邮箱地址。Do you wish to set up Systemd?
使用ghost进程管理工具,推荐y
,个人觉得海星。Do you want to start Ghost?
启动Ghost博客就可以进入网址访问。
Cap6 异常解决
如果在安装 Ghost
过程中经常性卡住,就需要一些特殊的方法,例如脚手架经常在第五步卡住,可以停止服务删除安装目录下所有文件重新执行:
ghost uninstall # 卸载原有 ghost 程序
sudo rm -rf /var/www/ghost/*
npm cache clean --force # 清空缓存
ghost install -V # -V 是把所有的安装日志打印到控制台,方便查看安装日志 不过大量的日志输出可能导致安装失败,所以在特殊情况下使用。
然后大部分安装或者升级的时候卡在:
node-pre-gyp WARN Using request for node-pre-gyp https download
如果卡在这边基本上是下载 sqlite3
卡住了,所以需要设置镜像:
npm config set registry https://r.npm.taobao.org # npm镜像替换为淘宝npm节点
npm config set disturl https://npm.taobao.org/dist # node-gyp 编译依赖的 node 源码镜像
npm config set node_sqlite3_binary_host_mirror https://npm.taobao.org/mirrors # sqlite3 镜像
ghost install -V # 重新安装
ghost upgrade -V # 升级博客
如果这样再不行建议大家安装 tbify
这个插件:
npm install -g tbify
tbify ghost install
插件详细介绍:https://github.com/fjc0k/tbify
如果遇到错误没有能力解决的,请在 ghost install -V
或者 ghost upgrade -V
执行中所有的命令贴上发送到我的邮箱或者评论中,这样我尽力为你解决问题。
Cap7 图片优化
图床使用的是 Ghost qiniu 图床:https://github.com/JaxsonWang/Ghost-Theme/tree/master/Ghost-QiNiu-Store
之前使用别人开源的图床插件,但是升级到
v3
版本后出现各种问题,无奈之下自己动手开发一套了,支持最新版。
例如在/var/www/ghost/content/adapters
文件下新建个storage
文件夹
cd /var/www/ghost/content/adapters/storage # 定位
git clone https://github.com/JaxsonWang/Ghost-QiNiu-Store.git qn-store # 拉取源码
cd qn-store # 定位
npm install # 安装模块依赖
然后打开/var/www/ghost/config.production.json
文件,添加代码:
{
// ...
"storage": {
"active": "qn-store",
"qn-store": {
"accessKey": "your access key", // https://portal.qiniu.com/user/key获取AK密匙
"secretKey": "your secret key", // https://portal.qiniu.com/user/key获取SK密匙
"bucket": "your bucket name", // 存储对象空间名字
"domain": "http://xx.xx.xx.glb.clouddn.com", // 七牛CDN地址
"format": "${year}/${month}/${name}${ext}"
}
}
// ...
}
然后重启Ghost:
cd /var/www/ghost
ghost restart
Cap8 SSL错误
如果你域名设置@
域名例如:https://iiong.com
,访问是没有问题,但如果是访问www.iiong.com
就会报错,如何解决这个问题呢:
-
重新配置:
ghost config url https://www.mydomain.com
-
执行
ghost setup nginx ssl
-
再修改回来:
ghost config url https://mydomain.com
-
打开
/var/www/ghost/system/files/
下的俩个www.*.conf
文件,添加301跳转到顶级域名代码:if ($ssl_protocol = "") { return 301 https://$host$request_uri; } if ($host != iiong.com) { return 301 $scheme://iiong.com$request_uri; #请注意这里的iiong.com替换你的域名。 }
-
重启
sudo nginx -s reload
服务
如果
/var/www/ghost/system/files/
文件夹不存在,请在/etc/nginx/sites-available
目录下修改文件。
Cap9 SSL 续费
参考:Ghost Let's Encrypt 得知:
/etc/letsencrypt/acme.sh --home "/etc/letsencrypt"
是证书管理目录,根据 acme.sh
得知手动续签执行:
/etc/letsencrypt/acme.sh --cron --home "/etc/letsencrypt"
不过我这个告知没有 root
权限:
sudo /etc/letsencrypt/acme.sh --cron --home "/etc/letsencrypt"
又被告之不推荐使用 sudo
执行,可以强制忽略:
sudo /etc/letsencrypt/acme.sh --cron --force --home "/etc/letsencrypt"
这样应该就可以了。
Cap10 内存不足
如果你的系统一直提示系统内存不足请参考:腾讯云开启 swap 分区
Cap11 自动化备份
如果需要自动化备份请参考:Ghost 实现自动化备份
Cap12 权限操作不足等问题
这个问题好几次遇到过了,但一直没有做总结,这个操作一般出自于 ghost 升级或者对 ghost 一些操作,例如重启、开启和关闭等,如果进行上列操作则会报错:
+ sudo systemctl is-active ghost_iiong-com
✔ Checking system Node.js version - found v14.21.3
✔ Ensuring user is not logged in as ghost user
✔ Checking if logged in user is directory owner
✔ Checking current folder permissions
✖ Checking folder permissions
✖ Checking file permissions
✖ Checking content folder ownership
✔ Checking memory availability
✔ Checking free space
One or more errors occurred.
1) Checking folder permissions
Message: Command failed: /bin/sh -c find ./ -type d ! -perm 775 ! -perm 755
find: ‘./content/themes/pomelo’: 权限不够
然后提示让你运行:
sudo find ./ ! -path "./versions/*" -type f -exec chmod 664 {} \;
# 或者
ghost setup linux-user systemd
依然没有效果,报错还是和上面一样,其实这个问题就是 Ghost 根目录权限不对导致的:
ubuntu@VM-4-8-ubuntu:/var/www/iiong.com$ ls -l
总用量 16
-rw-rw-r-- 1 ubuntu ubuntu 1235 Mar 29 20:32 config.production.json
drwxrwxr-x 12 ubuntu ubuntu 4096 Mar 24 17:11 content
lrwxrwxrwx 1 ubuntu ubuntu 34 Mar 29 20:32 current -> /var/www/iiong.com/versions/5.40.2
drwxrwxr-x 3 ubuntu ubuntu 4096 Mar 28 21:46 system
drwxrwxr-x 5 ubuntu ubuntu 4096 Mar 29 20:20 versions
按照官方默认的权限应该是:
ubuntu@VM-4-8-ubuntu:/var/www/iiong.com$ ls -l
总用量 16
-rw-rw-r-- 1 ubuntu ubuntu 1235 Mar 29 20:32 config.production.json
drwxrwxr-x 12 ghost ghost 4096 Mar 24 17:11 content
lrwxrwxrwx 1 ubuntu ubuntu 34 Mar 29 20:32 current -> /var/www/iiong.com/versions/5.40.2
drwxrwxr-x 3 ghost ghost 4096 Mar 28 21:46 system
drwxrwxr-x 5 ghost ghost 4096 Mar 29 20:20 versions
所以改回去就完事了:
sudo chown ghost:ghost ./content
sudo chown ghost:ghost ./system
sudo chown ubuntu:ubuntu ./versions