【前言】该文来自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 Ghost
、pm2 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.key
和server.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.key
和server.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/ssl
下server.crt
和server.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已经配置完成,但是此时http
和https
两张方式都能访问到博客,如果想强制跳转到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
然后邮件就该正常了。
至此,博客就完美的运行了,如果有什么问题,后续我还会更新。欢迎大家留言。