前言
“各位小伙伴想不想要一个专自己的简单,高级,个性化的博客呢?但又觉得WordPress太复杂,第三方平台广告太多还不受自己控制?
那你来对地方了。我是ping,今天这期视频,我就手把手教你,如何从零开始,用一个最简单、最专业的方式,在你自己服务器上搭建一个Ghost博客。
Ghost是一个开源博客平台,它极致简洁,速度快得飞起,而且天生就为付费订阅和新闻通讯设计,是真正为写作者打造的工具。
各位小伙伴不用担心过程会很复杂,因为up准备的是手把手教程。你只需要跟着我做,全程都会详细讲解参数配置,各个坑已经探好了,没啥基础也可以部署好,理解好各个配置项,听完之后你就可以成为一个合格的Ghost站主了。
视频真的非常详情,所以时长较长,已经完成分段,特别是对Ghost的使用说明!!,各位小伙伴可以选择分段观看。
ghost安装教程
服务器配置说明:
安装流程

模块
安装docker
见本站docker安装教程:https://halo.blog360.sbs/archives/dockeran-zhuang-jiao-cheng
启动容器
配置docker-compose.yml文件
version: "3.1"
services:
ghost:
image: ghost:latest
restart: always
ports:
- 80:2368
environment:
# 配置sqlite3 数据库
#database__client: sqlite3
#database__connection__filename: /var/lib/ghost/content/data/ghost.db
# 配置mysql 数据库
database__client: mysql
database__connection__host: db
database__connection__user: root
database__connection__password: admin@11.com
database__connection__database: ghost
# this url value is just an example, and is likely wrong for your environment!
# 指定的宿主机暴露的地址,在生产环境,要填写线上的部署的域名地址
url: https://test.blog360.sbs
volumes:
- /opt/ghost/content:/var/lib/ghost/content
- /opt/ghost/config.production.json:/var/lib/ghost/config.production.json
#- /opt/ghost/versions:/var/lib/ghost/versions
# 配置mysql 数据库
db:
image: mysql:8.0
restart: always
environment:
MYSQL_ROOT_PASSWORD: admin@11.com
volumes:
- /opt/ghost/mysql/conf:/etc/mysql/conf.d # 配置目录
- /opt/ghost/mysql/data:/var/lib/mysql # 数据目录
配置config.production.json文件,执行 docker cp ghost(容器名称或者id):/var/lib/ghost/config.production.json /opt/ghost/config.production.json 拷贝到宿主机的文件
{
"url": "http://localhost:2368",
"server": {
"port": 2368,
"host": "::"
},
"mail": {
"transport": "Direct"
},
"logging": {
"transports": [
"file",
"stdout"
]
},
"process": "systemd",
"security": {
"staffDeviceVerification": true
},
# smtp配置
"mail": {
"transport": "SMTP",
"options": {
"host": "smtp.163.com",
"port": 465,
"secure": true,
"auth": {
"user": "testblog360@163.com",
"pass": "smtp密钥"
},
"tls": {
# tls 若为587则开放
"rejectUnauthorized": false
}
},
"from": "\"ping\" <testblog360@163.com>"
},
"paths": {
"contentPath": "/var/lib/ghost/content"
},
# cdn portal.js 和sodoSearch.js配置 可以配置国内cdn或者本机代理
"portal": {
"url": "/public/js/portal.min.js"
},
"sodoSearch": {
"url": "/public/js/sodo-search.min.js"
},
"timezone": "Asia/Shanghai",
"locale": "zh"
}
最后执行docker-compose up -d 执行构建容器
发布教程
配置nginx代理发布公网
server {
client_max_body_size 20M;
listen 80;
server_name test.blog360.sbs;
# 主请求代理
location / {
proxy_pass http://172.30.0.2:80;
# 关键头信息传递 (解决混合内容问题)
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme; # 告知Discourse使用HTTPS
# WebSocket支持
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# 缓存优化
proxy_cache_bypass $http_upgrade;
# 修复静态资源路径
sub_filter_once off;
sub_filter_types text/html text/css application/javascript;
}
# 拦截所有版本的portal.min.js
location ~ ^/public/js/(.*\.js)$ {
alias /opt/ghost/$1;
add_header Cache-Control "public, max-age=31536000";
access_log off;
expires 1y;
}
}
配置软连接,重启nginx
ln -s /etc/nginx/sites-enabled/test.blog360.sbs /etc/nginx/sites-available/test.blog360.sbs
nginx -t
# 查看校验结果
nginx -s reload配置下载cdn js文件
# 下载文件 (替换版本号)
curl -o /opt/ghost/portal.min.js https://cdn.jsdelivr.net/ghost/portal@2.51.0/umd/portal.min.js
curl -o /opt/ghost/sodo-search.min.js https://cdn.jsdelivr.net/ghost/sodo-search@1.8.0/umd/sodo-search.min.js如果环境不允许,直接从这下载:
portal.min.js sodo-search.min.js
申请免费证书(ssl证书可选)
安装Certbot工具
# Ubuntu/Debian
sudo apt update
sudo apt install certbot python3-certbot-nginx
# CentOS/RHEL
sudo yum install epel-release
sudo yum install certbot python3-certbot-nginx申请ssl证书(nginx)
sudo certbot --nginx -d your-domain.com替换
your-domain.com为你的域名
配置及使用教程
官网配置说明地址:https://docs.ghost.org/faq
默认后台页面及管理员初始化
默认管理员地址为:http://yourdomain.com/ghost 例如:https://test.blog360.sbs/ghost,首次打开页面将会初始化管理员账户密码和邮箱
cdn js文件配置加载提速
ghost 默认使用使用了portal 和 sodo-search 两个js的cdn加速,但是由于国内访问非常缓慢,所以我们需要自行优化,我们可以使用以下两种方式
1.使用国内cdn加速,例如阿里、腾讯、七牛云 ...
2.使用服务器本身代理发布(推荐,上面已经配置的方法)
smtp 配置
ghost 本身已经使用了Nodemailer,默认的发件邮箱为noreply@yourdomain.com 按照官方的说法
但是这个直邮服务似乎不太好使,我测试的话QQ邮箱、网易邮箱是支持的,但是谷歌邮箱不支持,可以根据自己的需求判断是否需要自行怕配置,上面的教程就是配置了smtp,有以下两个步骤需要配置
在
config.production.json配置smtp信息
# smtp配置
"mail": {
"transport": "SMTP",
"options": {
"host": "smtp.163.com",
"port": 465,
"secure": true,
"auth": {
"user": "testblog360@163.com",
"pass": "smtp密钥"
},
"tls": {
# tls 若为587则开放
"rejectUnauthorized": false
}
},
"from": "\"你的发件人名称\" <testblog360@163.com>"
},在后台配置发件邮箱(否则将会使用默认 noreply@yourdomain.com),比较深,见截图:


