> ## Content Index
> Fetch the complete content index at: https://xavier.wang/llms.txt
> Use this file to discover other available public pages before exploring further.

# Ghost Blog 部署指南
- URL: https://xavier.wang/131-ghost-install/
- Published: 2021-09-17T14:22:21.000Z
- Updated: 2021-09-20T12:32:04.000Z
- Description: 人生苦短，别玩 Ghost
- Author: 王虾虾
- Tags: 工具

## 为什么会选择 Ghost？

折腾博客将近 6 年了，尝试过 WordPress、Typecho、Ghost、Hexo、Gridea 等不少的博客程序。这些程序各有优缺点，WordPress 的高度个性化与可玩性值得称赞，但也给站点优化带来了问题；基于 Node.js 的 Hexo 搭配上 GitHub Pages，降低了博客搭建的门槛，但渲染速度、npm、跨平台都是逃不过的问题。

从体验上来说，我更偏向自托管的静态博客，数据在自己的服务器上，一定程度上保证用户对内容的所有权。因为对 Git 平台的操作不熟悉，加上 访问速度不佳，我将博客从 Hexo 迁移到了 Gridea，但后者长时间停更，以及主题数量偏少，我开始寻找下一个适合的博客程序。

3 月 16 日，Ghost 发布 4.0 版本，与先前 1.0、2.0 版本不同，Ghost 4.0 版本中新增了后台面板、订阅支持，同时也继承先前版本优秀的设计。或许，可以试试？

## 搭建前的准备

### 域名

通过自己的服务器搭建博客，通常需要绑定域名，关于选购与注册方面，在这里不做过多阐述。注册好域名后，在域名解析设置中，将域名解析至服务器 IP。

