Ghost 博客搭建超全指南
11 min read

Ghost 博客搭建超全指南

全方位指导你如果使用 Ghost 搭建你自己的博客,让你在网上更加优雅的分享知识。
Ghost 博客搭建超全指南

本篇是一个纯技术向的文章,需要你对计算机以及前端的知识进行一定的了解。一定会有人问:“都 2020 年了,做博客还有意义吗?”,其实这个意义看你怎么看待了。在现今这个流量社会,人们的关注点都被吸引在了微信公众号、微博、知乎等头部平台。如果你想在里面写作,那么相对的就要遵守规则。

而建立自己的网站,某种意义上来说就是为了追寻自由,可以被搜索引擎收录,可以与各式各样入口的人交流,被观察到。发展到现在,网站分为 静态网站动态网站内,最明显的区别就是是否用到了 数据库。有数据库就意味着有后台,就可以在线编辑,发布管理文章;但是对应的也需要很多其他的成本,比如说服务器。

Ghsot 简介

ghost-introduce
图1.ghost-introduce

Ghost 是一款基于 Node.js 语言和 MySql 数据库的个人博客系统。其设计主旨是简化个人网站发布以及网上出版的过程。创始人是 Wordpress 的前员工。从 2013 年发布第一个版本以来,到今年的 v3.0,功能越发的完善。如果你不喜欢 Wordpress 的臃肿,那 Ghost 无疑更加的适合你。

官方推荐配置:

  • Ubuntu 16.04,Ubuntu 18.04 或 Ubuntu 20.04
  • NGINX(支持 SSL 的最低版本为 1.9.5)
  • 一个支持版本Node.js
  • MySQL 5.7 或 8.0
  • Systemd
  • 至少有1GB内存的服务器
  • 注册域名

Ghost 安装

目前为止我尝试了三种安装方式:

  • 本地安装:适合自己玩,体验 Ghost;以及开发测试主题。
  • 服务器部署:需要服务器和域名。

本地安装

本地安装的官方教程:https://ghost.org/docs/install/local/

主要分为三步:

  1. 在本地下载一个官方推荐版本的 Node.js

2.   安装 Ghost-CLI

npm install ghost-cli@latest -g

安装完成后,可以运行 ghost help 查看支持的命令列表

3.   建立一个空的文件夹,安装 Ghost

首先建立一个空的文件夹,进入这个文件夹,运行以下命令:

ghost install local

安装完成后,可以访问 http://localhost:2368 浏览新站点。

也可以访问 http://localhost:2368/ghost 访问 Ghost 的后台。

ghost-local-install
图2.ghost-local-install

服务器部署

来到了这一步,相信你已经有一定的心里准备了,那么开始吧。

  • 我们要有一个自己的服务器,博主用的是阿里云。现在他们家也在进行双十一的活动,一年85元,三年只需 255 元(注意:仅限新用户)
  • 登陆服务器

现在要首先确定下你的系统是否为 Ubuntu 16.04,Ubuntu 18.04 或 Ubuntu 20.04,如果是那么恭喜你,可以按照官方教程一步一步走。

Ghost 官方教程:https://ghost.org/docs/install/ubuntu/

如果不是,那么有以下两个选择:(不过这两者是类似的,都是需要在 Nginx 这块需要自己手动配置)

  • 虽然是 Ubuntu 系统,但是已经安装了宝塔等面板,那么安装的时候会出现一些波折。不过幸运的是博主已经帮你踩了这些坑。
  • Centos 等非官方推荐版本,那么同样也要恭喜你,博主也已经帮你折腾完了,你只需要照着做就可以了。

安装步骤 CentOS:

1.安装必要的组件:

# Install NGINX
sudo apt-get install nginx
# 激活 ufw,允许 HTTP 和 HTTPS 连接
sudo ufw allow 'Nginx Full'

# Add the NodeSource APT repository for Node 12
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash
# Install Node.js
sudo apt-get install -y nodejs

# Install MySQL
sudo apt-get install mysql-server

os-software-version
图3.os-software-version

在进行接下来的步骤前,需要添加 Ghost 的数据库及所属用户。在下面的 Ghost 安装的过程中需要普通用户进行操作,而普通用户没有权限登陆 MySQL,需要我们先配置好。Centos 和 Ubuntu 也需要进行这个操作!

mysql -uroot -p
create database <数据库名称>;
create user <数据库用户名> identified by '<数据库密码>';
grant all privileges on <数据库名称>.* to <数据库用户名>@'localhost' identified by '<数据库密码>';
flush privileges;
exit

2.安装 Ghost-CLI

sudo npm install ghost-cli@latest -g

安装完成后,可运行命令 ghost help 查看命令列表。

3.安装 Ghost

出于安全考虑,在接下来的操作中不能使用 root 用户,所以我们要新建一个用户,把下面的 <user> 换成用户名(不要起名 ghos,容易起冲突)。

# Create a new user and follow prompts
adduser <user>

# Add user to superuser group to unlock admin privileges
usermod -aG sudo <user>

# Then log in as the new user
su - <user>

接着需要创建一个空文件夹,用来安装 Ghost。

# We'll name ours 'ghost' in this example; you can use whatever you want
sudo mkdir -p /var/www/ghost