主题设置
如何为我们的ghost 去选择主题呢,有两种方式:
前往官方主题库,这里有各种场景的免费和收费主题,其实后台页面也可以浏览,但是官方页面比较清晰
去网上搜索找自己喜欢的主题zip包。(我使用主题https://github.com/code-gal/Ghost-Theme-Blumid?ref=nigzu.com)
主题使用
如何使用主题呢?非常简单,去页面导入主题,或者直接上传服务器,重启,一般为~/content/themes(docker容器映射路径) 按照我的来一般在/opt/ghost/content/themes。建议直接导入,启用及生效:

语言设置
ghost默认是英文,咱用起来还是有道费劲的,那么我们应该如何去设置语言呢,我们是无法设置后台的语言的,但是我们可以去设置主题(前台)的语言,在下面:
有人就问了,这不是可以设置语言吗?nonono,这里是设置主题语言的,而且并不是可以设置全部的,但是我们可以自定义,什么意思呢?我们看看官网的说明:
如何使用设置和自定义(主题不支持)语言
我们可以看到,我们设置的语言是主题的语言,那么我们应该如何使用语言呢?
使用语言:
查看服务器上的主题文件,一般为~/content/themes(docker容器映射路径) 按照我的来一般在/opt/ghost/content/themes
这里就是我们的主题,进入主题的/主题/locales/ 路径,查看支持的语言
然后我们就可以在后台Publication Language 设置对应的语言
自定义语言:
也是在主题目录,拷贝一份en.json文件,丢给ai,和他说,参照该文件,给我生成一份中文的配置文件,一般配置文件如下:
配置完成后,在后台设置语言即可
自定义页面
我们应该如何来自定义自己的页面呢,自定义页面有两种
自建页面
就是自建创建的页面,填充的内容,然后加路由展示。

自定义标签页面
自定义的标签内容,再添加一个路由页面

Mailgun 配置(邮箱配置)
为啥有一个smtp了,还需要有个邮箱配置呢?对于ghost 它有两种邮件,一种是登录所需要的验证邮件,另外一种是会员订阅邮件,对于第二种而言,需要邮件支持事务,smtp不支持,我这边没有设置,需要去Mailgun 申请一个key,比较麻烦。至于为啥,可以看看官方文档:

