前言

大概用了接近三年的WordPress博客平台,因为诸多原因放弃了它,目前看好的依然是Ghost平台,现在版本已经更新到Version 2,本地测试下的确不错,所以写下这篇文章。

由于Version 2还没好很好的解决从WordPress过渡,所以我放弃原来的文章转移并且转移到Hexo博客上。目前博客当作新博客来写作吧。

安装Node.js环境

目前主机配置是腾讯云低配机:1 CPU/1G RAM/1Mbps/40G ROM,系统是Ubuntu 16。Ghost博客需要在Ubuntu系统Node.js环境下运行,查看Ghost文档有了自己脚手架:Ghost-Cli,所以很大的程度上比之前方便多了。

nvm是一个nodejs版本管理的工具,为什么需要nvm?nodejs版本迭代很快,而且转移包依赖很麻烦,总之nvm解决很对版本问题。具体可以查看Github的说明:nvm

由于Ghost不允许root安装,所以需要新建一个普通的账户:

adduser ubuntu # ghost不允许root用户安装,所以需要新建个ubuntu用户
usermod -aG sudo jaxson # 给予ubuntu用户为超级权限
su - ubuntu # 登录用户

sudo apt update
sudo apt upgrade # 更新软件

请不要使用ghost作为用户名,因为和ghost-cli用户名产生冲突。

安装NVM Node.js 版本控制

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
source ~/.bashrc #生效配置
nvm --version #出现版本号则安装成功

使用方法文档,根据文档我们需要进行一系列特定的配置并且按照Nodejs:

export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node #设置nodejs二进制文件镜像点为阿里淘宝镜像
source ~/.bashrc
nvm install 8.12.0 64 #安装版本8.12.0的64位版本
nvm use 8.12.0 #使用该版本
node -v
npm config set registry https://registry.npm.taobao.org #npm镜像替换为淘宝npm节点
npm config get registry #配置后可通过下面方式来验证是否成功
 
nvm install 8.12.0 --reinstall-packages-from = 8.11.0 #升级8.12.0版本并且将8.11.0依赖文件迁移过去

安装Nginx环境

如果你需要SSL配置需要NGINX 1.9.5或更高版本,当然你可以选择下载Nginx源码进行编译安装,省事可以直接执行:

sudo apt-get install nginx
nginx -v # 输出版本号

如果ufw已激活,则防火墙允许HTTP和HTTPS连接,所以打开防火墙:

sudo ufw allow 'Nginx Full'

安装数据库

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,推荐一个比MySQL更轻量级的数据库:MariaDB,更多特性搜索了解。

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

例如Ubuntu 18.04安装10.3版本的数据库:

sudo apt-get install software-properties-common
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] https://mirrors.shu.edu.cn/mariadb/repo/10.3/ubuntu bionic main'
sudo apt update
sudo apt install mariadb-server

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

安装Ghost-Cli & Ghost

sudo npm install ghost-cli@latest -g # 安装脚手架

创建网站目录:

# 创建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

安装过程根据主机性能来决定,下面是选项配置讲解:

  • Blog URL: 博客展示地址,格式:http(s):(www.)example.com,不支持ip地址。
  • MySQL hostname: 数据库主机地址,回车默认是localhost
  • MySQL username / password: 数据库用户名/密码,上面安装的数据库用户名是root,密码是自己设置的。
  • Ghost database name: Ghost博客数据库名
  • Set up a ghost MySQL user?(Recommended) 设置数据库用户名为ghost,这个为了避免权限太大导致数据瞎搞,Ghost官方推荐是y
  • Set up NGINX? (Recommended) 自动化Nginx,推荐y
  • Set up SSL? (Recommended) 配置SSL证书,推荐y,如果你有证书问题,请查看文章最下面的问题。
  • Enter your email 个人邮箱,配置ssl证书需要。
  • Set up systemd? (Recommended) 使用ghost进程管理工具,推荐y,个人觉得海星。
  • Start Ghost? 启动Ghost博客就可以进入网址访问。

图片优化

图床使用的是Ghost qiniu图床:https://github.com/minwe/qn-store

例如在/var/www/ghost/content/adapters文件下新建个storage文件夹

cd /var/www/ghost/content/adapters/storage # 定位
git clone https://github.com/Minwe/qn-store.git # 拉取源码
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", // 存储对象空间名字
      "origin": "http://xx.xx.xx.glb.clouddn.com", // 七牛CDN地址
      "fileKey": {
        "safeString": true,
        "prefix": "YYYYMM/"
      }
    }
  }
  // ...
}

然后重启Ghost:

cd /var/www/ghost
ghost restart

SSL错误

如果你域名设置@域名例如:https://iiong.com,访问是没有问题,但如果是访问www.iiong.com就会报错,如何解决这个问题呢:

  • 重新配置:ghost config url https://www.mydomain.com
  • 执行ghost setup nginx ssl
  • 再修改回来:ghost config url https://mydomain.com
  • 打开/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服务