使用ghost建立一个免费博客网站

Ghost Nov 08, 2017

现时建立一个博客的方法五花八门,大致可分为三类。

  1. 使用第三方博客平台,直接申请一个博客网站,例如Blogger, Medium
  2. 使用第三方博客框架,建立一个静态博客网站,可以将Github内容转化为博客网站,例如jekyll, GitHub Pages
  3. 使用第三方网站框架,建立一个博客网站,可以根据自己需要设置网站功能,例如WordPress, ghost

本文章采用的是第三种方法,使用ghost框架来搭建一个免费博客网站。

为什么使用ghost

在以上介绍的三类方法中,以第一种最为方便,注册账号即可建立自己的博客网站,但可修改的空间不多。第三种最为自由度最高,但是建立网站的步骤比较繁琐。第二种为两方面的折中选择。读者可按照自身情况建立自己的博客。如读者自身有一定编程基础,建议使用第二种或第三种方法。

在各种第三方网站框架中,ghost相比其他框架,优势在于自身的小体积和易于上手。相比WordPress那臃肿的框架,ghost的目标十分明确,就是建立一个轻量级,易于上手又不乏扩展性的博客平台。

建立一个博客网站的流程

使用ghost建立一个网站大致分为以下几个步骤,部分流程的先后次序并非绝对,读者可按自身需求调整。(方法一)

  1. 为博客申请一个(免费)伺服器(可选)
  2. 在伺服器上安装必要前置软件
  3. 在伺服器上搭建ghost平台
  4. 为博客购买和设置域名(可选)

或者可以选用Bitnami软件包,流程为:(方法二)

  1. 为博客申请一个(免费)伺服器(可选)
  2. 安装Bitnami软件包
  3. 为博客购买和设置域名(可选)

虽然Bitnami简化了安装流程,实现了一键安装ghost,但是作者在使用Bitnami之后,出现ghost一旦关闭就不能重新开启的bug(Issue 501),所以不推荐使用Bitnami。

1. 申请一个(免费)伺服器(可选)

博客平台可以建立在自己的电脑或者搭建在第三方伺服器上,两者各有优势。

搭建在自家电脑的优势:

  • 不需要远程管理,伺服器的情况自己可以在地监控。

搭建在自家电脑的缺点:

  • 需要24小时开机运行,一旦关机,博客就不能被访问。

搭建在第三方平台的优势:

  • 第三方平台能提供强大的技术支援和功能扩展。

搭建在第三方平台的缺点:

  • 通常需要一定费用来维持伺服器运作
  • 需要远程管理

本文选择使用亚马逊网上服务(AWS)的EC2来搭建一个免费的伺服器(中国读者请使用中国亚马逊云服务)。现时AWS推出不少免费的服务,其中包括了EC2,免费期为期一年。读者可以按照自己喜好使用其他伺服器平台,例如阿里云等。

使用AWS服务需要:

  1. 常用邮箱
  2. 信用卡
  3. 电话号码

1.1 注册一个AWS服务

登入AWS,注册一个免费账号。
AWS-REG
之后填写个人账号名称,邮箱,密码。进入下一页。
AWS_REG_2
选择个人账号,填写个人的联络资讯。
AWS_REG_3
填写个人信用卡资料,AWS会向信用卡账号收取1美元做验证,之后会归还。
AWS_REG_4
然后是电话验证,AWS会打电话到填写的电话号码,这时候需要输入AWS网上提供的验证码。(图片来自apachefriends)
AWS_REG_5
接着选择Basic服务。(图片来自apachefriends)
AWS_REG_6
最后确认所有资讯无误,注册AWS账号成功。

1.2 申请一个EC2伺服器

登入AWS Console,选择EC2。
AWS_EC2_1
选择'Launch Instance',建立一个新伺服器。
AWS_EC2_2

现时可以建立两种伺服器:

  1. 如果不选用Bitnami软件包,建立一个ubuntu伺服器。(方法一)
  2. 如果选用Bitnami软件包,建立一个自带ghost的伺服器。(方法二)(不建议)
方法一:建立ubuntu伺服器

