Ubuntu 14.04 上 Ghost 0.8.0 安装以及配置教程

【前言】该文来自tang.sh,目前已关闭并合并到本站。

是的,我又换域名了,还换了平台,从WordPress换到了Ghost。原因很简单,对Ghost这个默认主题一见钟情。而且考察了一下Ghost的功能,写博客完全够用。并且是Markdown编辑,逼格高。

下面讲一下Ghost的安装过程。 推荐多参考官方的《Getting started》,写的很详细。本文大致顺序按照此Getting started来,不过是中文版的,方便不懂英文的人参考。

0. 准备工作

准备工作包括了安装前的一些前期准备。

一台VPS

首先得准备一台VPS,为此我纠结了一下,最后决定再开一台Linode的日本机房。

虽然官方没有说一定要什么系统,但是我推荐使用Ubuntu。Ubuntu最近已经出了16.04LTS了,我使用的是14.04LTS。32位和64位随意,我用的32位。本文的所有过程均基于32位Ubuntu 14.04

一个SSL证书

Ghost官方推荐上SSL,更何况SSL也是流行趋势,所以不差钱的话就买一个吧。我是从SSLS买的PositiveSSL,一年只要5刀,3年15刀,很便宜。

一些软件

比如Xshell,FileZilla之类的。

1. 安装Ghost

安装Ghost主要分为以下几步。

1.1 安装Nodejs

安装Ghost前首先要安装Nodejs,js现在真是无所不能,前端后台通杀。

参考Nodejs官方的《Installing Node.js via package manager》。下面列举一下主要步骤。

安装必备工具。

sudo apt-get install -y build-essential

安装Nodejs 0.10.x版本,此为Ghost官方推荐版本,可参考《Installing Ghost on Linux

curl -sL https://deb.nodesource.com/setup | sudo -E bash -
sudo apt-get install -y nodejs

如果没有curl,就把curl装上

sudo apt-get install curl

好了,Nodejs安装好了。可以通过node -v查看一下是否安装成功。

1.2 安装Ghost

接下来开始安装Ghost。继续参考《Installing Ghost onLinux》中的第二步。

下载最新版本Ghost

curl -L https://ghost.org/zip/ghost-latest.zip -o ghost.zip

解压到/var/www/ghost,此为官方推荐的安装目录,建议照做。

unzip -uo ghost.zip -d /var/www/ghost

Note#1 如果发现unzip用不了,装一下unzip

sudo apt-get install unzip

Note#2 如果发现解压的时候提示目录不存在,先建立一个目录:

mkdir /var/www/

解压完成后,进入目录进行安装:

cd /var/www/ghost && npm install --production

等待安装完成,Ghost就算是装成功了。

1.3 启动Ghost

安装完成后启动Ghost:

npm start --production

会提示你启动成功,此时通过 http://<your-ip-address>:2368 理应能看到你的博客了,但是也可能看不到,不要紧张,Ctrl+C先退出Ghost,进入接下来的配置。

2. 配置Ghost

秉承着先要能看到博客正常运行的理念,我对官方的《Getting started》中的顺序做了些改动。

2.1 配置Nginx

配置Nginx不是必须的,你可以通过修改config.js文件直接将Ghost端口改成80,但是这不推荐,并且官方也是强烈反对的:

==Do not run Ghost on port 80 directly. This is considered a security risk. We always recommend using a proxy such as nginx.==

那么我们就先把Nginx给装了。参考《Basic nginx config》。

######安装Nginx

安装比较简单:

sudo apt-get install nginx

######配置Nginx

1.在/etc/nginx/sites-available/创建一个文件,叫ghost.conf

sudo vim /etc/nginx/sites-available/ghost.conf

Note 如果没有vim就先安装vim

sudo apt-get install vim

2.把下面内容复制到ghost.conf里面:

server {
listen 80;
server_name example.com;

location / {
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   Host      $http_host;
    proxy_pass         http://127.0.0.1:2368;
}
}

