Ghost 安装笔记

一见钟情是什么感觉,用惯了typecho,体验了Wordpress,第一眼看见Ghost就喜欢上了它。

Ghost 安装笔记

一见钟情是什么感觉,用惯了typecho,体验了Wordpress,第一眼看见Ghost就喜欢上了它。

更新时间:2020-05-05 19:20:07

0x1 前言

Ghost 是基于Node.jsHandlebars模板的开源CMS系统。

安装使用的过程很曲折,对Ghost,不了解。Handlebars,不了解。Linux,只停留在基本命令。

一路摸索的从Window转到Linux。期间服务器重装了很多次。也尝试过自己搭建lnmp环境,用过一键lnmp脚本,最终屈服了,用了宝塔。宝塔真香。

因为服务器不止单单需要运行Ghost,还需要DockerNginxPhp等环境

Ps:如果你是个爱折腾的人,完全可以通过阅读官方进行安装,本文主要做个笔记。

1x1 服务器环境

服务器提供商 阿里云学生机(轻量云)
系统版本 Ubuntu 18.04
链接工具 MobaXterm
宝塔面板版本 7.1
Nginx 1.16.1
Mysql 5.6
Node.js 12.6.1

0x2 安装环境

2x1 安装宝塔面板

官网:https://www.bt.cn/

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

同类型的环境还有lamplnmpalnmt等。

用安装宝塔面板给到的信息登录到宝塔的控制面板,安装Lnmp环境,快速安装即可,如果你的系统没有自己安装过类似的环境,是干净的。等待一段时间之后就安装完成了。

在使用的时候需要放开服务器的端口控制和宝塔的端口控制才能在外部访问,阿里的在实例的安全组设置,宝塔在控制面板的安全选项。Nginx需要80443mysql3306

2x2 安装node.js

Node.js官网:https://nodejs.org/zh-cn/

Ubuntu安装文档:https://github.com/nodesource/distributions/blob/master/README.md

这里是使用Ubuntu自带的包管理安装器进行安装,阿里Ubuntuapt-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多分钟才下载构建完成。

重新安装需要删除安装目录下下载的contentversions文件夹才能继续安装。因为Ghost需要安装在空的目录。

# 到你新建的安装目录下运行此命令。
ghost install

2x8 安装问题

主要是安装完成后,ghost-cli需要的配置信息。

输入y选择是,n为否。如果命令行选项之前是大写的Y,代表回车为是,反之则为否。

Blog URL

输入你要绑定到博客的域名,HTTPHTTPS协议都可以。例如,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:https://yoouu.cn//yoouu.cn/,完美。

搭建过程中经历了很多次的实验和失败。比如,下载很慢啊,重新下载很多遍,用户建立错了,Linux脚本执行错了又得搜索怎么撤回。不过大部分问题都是出现在自己搭建Lnmp环境上面,直接用宝塔应该没有这么多问题。

Https配置反向代理无限301?

[可以看下面的Nginx反向代理和设置Bolg url](#Nginx反向代理和设置Bolg url)

Nginx反向代理时候没有将https协议正确的发给GhostGhost认为一直是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

这个地方(反向代理)一直有个问题,因为我是通过宝塔安装的NginxGhost设置的时候无法更新,检测我,我没有安装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;
}