Ghost Blog安装笔记

Jaxson Wang 奇淫技巧 阅读量

Cap1 前言

本文在2020.12.30更新。

大概用了接近三年的 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.04Ubuntu 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> 用户名可以自己任意修改,例如 jaxsonubuntu 等。

但请不要使用 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_dist_base_url https://npm.taobao.org/mirrors/sharp-libvips # sharp 镜像
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 sharp_dist_base_url https://npm.taobao.org/mirrors/sharp-libvips # sharp 镜像
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 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>

在这里我个人不推荐MySQL,推荐一个比MySQL更轻量级的数据库:MariaDB,更多特性搜索了解。

如果你更喜欢 MariaDB 也可以按照下面方法安装:

根据系统版本安装:MariaDB Ubuntu指导安装

例如Ubuntu 20.04安装10.5版本的数据库:

sudo apt-get install software-properties-common
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://mirrors.ustc.edu.cn/mariadb/repo/10.5/ubuntu focal main'
sudo apt update
sudo apt install mariadb-server

安装过程中会让你输入数据库密码,请根据自身情况输入即可。

下面进行设置 MariaDB 数据库密码:

sudo mysql_secure_installation

# 日志如下

ubuntu@VM-0-8-ubuntu:~ » sudo mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
haven't set the root password yet, you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password or using the unix_socket ensures that nobody
can log into the MariaDB root user without the proper authorisation.

You already have your root account protected, so you can safely answer 'n'.

Switch to unix_socket authentication [Y/n] Y
Enabled successfully!
Reloading privilege tables..
 ... Success!


You already have your root account protected, so you can safely answer 'n'.

Change the root password? [Y/n] Y
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] Y
 ... Success!

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

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 # 升级博客

如果遇到错误没有能力解决的,请在 ghost install -V 或者 ghost upgrade -V 执行中所有的命令贴上发送到我的邮箱或者评论中,这样我尽力为你解决问题。

Cap7 图片优化

图床使用的是 Ghost qiniu 图床:https://github.com/JaxsonWang/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"

这样应该就可以了。

喵~
Jaxson Wang
阅读此作者的更多文章
Nuxt.js学习笔记
Nuxt.js学习笔记

由于公司业务所需,再加上之前掌握Vue.js相关知识,正好趁着业务的需求,大致学习下Nuxt.js框架。 Nuxt.js是Vue.js通用框架,其实它就是Vue.js的SSR简化版,无非把配置调整更加简单。

7 分钟阅读
Hello,World
Hello,World

你好,欢迎来到我的新博客。

1 分钟阅读