3.把server_name改成你自己的域名,如tang.sh

4.给配置文件建立连接:

sudo ln -s /etc/nginx/sites-available/ghost.conf /etc/nginx/sites-enabled/ghost.conf

5.重启Nginx:

sudo service nginx restart

至此Nginx已经配置完成。至此config.js还不需要做任何改动。至此,把你的域名指向你的VPS,然后访问你的域名就能看到你的博客了。(别忘了先npm start --production启动Ghost,不然怎么可能看得到?)

2.2 配置博客地址和邮件地址

此时虽然能通过你的域名访问Ghost博客了,但是博客上的链接都是默认的,并不是你自己的信息。下面就要开始修改config.js文件了。打开文件:

sudo vim /var/www/ghost/config.js

有两处地方需要修改。一个是url,一个是mail

修改URL

这个很简单,把URL改成你自己的域名就行了,http://别忘了加。如果你要把你博客搞成tang.sh/blog之类的形式,那就把所有路径填写完整。

修改mail

默认的mail:{}是空的,需要进行配置,当然,不配置也不要紧,不过还是建议配置一下。

最基本的就是修改邮件的发送方。直接改成如下形式:

mail: {
    from: 'myemail@address.com',
}

复杂点的:

mail: {
    from: '"Custom Name" <myemail@address.com>',
}

更多的配置,比如配置通过Gmail发送邮件等,可以参考《Mail Configuration on self-hosted version of Ghost》,在此不再赘述。

2.3 让Ghost始终运行

一直到现在,每次想要访问博客,首先要npm start --production一下,是不是特别麻烦?下面就告诉大家怎样让Ghost在后台始终运行。参考《Deploying Ghost》。

官方给出了两个方法,一个是通过三方软件实现永久运行,另一个是通过修改Ubuntu的脚本实现,官方推荐第二个方法,可以参考《Init script》,我嫌麻烦,采用的第一种方法,介绍如下。

1.安装pm2:

npm install pm2 -g

2.通过pm2启动Ghost:

NODE_ENV=production pm2 start index.js --name "Ghost"

3.之后想要启动、停止、重启Ghost就简单了,直接pm2 start Ghostpm2 stop Ghost或者pm2 restart Ghost就行了。

除了pm2,还可以通过forever或者Supervisor来实现这个效果,请直接参考《Making Ghost run forever》。

2.4 第一次运行Ghost

到这儿差不多先告一段落,我们让Ghost始终在后台运行着,然后访问域名,进行第一次访问的配置。理论上会跳转到yourdomain.com/ghost/setup,填写所需信息,完成安装,就能进入后台了。

2.5 配置SSL

配置SSL不是必须的,但是建议配置一下,为什么?逼格高。

获取SSL

先讲一下如何获取SSL。方法比较多,我推荐自己买一个。买完后需要配置一下。参考《How to generate a CSR code on Apache/Nginx using OpenSSL》。

先创建一个目录:

mkdir /etc/nginx/ssl

进入这个目录:

cd /etc/nginx/ssl

生成CSR文件:

openssl req -new -newkey rsa:2048 -nodes -keyout server.key -out server.csr

其中server.keyserver.csr的名字可以自己修改。

上面一条命令输入后,会提示你输入一些参数。

  • Country Name:国家名,输入CN或者你所在国家即可。
  • State or Province Name:省份名。
  • Locality Name:城市名。
  • Organization Name:组织名,输入你的公司名字,如果没有公司,就填NA
  • Organization Unit Name:填写NA即可。
  • Common Name:填入你的域名,比如tang.sh。如果是Wildcard SSL,填入类似*.tang.sh即可。
  • Email Address:邮箱。
  • A Challenge Password:不用填,直接回车。
  • An Optional Company Name:不用填,直接回车。

上述步骤完成后,会生成server.keyserver.csr,将server.csr的内容展示一下:

