ブログに特化したCMS「Ghost」をさくらのVPSにインストールしてみた

WordPressからGhostに移行しました。
移行の主な理由として、ページ読み込みのレスポンス速度を向上させたかったのです。実際に移行した結果、定量的に見てはいないのですが体感的にかなり速くなったと実感しています。手順を以下に記載します。

前提

  • さくらのVPS上にインストール
    • CentOS6.6

Node.jsインストール

Node.jsのバージョンは下記サポートバージョン確認ページから選定しました。
http://support.ghost.org/supported-node-versions/

$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh
$ nvm install v4.8.1
$ nvm use v4.8.1
$ node -v

Ghostインストール

$ curl -L https://ghost.org/zip/ghost-latest.zip -o ghost.zip
$ sudo mkdir /var/www/ghost
$ sudo chown tomohirokogawa:tomohirokogawa /var/www/ghost
$ unzip -uo ghost.zip -d /var/www/ghost
$ cd /var/www/ghost && npm install --production
$ npm start --production
$ vi config.js

Note--------------  
下記プロダクションコンテキストのurl設定を自ドメインに変更

config = {  
    production: {
        url: 'http://自ドメイン', 
    }
}
------------------

80番ポートは指定できないので注意が必要です。
僕は上記を知らなかったため、テスト用に80番ポートで動かそうとして時間を大分浪費しました。。
関連記事
http://9ensan.com/blog/programming/javascript/node/node-listen-80-server/

80番ポートは後述の「Nginxインストール/設定」でアクセスできるようにします。

Foreverインストール/設定

ForeverとはNode.jsのアプリをデーモン化してバックグラウンドで実行できるようにするものです。

$ npm install forever -g
$ pwd
/var/www/ghost

Note--------------  
ghost配置ディレクトリにいることを確認  
------------------

$ NODE_ENV=production forever start index.js
$ forever list

Nginxインストール/設定

$ sudo vi /etc/yum.repos.d/nginx.repo

Note--------------  
下記を記述

[nginx]
name=nginx repo  
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/  
gpgcheck=0  
enabled=0  
------------------

$ sudo yum -y --enablerepo=nginx install nginx
$ sudo nginx -t
$ sudo service nginx start 
$ sudo chkconfig nginx on 
$ sudo vi /etc/nginx/conf.d/http.conf

Note--------------  
下記を記述

server_tokens off;  
server_name_in_redirect off;  
etag off;  
client_max_body_size 100m;  
client_body_buffer_size 256k;

gzip on;  
gzip_http_version 1.0;  
gzip_comp_level 1;  
gzip_proxied any;  
gzip_vary on;  
gzip_buffers 4 8k;  
gzip_min_length 1000;  
gzip_types text/plain  
           text/xml
           text/css
           text/javascript
           application/xml
           application/xhtml+xml
           application/rss+xml
           application/atom_xml
           application/javascript
           application/x-javascript
           application/x-httpd-php;
gzip_disable "MSIE [1-6]\.";  
gzip_disable "Mozilla/4";

proxy_headers_hash_bucket_size 128;  
proxy_headers_hash_max_size 1024;  
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 keys_zone=my-key:8m max_size=50m inactive=120m;  
proxy_temp_path /var/cache/nginx/proxy_temp;  
proxy_buffers 8 64k;  
proxy_buffer_size 64k;  
proxy_max_temp_file_size 0;  
proxy_connect_timeout 30;  
proxy_read_timeout 120;  
proxy_send_timeout 10;  
proxy_cache_use_stale timeout invalid_header http_500 http_502 http_503 http_504;  
proxy_cache_lock on;  
proxy_cache_lock_timeout 5s;  
------------------

$ sudo vi /etc/nginx/conf.d/header.conf

Note--------------  
下記を記述

proxy_set_header Host $host;  
proxy_set_header X-Real-IP $remote_addr;  
proxy_set_header Remote-Addr $remote_addr;  
proxy_set_header X-Forwarded-Host $http_host;  
proxy_set_header X-Forwarded-Server $host;  
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
proxy_set_header Accept-Encoding "";  
proxy_set_header X-Sendfile-Type X-Accel-Redirect;  
proxy_hide_header X-Pingback;  
proxy_hide_header Link;  
proxy_hide_header ETag;  
------------------

$ sudo vi /etc/nginx/conf.d/virtual.conf

Note--------------  
下記を記述(管理画面のパスにはIP制限を実施しています)

server {  
  listen 80;
  server_name 自ドメイン;

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

  location /ghost/ {
      proxy_set_header   X-Real-IP $remote_addr;
      proxy_set_header   Host      $http_host;
      proxy_pass         http://127.0.0.1:2368;
      allow 自分のグローバルIP;
      deny all;
  }
}
------------------

$ sudo service nginx configtest
$ sudo service nginx start

以上の手順にて、設定したドメイン名でGhostの初期ページを見ることができたと思います。
ドメイン名/ghost で管理画面にアクセスし、初期アカウントの設定が完了したら晴れてGhostユーザーの仲間入りですね。
ドキュメントがまだまだ少ないので、失敗した場合はGithubのissue見たりして対応するというちょっと辛い感じになりますが、Ghostを使おうと決意された方なら問題ないと思います!

根拠は特にないですが、、

備考

WordPressからGhostに記事の移行ができるプラグインがあるようなのでご紹介しておきます。
ちなみに僕は使用しませんでした。手動で移行ができる記事件数のブログだったので。。
https://ja.wordpress.org/plugins/ghost/

参考文献