从部署到思考,我的 Ghost 博客搭建手记
2021-09-20 12:00:00 Author: sspai.com(查看原文) 阅读量:30 收藏

Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改


为什么会选择 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。

域名解析

服务器

由于 Ghost 是动态博客,因此需要准备一台服务器。官方文档中推荐使用 RAM ≥ 1G、运行在 Ubuntu 16.04 / 18.04 / 20.04 系统的服务器上。除了基于 Node.js 运行,Ghost 官方还提供基于 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

安装流程

初步配置

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

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

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

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

# 新增普通用户,用户名需自行设定(除 ghost)
adduser 用户名

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

# 赋予用户 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 安装 Node.js。如果通过其它方式安装,需要留意 Node.js 版本 Ghost 只支持运行在 Node.js 12.x、14.x 两个大版本中。

# 通过 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 数据目录。

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

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

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

安装 Ghost-CLI。

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

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

前往网站文件夹安装 Ghost。

# 安装 Ghost
ghost install

进入安装流程。

# 进入 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 反向代理配置

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 博客首页

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

Ghost 博客配置 - 第一步

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

Ghost 博客配置 - 第二步

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

后台设置

Ghost 博客后台面板

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

Ghost 博客后台设置

关于 Ghost 的一些看法

Ghost 后台面板

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

Ghost 博客文章编辑

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

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

Ghost 博客插件拓展(Integrations)

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

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

Ghost 博客主题自定义

主题自定义方面,默认设置中只给到了站点 Logo、焦点颜色、Banner 底图的设置,更深层次的个性化修改,则需要修改主题的相关文件。GitHub、ThemeForest 上有一些比较好看的第三方主题,如 AttilaLieblingLondon-Grid,官方的主题商城内提供了 24 款免费主题,付费主题价格较高,相对来说 Ghost 的主题数量仍然偏少。

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

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

就我个人的需求来说,我认为不值得。一是 Ghost 的主题、插件拓展生态圈还未发展起来;其次,Ghost 数据导出仅支持 json 格式,相关的迁移工具如 oghosthexo-migrator-ghost 停更已久,迁移至 WordPressJekyllHugo 的工具虽然有更新,但跨程序之间的搬运并不是一件轻松事。第三点,也是最头疼的一点,Node.js 和 npm 的报错,看到密密麻麻的报错我都不想处理了。

相关阅读

> 下载少数派 客户端 、关注 少数派公众号 ,了解更妙的数字生活 🍃

> 想申请成为少数派作者?冲!

© 本文著作权归作者所有,并授权少数派独家使用,未经少数派许可,不得转载使用。

XavierWang

H! / 我的博客:Https://Xavier.Wang / 公众号:鸟之言语


文章来源: https://sspai.com/post/68855
如有侵权请联系:admin#unsafe.sh