# Replace <user> with the name of your user who will own this directory
sudo chown <user>:<user> /var/www/ghost

# Set the correct permissions
sudo chmod 775 /var/www/ghost

# Then navigate into it
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博客就可以进入网址访问。

注意:

System checks failed with message: 'Linux version is not Ubuntu 16 or 18'
Some features of Ghost-CLI may not work without additional configuration.
For local installs we recommend using `ghost install local` instead.
? Continue anyway? Yes #提示系统不是ubuntu,是否继续?当然
  • 还有个问题就是在安装的过程中会碰到下载失败的问题,再次安装就会提示
A SystemError occurred.

Message: Current directory is not empty, Ghost cannot be installed here.

#对应的解决办法是:
#只需要执行 rm -rf *,删除全部文件,然后再次执行安装命令即可;、
#如果还是提示目录非空的话,那就删除 .ghost-cli 文件

如果可以正常启动那么恭喜你,你已经可以访问你的博客了。如果不可以那么大概率是 Nginx 配置的问题。那么接下来我们继续

ghost-start
图4.ghost-start

Nginx 配置

博主遇到的情况是,在 Ubuntu 上安装宝塔面板,之后在面板里安装的 Ghost,但是由于宝塔面板安装的 Nginx 的默认位置与 Ghost 设置时的位置不一致,导致检测不到,无法自动配置 Nginx,所以需要我们手动设置 Nginx 的配置文件。

CentOS 情况类似,也是 Ghost 设置安装过程中无法检测,自动配置文件,都需要我们手动配置。

我们需要先运行 nginx -t 来检查下文件的路径,比如我的显示的是 /www/server/nginx/conf/nginx.conf

博主的由于是宝塔面板,所以需要在 /www/server/panel/vhost/nginx 下新建一个配置文件,填入以下内容:

如果你的不是宝塔面板,可以在 /etc/nginx/conf.d/ 下新建文件填入!

server {
    listen 80;
    listen [::]:80;

    server_name huozk.com; #你的域名

    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;

    }
    
    location ~ \.well-known{
        allow all;
    }

    client_max_body_size 50m;
}

填写完成后,只需重启下 Nginx 即可 systemctl restart nginx

SSL + HTTPS

如果你想为你的网站启用 SSL,那么就需要在 Nginx 中额外监听 443 端口,以及链接公钥和私钥。需要修改上述配置如下:

server {
    listen 80;
    listen 443 ssl;
    listen [::]:80;
    
    server_name huozk.com; #更改为你的域名
    ssl_certificate "/www/server/panel/vhost/ssl/huozk.com/_.huozk.com.crt";
    ssl_certificate_key "/www/server/panel/vhost/ssl/huozk.com/_.huozk.com.key";
    
    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;

    }
    
    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    client_max_body_size 50m;
}

到此,就大功告成了。你可以登录后台,跟着指引进行配置了。恭喜你,成为一名知识分享者!

ghost-succeed
图5.ghost-succeed

多个域名设置

一般来说,我们都会用顶级域名来设置进入我们的博客,但是同时也会设置 www.huozk.com 这种方式来做另一个入口,那么我们需要怎么来做呢?

重新配置:ghost config url https://www.huozk.com

为该域名申请证书:ghost setup nginx ssl

再把域名修改回来:ghost config url https://huozk.com

还需要建立 Nginx 的配置文件,内容与上面类似。

添加 301 跳转到顶级域名:

if ($ssl_protocol = "") {
    return 301 https://$host$request_uri;
}
if ($host != iiong.com) {
    return 301 $scheme://huozk.com$request_uri; #请注意这里的huozk.com替换你的域名。
}

重启 Nginx 服务systemctl restart nginx

开发测试主题环境搭建

如果你想从零开发一个新的主题,那么非常推荐你看官方主题开发文档:https://ghost.org/docs/api/v3/handlebars-themes/

如果你不想这么麻烦只想在官方主题的基础上修改下样式,那么可以按照以下步骤搭建环境:

下载主题源文件,上传到本地搭建的 Ghost 里面。

找到 D:\WebProjects\GHost\content\themes 进入里面。

你还需要在你的电脑上全局安装 YarnGulp

命令行进入主题文件夹中,运行:

# Install
yarn

# npm 包下载
npm install

如果你需要开发和测试主题,那么需要进入开发模式

# Run build & watch for changes
$ yarn dev

之后进行打包,执行命令后会打包到 dist/<theme-name>.zip ,现在你可以在你部署的博客里上传使用了。

yarn zip 

END

总的来说,Ghost 虽然没有 Wordpress 安装那么轻松,但是其简介大方的后台和主题,还是很让人值得尝试的。而且使用了之后确实比 Wordpress 速度快(不过也和服务器带宽等有关联)。

参考链接

  1. https://ghost.org/docs/install/ubuntu/
  2. https://ghost.org/docs/install/local/
  3. https://xiaoyc.com/2020/10/15/2020-10-build-website-with-ghost/
  4. https://www.techsir.com/a/2020/01/60604.html
  5. https://www.moonue.com/03/521/
  6. https://www.ldsun.com/https-wei-ghostshe-zhi-ssllian-jie/
  7. https://iiong.com/gost-blog-install-notes/