cat server.csr

然后将这些内容原封不动的全部复制到你的SSL提供商处。然后SSL提供商会给你下发SSL证书。如果是PositiveSSL,会包含下列文件:

  • tang_sh.crt
  • COMODORSADomainValidationSecureServerCA.crt
  • COMODORSAAddTrustCA.crt
  • AddTrustExternalCARoot.crt

为了防止在手机上证书不信任的问题,首先把上述证书合并:

cat tang_sh.crt COMODORSADomainValidationSecureServerCA.crt COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >> server.crt

tang_sh.crt的名字换成你自己的。

合并后检查当前目录/etc/nginx/sslserver.crtserver.key是否都有了,如果都有了,进入下一步。

配置SSL

打开下面文件:

sudo vim /etc/nginx/sites-available/ghost.conf

按照如下进行更改:

server {
     listen 80;
+    listen 443 ssl;
     server_name example.com;
+    ssl_certificate        /etc/nginx/ssl/server.crt;
+    ssl_certificate_key    /etc/nginx/ssl/server.key;
     ...
     location / {
-       proxy_set_header X-Real-IP $remote_addr;
+       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+       proxy_set_header Host $http_host;
+       proxy_set_header X-Forwarded-Proto $scheme;
        proxy_pass http://127.0.0.1:2368;
        ...
     }
 }

前面有+号的是要添加的内容。有-号的是要删除的内容。

修改完成后,重启Nginx:

sudo service nginx restart

此时SSL已经配置完成,但是此时httphttps两张方式都能访问到博客,如果想强制跳转到https,很简单,只需配置config.js,将里面的url改成https://tang.sh即可。更多的配置SSL的选项可以参考《config Guide》。

3. 问题解决

下面列举一些安装配置完成后可能遇到的问题。

3.1 图片上传大小限制

在上传博客封面图的时候,可能会遇到

The image you uploaded was larger than the maximum file size your server allows.

的问题。解决方法如下:

打开/etc/nginx/nginx.conf

sudo vim /etc/nginx/nginx.conf

在这个文件里找到http这一块,然后在里面任意位置加入下面代码:

client_max_body_size 2m;

2m就是大小限制,可以改为任意你想限制的大小,比如说我,我就设成了5m

3.2 链接新窗口打开

Ghost采用Markdown,众所周知Markdown不能很好的处理链接使之在新窗口打开。为了解决这个问题,可以采用如下方法。

在Ghost后台的SETTINGS->Code Injection里,在Blog Footer中插入如下代码:

<script>
var links = document.querySelectorAll( '.post-content a' );
for (var i = 0, length = links.length; i < length; i++) {
  if (links[i].hostname != window.location.hostname) {
    links[i].target = '_blank';
  }
}
</script>

参考《[Dev] Target “_blank” for links on Ghost》,原理请直接访问参考链接查看。或者简洁为上的,插入下面两行代码就行:

<script>
  $('.post a').attr('target', '_blank');
  $('h2.post-title a').attr('target', '_self');
</script>

参考《make your ghost blog links open in a new tab》。

3.3 使用Disqus

Ghost自己不自带评论系统,要想使用评论系统,需要第三方支持。可以使用Disqus。参考《Adding Disqus to your Ghost blog》,文章里写的很详细了,我就不赘述了。

3.4 发送测试邮件失败

Ghost默认使用sendmail来发送邮件,如果在后台测试发送邮件时显示Access denied,多半是你系统没装sendmail,可通过如下检测:

which sendmail

如果返回类似/usr/sbin/sendmail的路径,说明sendmail安装正确,如果什么都不返回,那么就是没装,通过如下命令安装一下即可:

sudo apt-get install sendmail

然后邮件就该正常了。

至此,博客就完美的运行了,如果有什么问题,后续我还会更新。欢迎大家留言。

发表评论

电子邮件地址不会被公开。 必填项已用*标注