手把手教你在小内存VPS上安装Ghost博客系统

在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后要对其进行一些配置,我要做这些配置:

  1. 在nginx配置文件目录下,建立一个存放虚拟主机配置文件的目录vhost;
  2. 在vhost目录里,创建适用于指定域名的配置文件;
  3. 使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,推荐使用阿里云

你可能感兴趣的:(手把手教你在小内存VPS上安装Ghost博客系统)