选择ubuntu 16.04
AWS_EC2_3-1
注意:请谨记选择t2.micro,唯有t2.micro才能享有AWS一年免费服务,即使选择t2.nano也会收钱。
AWS_EC2_4
然后不要选'Review and Launch',先设置其他。'Configure Instance'可以不用理会,'Add Storage'则是选择伺服器容量,不建议太小,也不建议太大。建议8GB-10GB即可。
注意:免费服务只提供30GB容量,请不要超出。
AWS_EC2_5
'Configure Security Group'方面,添加HTTP和HTTPS接口,否则伺服器不能透过输入网址的方式访问。
AWS_EC2_6
确认无误后,点右下角的launch便可建立server。
AWS_EC2_7
最后AWS会询问关于配对钥匙的方案,这是关于SSH的访问使用。原因请参考RSA加密。请选择'Create a new key pair',产生一堆新的钥匙。并为钥匙命名。这时候游览器会自动下载自己的密匙。
注意:请务必保存好密匙文件,因为AWS一旦发出密匙文件,就不会保存。一旦密匙丢失,是没有方法找回来的。而密匙是透过SSH连上伺服器的关键,请妥善保管。
AWS_EC2_8
点击'Launch Instance',ubuntu伺服器就成功建立了。

方法二:使用bitnami,建立自带ghost的伺服器

先点击AWS Marketplace。
AWS_EC2_9-1
然后在搜寻栏输入ghost,选择'Ghost Certified by Bitnami',
AWS_EC2_10
按continue,
AWS_EC2_11
同方法一,选择t2.micro。其他选项基本上Bitnami已经预先设置好。(Bitnami预设容量为10GB)
AWS_EC2_12
最后AWS同样会询问关于配对钥匙的方案。选择'Create a new key pair',保管好key即可。
AWS_EC2_13
点击'Launch Instance',伺服器就成功建立了。

使用方法二的话,bitnami软件包自带安装apache,mysql,node.js和ghost。一旦伺服器运行会自动运行ghost,直接完成网站建设。

1.3 访问EC2伺服器

建立伺服器后,可透过SSH方法连访问伺服器。支持SSH链接的工具有很多,例如PuTTY或者WinSCP。读者可按照自身需要使用。作者使用PuTTY作为示范。

返回EC2界面,'Running Instances'显示有多少server正在运行。点击'Running Instances'。
AWS_EC2_14
点击server,选择左上'connect',AWS会教如何使用putty登入伺服器。保存Public DNS网址(xxxxxx.xxxxx.compute.amazonaws.com)
AWS_EC2_16

注意:如果使用Bitnami软件包,这里有额外一步-取得应用密码(Application Password),请务必在登入前完成,应用密码仅在第一次显示。
取得应用密码:

  1. 点击'Actions',选'Instance Setting',点'Get System Log'(图片来自@robmadd3n)
    bitnami_1-1
  2. 在log文件中寻找'Setting Bitnami application password to'(图片来自@robmadd3n)
    bitnami_2-1
  3. 保存该密码,每次登入都需要输入该密码。

使用PuTTY登入伺服器分为2步:

  1. 将之前下载的密匙(xxx.pem)转换为putty密匙格式(xxx.ppk)
  2. 透过PuTTY,设置伺服器网址和链接密匙,登入伺服器

