Ghost 安装笔记
一见钟情是什么感觉,用惯了typecho,体验了Wordpress,第一眼看见Ghost就喜欢上了它。
Ghost 安装笔记
一见钟情是什么感觉,用惯了
typecho
,体验了Wordpress
,第一眼看见Ghost
就喜欢上了它。更新时间:2020-05-05 19:20:07
0x1 前言
Ghost
是基于Node.js
和Handlebars
模板的开源 CMS 系统。安装使用的过程很曲折,对
Ghost
,不了解。Handlebars
,不了解。Linux
,只停留在基本命令。一路摸索的从
Window
转到Linux
。期间服务器重装了很多次。也尝试过自己搭建lnmp
环境,用过一键lnmp
脚本,最终屈服了,用了宝塔。宝塔真香。因为服务器不止单单需要运行
Ghost
,还需要Docker
,Nginx
,Php
等环境Ps:如果你是个爱折腾的人,完全可以通过阅读官方进行安装,本文主要做个笔记。
1x1 服务器环境
服务器提供商 | 阿里云学生机(轻量云) |
---|---|
系统版本 | Ubuntu 18.04 |
链接工具 | MobaXterm |
宝塔面板版本 | 7.1 |
Nginx |
1.16.1 |
Mysql |
5.6 |
Node.js |
12.6.1 |
0x2 安装环境
2x1 安装宝塔面板
用MobaXterm
链接服务器,执行下面的命令,安装完成之后会给你一个登录地址,和随机用户名和密码。
Ubuntu/Deepin 安装命令:
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
2x1 安装Lnmp
环境
lnmp
为:Linux
+nginx
+mysql
+php
同类型的环境还有
lamp
,lnmpa
,lnmt
等。
用安装宝塔面板给到的信息登录到宝塔的控制面板,安装Lnmp
环境,快速安装即可,如果你的系统没有自己安装过类似的环境,是干净的。等待一段时间之后就安装完成了。
在使用的时候需要放开服务器的端口控制和宝塔的端口控制才能在外部访问,阿里的在实例的安全组设置,宝塔在控制面板的安全选项。Nginx
需要80
,443
,mysql
为3306
2x2 安装node.js
Node.js
官网:https://nodejs.org/zh-cn/
Ubuntu
安装文档:https://github.com/nodesource/distributions/blob/master/README.md这里是使用
Ubuntu
自带的包管理安装器进行安装,阿里Ubuntu
的apt-get
源默认是国内阿里的,下载速度很快。
安装最新的长期支持版-Node.js v12.x
:
# Using Ubuntu
curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt-get install -y nodejs
更新npm
下包的源,后面下载Ghost
需要,否则非常慢。
# 1、查看一下当前源
npm config get registry
# 2、切换为淘宝源
npm config set registry http://registry.npm.taobao.org/
# 3、换成原来的
npm config set registry https://registry.npmjs.org/
# yarn
# 1、查看一下当前源
yarn config get registry
# 2、切换为淘宝源
yarn config set registry https://registry.npm.taobao.org
# 3、或者切换为自带的
yarn config set registry https://registry.yarnpkg.com
2x3 安装Ghost-CLI
安装Ghost-CLI
# 安装Ghost-CLI
sudo npm install ghost-cli@latest -g
2x4 新建用户
Ghost
安装无法使用root
用户进行安装,所以我们需要新建一个用户
# <user> 填写你新建的用户名,不能为ghost,否则会和ghost - cli冲突。
adduser <user>
# CentOS修改密码
passwd <user>
# 将用户添加到超级用户组以解锁管理权限
usermod -aG sudo <user> # Ubuntu
usermod -a -G wheel <user> # CentOS
# 然后登录你创建的新用户
su - <user>
2x5 安装Ghost
准备
创建Ghost
安装目录,此时用的是你新建的用户。
# Ghost安装目录
sudo mkdir -p /var/www/ghost
# 将<user>替换为你登录的用户的名称,这一步改变文件夹所属
sudo chown <user>:<user> /var/www/ghost
# 设置正确的权限
sudo chmod 775 /var/www/ghost
# 进入到安装目录
cd /var/www/ghost
2x6 安装Ghost-cli
sudo npm install ghost-cli@latest -g
2x7 安装Ghost
这一步有 5 步,比较耗时的是第三步的下载依赖包,和第五步的构建完整依赖的过程,如果你使用了国内的
npm
源,第三步下载依赖应该是比较快的,第五步由于特殊原因,需要下载非常长时间,我重新安装了好几遍,最后经过 10 多分钟才下载构建完成。重新安装需要删除安装目录下下载的
content
和versions
文件夹才能继续安装。因为Ghost
需要安装在空的目录。
# 到你新建的安装目录下运行此命令。
ghost install
2x8 安装问题
主要是安装完成后,
ghost-cli
需要的配置信息。输入
y
选择是,n
为否。如果命令行选项之前是大写的Y
,代表回车为是,反之则为否。
Blog URL
输入你要绑定到博客的域名,HTTP
或HTTPS
协议都可以。例如,https://example.com。如果您使用HTTPS
, Ghost-CLI
将提供为您设置SSL
。使用IP
地址会导致错误。(可以nginx
反向代理,反向代理设置了Https
这里可以不用设置https
)
我设置的http://yoouu.cn/
这里在 2020-05-05 19:20:27 有更新,[
Nginx
反向代理和设置Bolg url
](#Nginx
反向代理和设置Bolg url
)
MySQL hostname
Ghost
生产环境使用的是mysql
数据库,填写数据库的地址,本地为localhost
或者127.0.0.1
。
我设置的localhost
MySQL username / password
输入你的数据库用户名和密码
我设置的root
/我的数据库密码
Ghost database name
输入Ghost
使用的数据库的名称。如果上一步填写的数据库用户名和密码是非root
用户,需要数据库已经存在才能通过。
我设置的ssx_ghost
Set up a ghost MySQL user? (推荐)
Ghost 推荐单独为 Ghost 的数据库设置一个用户,但是我没有设置。
我没有设置
Set up NGINX? (推荐)
如果是使用Ghost
文档安装的 nginx 可以使用,设置 nginx 解析到Ghost
。这个命令行会自动配置你设置的域名反向代理到你的Ghost
运行地址。
由于我是宝塔安装的 lnmp 环境,这一步我自己配置nginx
。
Set up SSL? (推荐)
如果你的域名正确设置解析到Ghost
所在的服务器,这个命令可以帮你用 Let's Encrypt,配置域名证书。
我没有设置,没有用过。
Set up systemd? (推荐)
systemd
是保持Ghost
顺利运行的推荐流程管理器工具。我们建议选择 yes,但是可以设置自己的流程管理。
推荐设置,可以方便管理Ghost
进程
Start Ghost?
启动Ghost
都安装了,你不启动?
0x3 配置Nginx
远程访问
由于
Ghost
在本地监听启动的链接为127.0.0.1
,端口为2368
,所以我们配置域名解析到服务器访问Ghost
需要通过Nginx
的反向代理才能使用。
来到宝塔网站管理页面,新建一个网站域名填写你绑定·Ghost
的域名,Ftp
,数据库
,关闭。Php
版本选择纯静态就行。
然后找到刚刚创建的网站,
-
找到反向代理
-
添加反向代理
-
备注随便(我的
Ghost
) -
目标
url
你的Ghost
运行地址(我的是http://127.0.0.1:2368
) -
发送域名填写你绑定的域名(我的
https://yoouu.cn
)
访问试一下https://yoouu.cn/,完美。
搭建过程中经历了很多次的实验和失败。比如,下载很慢啊,重新下载很多遍,用户建立错了,Linux
脚本执行错了又得搜索怎么撤回。不过大部分问题都是出现在自己搭建Lnmp
环境上面,直接用宝塔应该没有这么多问题。
Https
配置反向代理无限 301?
[可以看下面的
Nginx
反向代理和设置Bolg url
](#Nginx 反向代理和设置 Bolg url)
Nginx
反向代理时候没有将 https 协议正确的发给Ghost
,Ghost
认为一直是Http
发过来的消息,所以一直返回301
重定向
解决办法是给Nginx
反向代理时候把Https
协议发给Ghost
,这个地方仍然有些问题。因此我把url
成了http://yoouu.cn/
# 宝塔面板的配置文件
#PROXY-START/
location ~* \.(php|jsp|cgi|asp|aspx)$
{
proxy_pass http://127.0.0.1:2368;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
}
location /
{
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:2368;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
proxy_ignore_headers Set-Cookie Cache-Control expires;
proxy_cache cache_one;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 301 302 1m;
expires 12h;
}
#PROXY-END/
# 重要的是下面这部分
location /
{
proxy_set_header X-Forwarded-Proto $scheme; # 这个就是发送协议的代理
}
Nginx 反向代理和设置 Bolg url
这个地方(反向代理)一直有个问题,因为我是通过宝塔安装的
Nginx
,Ghost
设置的时候无法更新,检测我,我没有安装Nginx
,实际上是安装的了,所以只能自己配置Nginx
的反向代理。
在配置博客 url 的时候始终有个地方不完美,就是一旦设置了https
的域名,博客访问就会一直301
重定向,原因有可能出在Nginx
反向代理上面,Ghost
认为来源不是https
所以一直转发 。
但是我在查看Ghost
文档的时候看到了Ghost
有个配置文件,随即到安装目录下打开这个文件看了下,是运行时的配置文件,动手改了下,启动竟然没有问题了,就没有问题了~...😶。很玄学,附上配置文件(关键信息已用******
代替)。
Ghost 安装目录下的config.production.json
{
"url": "https://yoouu.cn",
"server": {
"port": 2368,
"host": "localhost"
},
"database": {
"client": "mysql",
"connection": {
"host": "localhost",
"user": "******",
"password": "******",
"database": "******"
}
},
"mail": {
"transport": "Direct"
},
"logging": {
"transports": ["file", "stdout"]
},
"process": "systemd",
"paths": {
"contentPath": "/var/www/ghost/content"
}
}
Nginx
反向代理配置文件
#PROXY-START/
location ~* \.(php|jsp|cgi|asp|aspx)$
{
proxy_pass http://localhost:2368;
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;
proxy_set_header REMOTE-HOST $remote_addr;
}
location /
{
proxy_pass http://localhost:2368;
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;
proxy_set_header REMOTE-HOST $remote_addr;
add_header X-Cache $upstream_cache_status;
#Set Nginx Cache
proxy_ignore_headers Set-Cookie Cache-Control expires;
proxy_cache cache_one;
proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 301 302 1m;
expires 12h;
}
#PROXY-END/
Nginx
网站配置
server
{
listen 80;
listen 443 ssl http2;
server_name yoouu.cn www.yoouu.cn;
index index.php index.html index.htm default.php default.htm default.html;
root /www/wwwroot/yoouu.cn;
#SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
#error_page 404/404.html;
#HTTP_TO_HTTPS_START
if ($server_port !~ 443){
rewrite ^(/.*)$ https://$host$1 permanent;
}
#HTTP_TO_HTTPS_END
ssl_certificate /www/server/panel/vhost/cert/yoouu.cn/fullchain.pem;
ssl_certificate_key /www/server/panel/vhost/cert/yoouu.cn/privkey.pem;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
error_page 497 https://$host$request_uri;
#SSL-END
#ERROR-PAGE-START 错误页配置,可以注释、删除或修改
#error_page 404 /404.html;
#error_page 502 /502.html;
#ERROR-PAGE-END
#PHP-INFO-START PHP引用配置,可以注释或修改
#清理缓存规则
location ~ /purge(/.*) {
proxy_cache_purge cache_one $host$1$is_args$args;
#access_log /www/wwwlogs/yoouu.cn_purge_cache.log;
}
#引用反向代理规则,注释后配置的反向代理将无效
include /www/server/panel/vhost/nginx/proxy/yoouu.cn/*.conf;
include enable-php-00.conf;
#PHP-INFO-END
#REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
include /www/server/panel/vhost/rewrite/yoouu.cn.conf;
#REWRITE-END
#禁止访问的文件或目录
location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md)
{
return 404;
}
#一键申请SSL证书验证目录相关设置
location ~ \.well-known{
allow all;
}
access_log /www/wwwlogs/yoouu.cn.log;
error_log /www/wwwlogs/yoouu.cn.error.log;
}