Ghost Blog安装笔记
Jaxson Wang / / 奇淫技巧 / 阅读量

Cap1 前言

本文在2020.07.18更新。

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

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

Cap2 安装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 <user> # ghost不允许root用户安装,所以需要新建个<user>用户
usermod -aG sudo <user> # 给予<user>用户为超级权限
su - <user> # 登录用户
sudo apt update
sudo apt upgrade # 更新软件
# sudo apt-get install gcc g++ make # 安装构建环境

这里的 <user> 用户名可以自己任意修改,例如 jaxsonubuntu 等。

但请不要使用 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依赖文件迁移过去

2020.07.18更新:

安装 Node.js 没有上面那么麻烦,直接执行下面命令就行了:

# 添加 Nodejs 12 源
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash
 
# 安装 Node.js
sudo apt-get install -y nodejs # 大陆服务器暂时别执行这一步,看看下面的内容

国内的机器安装可能比较慢,因为不可描述的原因导致的,如果着急的话可以使用下面的方法。

2020.07.18:

Ghost 3.24.0 版本开始放弃 Node.js 10 大版本,升级会报错:stdout maxBuffer exceeded ,所以解决方案升级 Node.js 12 的大版本号。

2020.07.18更新:

针对国内服务器修改 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

将里面的内容修改成:

deb https://mirrors.tuna.tsinghua.edu.cn/nodesource/deb_12.x bionic main
deb-src https://mirrors.tuna.tsinghua.edu.cn/nodesource/deb_12.x bionic main

保存后执行安装 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 镜像

# ghost-cli 使用 yarn 包管理器,所以进行源配置
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 镜像

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 18.04安装10.4版本的数据库:

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] http://mirrors.tuna.tsinghua.edu.cn/mariadb/repo/10.4/ubuntu bionic main'
sudo apt update
sudo apt install mariadb-server

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

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 unintall # 卸载原有 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服务

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 安装 ftp 服务上传修改主题

如果使用 sftp 服务来修改上传主题文件会出现权限不足的错误,如果有着频繁修改主题的需求需要额外安装 ftp 服务并且指定账号来达到读写操作效果。

sudo apt-get install vsftpd -y # 安装ftp服务
 
sudo useradd -d /var/www/ghost/ -s /usr/sbin/nologin <user> # <user> 是上面指定的账号
 
//设置该帐户密码:
sudo passwd <user>

先检查一下 nologin 的位置, 通常在 /usr/sbin/nologin 或者 /sbin/nologin

配置 vsftp

修改配置文件:

sudo vim /etc/vsftpd.conf

将配置文件中 anonymous_enable=YES 改为 anonymous_enable=NO

取消如下配置前的注释符号:

local_enable=YES
write_enable=YES
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
local_umask=002 # 务必修改 002 对应目录775 文件664 权限

保存退出后继续编辑 vsftpd.chroot_list 文件,将将 ftp 的帐户名 <user> 添加进去::

sudo vim /etc/vsftpd.chroot_list

修改 shell 配置:

sudo vim /etc/shells

如果该文件里没有 /usr/sbin/nologin 或者 /sbin/nologin (具体看当前系统配置) 则 追加进去,然后重启服务:

sudo service vsftpd restart

然后重启服务后登陆 ftp 软件上传文件即可。

如果上传、删除和修改文件出现失败的时候,绝大部分原因是权限问题,执行下面问题即可修复:

sudo chown -R <user>:<user> /var/www/ghost/
支付宝捐赠
请使用支付宝扫一扫进行捐赠
微信捐赠
请使用微信扫一扫进行赞赏
有 0 篇文章