(步骤可参考AWS文档

1.3.1 转换密匙

开启PuTTY Key Generator(程序缩写为PuTTYgen.exe)
AWS_key_1
点击'Load',选取之前下载的pem文件,PuTTY默认打开.ppk文件,请更改为All Files
AWS_key_2
之后PuTTY会跳出提示,提醒要保存为'private key'。跟从提示,点击'Save private key',完成步骤。

1.3.2 PuTTY登入设置

打开PuTTY,输入Public DNS网址在Host Name一栏。
PuTTY_1
在左手边的'Category'中,点'Connection',点'SSH',点'Auth'。右手边选'Browse...',打开刚生成的ppk文件。
PuTTY_2
返回一开始的PuTTY页面('Session'), 点击Open即可链接上伺服器。(登入前可以保存设置,方便下次登入)
PuTTY_3

如果不使用Bitnami(方法一),用户名就是ubuntu;如果使用了Bitnami软件包(方法二),用户名就是bitnami,还需要输入之前保存的应用密码。

Ubuntu登入成功:
PuTTY_4

Bitnami用户(方法二)到这一步可以直接调至域名购买和设置,ubuntu用户继续(方法一)。

2. 在伺服器上安装必要前置软件

(可参考ghost官方文档)
注意:作者安装的是production版本,如果需要安装development版本,请阅读ghost官方文档。

建议新用户登入ubuntu伺服器后,先运行一下指令更新系统。

sudo apt-get update && sudo apt-get dist-upgrade

在安装ghost前,需要安装的软件为node.js,mysql,nginx

2.1 安装node.js

安装node.js十分简单,直接输入命令

curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash 

再输入命令,直接安装node.js

sudo apt-get install -y nodejs

注意:ghost官方不建议使用nvm来安装,更新和维护node.js,建议删除nvm以免造成影响。详情参考官方文档。

2.2 安装mysql

安装mysql只需要输入一项命令即可

sudo apt-get install mysql-server

过程中,系统会询问用户,要求设置一个密码,请谨记该密码。

2.3 安装nginx

如同安装mysql和node.js,输入命令

sudo apt-get install nginx

以免防火墙阻挡外部访问链接,输入命令

sudo ufw allow 'Nginx Full'

自此所有前置已经安装完毕,下一步可以安装ghost

3. 在伺服器上安装ghost

先安装ghost-cli,这会方便输入ghost相关指令

sudo npm i -g ghost-cli

建议新开一个文件夹以存放ghost和相关插件,输入命令,将会建立一个名加ghost的文件夹在/var/www的目录下。(如果/var/www不存在,则会一同建立。)

sudo mkdir -p /var/www/ghost

注意:ghost不能安装在server根目录(即是/root),安装会出现bug,不能安装等问题。

移至新文件夹

cd /var/www/ghost

输入ghost-cli命令,安装ghost

ghost install

安装过程中会要求输入一下资料(ghost版本的差异可能导致问题顺序不同,新版本会要求回答更多问题)
ghost_1(图片来自ghost官方)
(过程可参考ghost-install文档)
首先是博客域名'Enter your blog Url:',如果暂时没有想好或申请,可以只打ip地址暂代。
(ghost可能会询问'Do you wish to set up ssl?', 输入'no')
其次是MySQL设置'Enter your MySQL hostname [localhost]:',如果按照以上流程,MySQL安装在本地伺服器,直接按'Enter'键即可。
接着是'Enter your MySQL username:',按照以上流程,输入'root'。如果之前有为数据开新开用户,则使用该用户名。
跟着是'Enter your MySQL password:',输入数据库密码。
再者是'Ghost database name:',为ghost的database起名。
之后是'Do you wish to set up a ghost MySQL user?',为ghost建立一个新用户。
然后是'Do you wish to set up nginx?',这里可以输入yes,之后也可以更改。
'Do you wish to set up systemd?'这个可以输入yes,之后也可以更改。
'Do you want to start Ghost?'输入yes,运行ghost。

以上资料可以在config.development.json更改(位置在ghost安装目录下)
(参考ghost-config文档

这时候输入伺服器ip:ghost端口就能正常访问博客。

如出现任何问题,参考ghost-troubleshooting文档

4. 为博客购买和设置域名(可选)

域名可以在网上各大域名商购买,例如godaddynamecheap等。作者的域名是在namesilo购买。在不同平台购买域名都各有优势,读者可按照自身需求购买。各大域名平台都长期有优惠卷提供,能便宜1美金不等,请自行搜索。
注意:在中国内地建立的伺服器购买域名时需要域名备案,外国第三放域名平台可能不设有域名备案服务,请在购买域名前做好搜索,选择合适的域名商。

这里以namesilo为例,注册账号和购买域名(过程略),登入后选择'domain manager'。
domain_1-1
点选右边第三个按钮(Manage DNS for this domain)
domain_2
namesilo会为所有网址预设广告link等,这里全部删除。
然后选取'A'
domain_4
输入AWS EC2的伺服器ip(仅限ipv4地址)
domain_5
建议一同开启www网址前置
domain_3

注意:AWS EC2中每次伺服器重启都会委派新的ip地址,如果想ip地址固定,可以选用EC2的elastic IP,令ip地址固定,不用更新DNS。(教程略)

如果之前ghost url设置上使用的是ip地址,请更改ghost-config文件和nginx配置。(config.development.json位置在ghost安装目录下,nginx配置ghost.conf在/etc/nginx/sites-available/)
(nginx配置可参考ghost中国)

DNS更新需要一定时间,如果半小时至一小时后,输入域名仍未能访问ghost,则很有可能是设置上有问题,建议重新检视DNS,nginx和ghost的设定。

如有任何疑惑和问题,欢迎在讨论区讨论。

参考

  1. Register to Use Amazon Web Services (AWS) and Create an Amazon Account
  2. Host your Application in the Amazon Cloud with XAMPP and Bitnami
  3. 基于 Amazon AWS EC2 部署 Ghost 博客
  4. 在亚马逊云服务AWS上使用 EC2 和 RDS 来搭建ghost博客系统支持Markdown编辑
  5. The Ghost Guide
  6. Create a Professional Blog with AWS and Ghost
  7. docs.ghost.org/docs