在DigitalOcean花5美刀/月,买了个512M内存的VPS,想要安个Ghost来写写博客。DigitalOcean也有预安装Ghost的VPS卖,竟然需要买10美刀的那个Plan,太不环保,只好自己折腾安装。安装中也是遇到各种问题,同时我也发现好多人都跟我一样遇到这些问题。自己踩过的坑,记录一下,也好给后来人铺路。
我选择的是Ubuntu 16.04的镜像,其他操作系统如CentOS的安装过程相差不多。Ghost版本是目前最新的0.11.9
。最近Ghost团队可能会发布1.0
版本,请注意这个教程到时候可能会不适用(就在我写这篇博客的时候,我发现官网出现了1.0beta的文档)。
增加一个普通用户
这部分需要有root权限
这个步骤我不确定是不是必须的,但是我在使用root用户运行Ghost时,报了cannot run in wd
的错。后来参考了这个:Npm install failed with “cannot run in wd”,里面提到了npm用户权限的问题(文档在这)。
所以,我觉得有必要增加一个普通用户:
adduser myusername #增加一个叫myusername的用户
这时这个用户还只是个普通用户,不能通过sudo
执行一些需要root权限的命令,感觉很不好用啊。那我们就把这个用户加到sudoers
。
首先编辑/etc/sudoers
:
nano /etc/sudoers
打开后找到如下内容:
root ALL=(ALL) ALL
仿照这一行,将myusername用户添加进去:
root ALL=(ALL) ALL
myusername ALL=(ALL) ALL
按Ctrl+o
保存,然后Ctrl+x
退出。
设置swap交换分区
如果你的内存够用,可以跳过这一步。
添加完新用户后,安装过程中遇到的第一个问题就是内存不够。由于内存只有512M,在安装node依赖包的时候报了ENOMEM
的错。后来我观察了一下,其实整个Ghost的安装过程中,需要的峰值内存在530M左右。就差了这么一点,就是安装不成功。所以需要设置一个swap分区。由于DigitalOcean已经分好区了,我们选择使用文件建立swap。
先切换到刚才的那个myusername用户并进入其home目录:
su myusername
cd ~
创建一个1G的文件,其中1024000表示1024M,你可以选择想创建的大小:
dd if=/dev/zero of=$HOME/swap bs=1k count=1024000
$HOME/swap
是在你的home目录创建的swap文件的路径,你可以选择你喜欢的路径,但要注意用户权限。
把刚才那个文件用做交换分区,并使其生效:
mkswap $HOME/swap
swapon $HOME/swap
使用free
命令查看内存,确认一下是否已经启用了swap:
free
在我的VPS上可以看到已经生效了:
total used free shared buff/cache available
Mem: 500064 142084 35292 4108 322688 324108
Swap: 1023996 16084 1007912
准备node.js环境
我使用了nvm来管理node环境,首先安装nvm:
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
安装完毕后,如果执行nvm
命令时报错:nvm: command not found
,执行:
source ~/.bashrc
使刚才的安装生效。
接下来安装Node.js。Ghost推荐使用Node.js v4 LTS
,但是Node.js v6 LTS
也可以使用,具体的版本支持可以看这里。
由于V4马上就要退役,我选择使用V6版本。执行以下命令就能安装最新的V6 LTS:
nvm install --lts
安装Ghost
安装好node.js环境之后就可以安装Ghost了。从官网或github上下载0.11.9
“稳定版”。
mkdir ghost
cd ghost
wget https://github.com/TryGhost/Ghost/releases/download/0.11.9/Ghost-0.11.9.zip
unzip Ghost-0.11.9.zip
如果没有unzip命令,请先自行安装。
安装依赖环境:
npm install --production
一段时间之后就可以安装好了。测试一下是否安装成功:
先启动Ghost
npm start --production
在VPS的另一个终端里使用curl访问:
curl http://localhost:2368
如果有html输出,表明已经正确安装了。
配置Ghost
安装好Ghost后,还有一些地方需要配置。官方推荐需要配置的有两个地方:URL和Email。如果你只是一个个人博客的话,其实Email也可以不用配置。我就只配置了URL:
找到ghost目录下的config.js
并打开,修改production段的url属性为你的域名就可以了:
...
config = {
// ### Production
// When running Ghost in the wild, use the production environment.
// Configure your URL and mail settings here
production: {
url: 'http://2kb.co',
mail: {},
...
更详细的配置,可以去看官方文档。
Email的配置,可以参考这里。
安装pm2
上面使用npm start --production
启动的方法必须一直开着终端窗口,我们需要让Ghost在后台一直运行。我选择使用pm2作为node的进程管理工具,其他工具(如Forever、Supervisor)可以参考官方文档。
首先安装pm2:
npm install pm2 -g
然后启动Ghost:
NODE_ENV=production pm2 start index.js --name "Ghost"
其中--name "Ghost"
中的Ghost
可以换成你喜欢的名字。
查看Ghost的状态:
pm2 show Ghost
可以看到我的Ghost运行了两天,目前在线,还没有被重启过。
Describing process with id 0 - name Ghost
┌───────────────────┬──────────────────────────────────────────────┐
│ status │ online │
│ name │ Ghost │
│ restarts │ 0 │
│ uptime │ 2D │
...
安装nginx
Ghost自带HTTP服务器,通过配置是可以直接运行在80端口的。但是我们不这么做,我们要在Ghost前运行nginx来反向代理它。这样做有很多好处,其中一个就是你可以在一台VPS上部署很多Ghost,也可以部署其他的网站程序。
安装nginx:
sudo apt-get install nginx
如果你从源码安装,可以参考其他博文。使用apt-get方式安装,虽然可能不是最新稳定版,但是会自动为你生成适用于nginx的服务,执行启动、停止、重启等操作会方便很多。
配置nginx
安装好nginx后要对其进行一些配置,我要做这些配置:
- 在nginx配置文件目录下,建立一个存放虚拟主机配置文件的目录vhost;
- 在vhost目录里,创建适用于指定域名的配置文件;
- 使nginx启动时自动加载vhost目录里的所有
.conf
文件。
我的nginx配置文件在
/usr/local/nginx/conf/
目录,据我了解,不同的发行版可能会安装在不同的目录,请先确认你的配置文件目录。
第1步的目的是方便虚拟主机配置文件的统一管理,以后把新增加的域名的配置文件都放到这个目录里:
sudo mkdir /usr/local/nginx/conf/vhost
第2步,创建Ghost的配置文件(名字可以随便起,我都是按域名命名,以.conf
为后缀):
sudo touch /usr/local/nginx/conf/vhost/2kb.co.conf
文件内容为(注意把2kb.co
改为你的域名):
server {
listen 80;
server_name 2kb.co;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://127.0.0.1:2368;
}
}
第3步,修改nginx的主配置文件。
打开/usr/local/nginx/conf/nginx.conf
,在最后一个}
之前加入这样一行:
include vhost/*.conf;
重启nginx,使刚才的修改生效:
sudo service nginx restart
你也可以参考官方文档,和我的步骤不太一样。
开始使用
通过以上步骤,你就可以开始使用Ghost写作了,现在打开浏览器,输入你的博客地址就能看到Ghost的界面了。
然后通过http://你的博客域名/ghost
注册一个用户,开始写作吧!
我的博客是运行在DigitalOcean的最小Plan上的,每月5美元,很便宜。我选择了荷兰的机房,一般ping值在160ms左右,速度非常不错,值得推荐。
如果是国内VPS,推荐使用阿里云