![域名解析](https://cdn.i2c.icu/2021-09/Ghost-DNS.jpg)

域名解析

### 服务器

由于 Ghost 是动态博客，因此需要准备一台服务器。官方文档中推荐使用 RAM ≥ 1G、运行在 Ubuntu 16.04 / 18.04 / 20.04 系统的服务器上。除了基于 Node.js 运行，Ghost 官方还提供[基于 Docker](https://ghost.org/docs/install/docker/) 运行的 Ghost Blog。

## 本机直接部署

- 系统：Ubuntu 21.04、Debian 11.0
- Nginx：nginx/1.18.0
- MySQL：8.0.26
- Node.js：v14.17.6
- Ghost：v4.9.4

![安装流程](https://cdn.i2c.icu/2021-09/Ghost-Install-Flow.jpg)

安装流程

### 初步配置

通过 SSH 或终端登入服务器，并切换至 root 用户，然后新增一个普通用户，用于安装 Ghost。

运行更新服务器中的软件。

```Bash
# 更新系统软件包
apt update && apt upgrade -y

```

运行 adduser 命令添加新普通权限的 Linux 用户，根据提示输入用户密码与其它信息。

```Bash
# 新增普通用户，用户名需自行设定（除 ghost）
adduser 用户名

```

为新增用户添加 sudo 权限，并将当前身份切换为该用户。

```Bash
# 赋予用户 sudo 权限
usermod -aG sudo 用户名
# 切换到普通用户
su - 用户名
```

### 安装网站环境

Ghost 未限制网站环境的安装方式，你可以使用 Nginx 或 Apache 运行前端，下文以官方文档介绍的安装方式为主。如需使用 LAMP 环境包 / LNMP 环境包 / OneinStack / 面板，需留意在安装 Ghost 环节，跳过 ghost-cli 自动配置 Nginx 与 SSL 环节，并手动建立网站，将反向代理部分的配置写入网站配置文件中。

从 Ubuntu 仓库安装 Nginx 与 MySQL 数据库。

```
# 从 Ubuntu 仓库中安装 Nginx 与 MySQL-Server
sudo apt install nginx mysql-server -y

```

MySQL 安装完成后，需要重设数据库 root 用户密码。

```
# 重置 MySQL root 密码
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
quit;

```

从 [NodeSource](https://github.com/nodesource/distributions) 安装 Node.js。如果通过其它方式安装，需要留意 Node.js 版本 Ghost 只支持运行在 Node.js 12.x、14.x 两个大版本中。

```Bash
# 通过 NodeSource 安装指定版本的 Node.js
curl -sL https://deb.nodesource.com/setup_14.x | sudo -E bash
sudo apt install nodejs -y

# 安装 Yarn
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
sudo apt update && sudo apt install yarn -y

# 假如服务器位于大陆区域，需要借助 cnpm 镜像提高 npm 与 yarn 依赖的安装速度，否则 ghost install 时，无法下载依赖会导致安装失败
sudo npm install -g cnpm --registry=https://registry.npm.taobao.org
sudo yarn config set registry https://registry.npm.taobao.org/

```

### 安装 Ghost

建立文件夹，配置好文件夹权限，下文以 `/var/www/ghost` 作为 Ghost 数据目录。

```Bash
# 新建 Ghost 数据目录文件夹
mkdir -p /var/www/ghost

# 设置文件夹权限
chown 用户名:用户名 -R /var/www/ghost
chmod 0775 -R /var/www/ghost

# 前往文件夹
cd /var/www/ghost

```

安装 Ghost-CLI。

```Bash
# 未配置 cnpm 加速源
sudo npm install ghost-cli@latest -g

# 配置了 cnpm 加速源
sudo cnpm install ghost-cli@latest -g

```

前往网站文件夹安装 Ghost。

```Bash
# 安装 Ghost
ghost install

```

进入安装流程。

```Bash
# 进入 Ghost 安装流程

# 检查系统环境
✔ Checking system Node.js version - found v14.17.6
✔ Checking logged in user
✔ Checking current folder permissions

# 此处如系统版本非 Ghost 官方文档推荐的，会询问是否继续安装，这里选择 Yes
? Continue anyway? Yes
System stack check skipped

# 检查软件环境
ℹ Checking system compatibility [skipped]
✔ Checking for a MySQL installation
✔ Checking memory availability
✔ Checking free space
✔ Checking for latest Ghost version
✔ Setting up install directory

# 下载 Ghost 本体、npm 与 yarn 依赖
# 假如服务器位于大陆区域，需要借助 cnpm 镜像提高 npm 与 yarn 依赖的安装速度，否则 ghost install 时，无法下载依赖会导致安装失败
✔ Downloading and installing Ghost v4.14.0

# 进入网站域名、MySQL 数据库、系统服务设置
✔ Finishing install process

# 输入网站绑定域名
? Enter your blog URL: http://xavier.wang

# 输入 MySQL 数据库服务器地址、用户名、密码、数据库名称
? Enter your MySQL hostname: localhost
? Enter your MySQL username: root
? Enter your MySQL password: [hidden]
? Enter your Ghost database name: db_ghost
✔ Configuring Ghost
✔ Setting up instance
+ sudo chown -R ghost:ghost /var/www/ghost/content
✔ Setting up "ghost" system user

# 如先前使用 MySQL root 用户登录，此处可以让 ghost-cli 自动创建一个属于 Ghost 数据库的用户
? Do you wish to set up "ghost" mysql user? Yes
✔ Setting up "ghost" mysql user

# 如果本机先前已有其它网站或需要使用自定义的网站环境，需要跳过自动配置 Nginx 与 SSL 证书
? Do you wish to set up Nginx? Yes
+ sudo mv /tmp/xavier-wang/xavier.wang.conf /etc/nginx/sites-available/xavier.wang.conf
+ sudo ln -sf /etc/nginx/sites-available/xavier.wang.conf /etc/nginx/sites-enabled/xavier.wang.conf
+ sudo nginx -s reload
✔ Setting up Nginx
# 选择是否通过 acme.sh 自动配置 SSL 证书
? Do you wish to set up SSL? Yes
ℹ Setting up SSL [skipped]

# 将 Ghost 绑定到 Systemctl 上
? Do you wish to set up Systemd? Yes
+ sudo mv /tmp/xavier-wang/ghost_xavier-wang.service /lib/systemd/system/ghost_xavier-wang.service
+ sudo systemctl daemon-reload
✔ Setting up Systemd
+ sudo systemctl is-active ghost_xavier-wang

# 启动 Ghost
? Do you want to start Ghost? Yes
+ sudo systemctl start ghost_xavier-wang
+ sudo systemctl is-enabled ghost_xavier-wang
+ sudo systemctl enable ghost_xavier-wang --quiet
✔ Starting Ghost

Ghost uses direct mail by default. To set up an alternative email method read our docs at https://ghost.org/docs/config/#mail

------------------------------------------------------------------------------

# 当显示这条信息时，表示 Ghost 已完成安装流程
Ghost was installed successfully! To complete setup of your publication, visit: http://xavier.wang/ghost/

```

在设置过程中，按照提示设置域名、数据库连接信息、SSL 证书、系统服务。使用「LAMP 环境包 / LNMP 环境包 / OneinStack / 面板」的用户需留意在安装 Ghost 环节，跳过 ghost-cli 自动配置 Nginx 与 SSL 环节，并手动建立网站，将反向代理部分的配置写入网站配置文件中。

```Nginx
# Nginx 反向代理配置

location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}

```

当提示 `Ghost was installed successfully` 时，表示 Ghost 安装成功，点击下方域名进入博客后台设置。

## 站点配置

### 初始化网站

![Ghost 博客首页](https://cdn.i2c.icu/2021-09/Ghost-Home.jpg)

Ghost 博客首页

在浏览器中输入域名，比如我绑定的是 xavier.wang，那么就输入 进入 Ghost 后台，进入配置环节。

![Ghost 博客配置 - 第一步](https://cdn.i2c.icu/2021-09/Ghost-Install-1.jpg)

Ghost 博客配置 - 第一步

设置网站信息、管理员用户名与密码。

![Ghost 博客配置 - 第二步](https://cdn.i2c.icu/2021-09/Ghost-Install-2.jpg)

Ghost 博客配置 - 第二步

完成设置，进入博客后台。

### 后台设置

![Ghost 博客后台面板](https://cdn.i2c.icu/2021-09/Ghost-Dashboard.jpg)

Ghost 博客后台面板

后台大致分为两个版块，左侧菜单栏与右侧面板。点击左下方的齿轮按钮，可以看到博客设置，如站点信息、主题、导航链接、用户、高级功能等。

![Ghost 博客后台设置](https://cdn.i2c.icu/2021-09/Ghost-Settings.jpg)

Ghost 博客后台设置

## 关于 Ghost 的一些看法

![Ghost 后台面板](https://cdn.i2c.icu/2021-09/Ghost-Dashboard.jpg)

Ghost 后台面板

Ghost 4.0 版本中首次集成了原生的会员管理与订阅功能，通过连接第三方支付服务，可以向注册用户提供付费内容、邮件订阅服务。在博客后台的 Dashboard 上，直观展示了当前的文章收入、注册会员数量、付费会员比例、邮件打开率等数据。

![Ghost 博客文章编辑](https://cdn.i2c.icu/2021-09/Ghost-Editing.jpg)

Ghost 博客文章编辑

Ghost 的编辑器原生支持实时渲染 Markdown 语法，并且还有与 Notion 编辑器类似的「Type '/' for commands」功能，可快捷插入多媒体内容，如图片、YouTube 视频、Twitter 推文等卡片。

在编辑器的文章发布设置中，可以直接设置文章摘录、分享样式、邮件订阅，这个功能点对于自媒体 / Newsletter 运营者十分友好，在发布文章的同时，可以完成社交媒体分享、邮件订阅发送、文章发布等动作，减少工作程序。

![Ghost 博客插件拓展（Integrations）](https://cdn.i2c.icu/2021-09/Ghost-Integrations.jpg)

Ghost 博客插件拓展（Integrations）

与 WordPress、Hexo 等博客平台相比，Ghost 会更注重写作与阅读，它在插件拓展、博客样式的个性化方面上会显得比较简陋，支持的插件（Integrations）会更多来自成熟的外部服务，以丰富读者阅读的内容。

但也有不足的地方，对于拓展博客自身的功能性上，更多要靠后期开发，比如文章搜索、云储存、图片压缩，对的，Ghost 没有默认搜索功能。

![Ghost 博客主题自定义](https://cdn.i2c.icu/2021-09/Ghost-Personizied.jpg)

Ghost 博客主题自定义

主题自定义方面，默认设置中只给到了站点 Logo、焦点颜色、Banner 底图的设置，更深层次的个性化修改，则需要修改主题的相关文件。GitHub、ThemeForest 上有一些比较好看的第三方主题，如 [Attila](https://github.com/zutrinken/attila)、[Liebling](https://github.com/eddiesigner/liebling)、[London-Grid](https://github.com/ChrisW-B/london-grid)，官方的主题商城内提供了 24 款免费主题，付费主题价格较高，相对来说 Ghost 的主题数量仍然偏少。

Ghost 博客相对于 WordPress 而言会更加简约，同时优秀的设计风格也会让人耳目一新。但 Ghost 是否值得推荐呢？

如果是对平台运行追求稳定的自媒体、Newsletter 运营团队来说，Ghost 或许是一个不错的选择，文章编辑器、会员管理、第三方服务可圈可点，Ghost 也提供了官方的付费托管服务 —— [Ghost Pro](https://ghost.org/pricing/)，让你专注于内容创作，以及加强与读者互动。

就我个人的需求来说，我认为不值得。一是 Ghost 的主题、插件拓展生态圈还未发展起来；其次，Ghost 数据导出仅支持 json 格式，相关的迁移工具如 [oghost](https://www.npmjs.com/package/oghost)、[hexo-migrator-ghost](https://github.com/jasonslyvia/hexo-migrator-ghost) 停更已久，迁移至 [WordPress](https://github.com/amayem/GhostJSON-to-WPXML)、[Jekyll](https://www.pgrs.net/2018-11/25/migrating-blog-from-ghost-to-jekyll/)、[Hugo](https://github.com/jbarone/ghostToHugo) 的工具虽然有更新，但跨程序之间的搬运并不是一件轻松事。第三点，也是最头疼的一点，Node.js 和 npm 的报错，看到密密麻麻的报错我都不想处理了。

人生苦短，别玩 Ghost。

## 相关阅读

- [WordPress 有力竞争者，高颜值全能平台：Ghost](https://sspai.com/post/65602)
- [Ghost 安装笔记](https://iiong.com/gost-blog-install-notes/)
- [How to install Ghost on Ubuntu](https://ghost.org/docs/install/ubuntu)
- [Ghost 博客数据自动备份和图片自动压缩](https://sspai.com/post/47479)
- [JaxsonWang / Ghost-Theme](https://github.com/JaxsonWang/Ghost-Theme)