佐藤です。
このブログ、Personal FactoryGhostというNode.js製のブログサービスで運用されています。
この度、ブログの運営を本家Ghost Proというホスティングサービスにお引っ越ししました。
それに伴いSSL化にもなりました。
嬉しいです。
今回はお引っ越し過程を残して行きたいと思います。

引越し前の問題点

ブログの運営はConoHaというGMOが運営しているVPSサービスでサーバーを1つ借りてそれにGhostの環境が入ったDockerをいれて運営していました。

詳しくはこちらの記事をご覧ください。

ConoHa + Docker + ghostで30分で技術ブロクを作る

なるべく運用が楽になるようにとDockerを入れました。
GhostがインストールされたDockerイメージをDockerHubから取ってきてConoHaのVPSにインストールするという簡単運営。

しかし、これで技術ブログを続けて1年たったときに困ることがありました。

Ghostのバージョンアップができない!!

Ghostは開発スピードが早いソフトウェアでどんどんバージョンアップがされていきます。
気づいたら最新が1.19バージョンになっているのに、ブログにインストールされているのは0.7になっていました。

これはいけないと思い、アップデートを試みました。
ところで私、 インフラあんまり得意じゃないので、「DockerHubから取ってきてまたインストールすればいいかな」と思っていたのです。

とんでもなく甘かった。。

なんとDockerのバージョンが上がり、Dockerが動くOSがCentOSなら7.0以上になってしまったのです。
ConoHaのVPSはCentOS6.5でした。

公式サイトでもこんな記述があります。

OS requirements
To install Docker EE, you need a maintained version of CentOS 7. Archived versions aren’t supported or tested.
OS要件
Docker EEをインストールするために、CentOS7を利用する必要があります。アーカイブバージョンはサポートもテストもされません。

なんとかしたいと思いました。

一度VPSのCentOSをCentOS7へアップデートすればいいかと思いましたが、そこまでやる手間を考えると躊躇してしまいます。
失敗したらブログ飛んでしまいますし。。
まず何をやりたいのかを整理してみました。

要件整理

  • 運用は楽にしたい
    • 自分は技術ブログ記事を書きたいんであってインフラ周りのあれこれをしたいわけじゃない
  • 今まで書いた記事はそのまま使いたい
    • WordPressとかに移行するのはなし。
  • SSL対応をしたい。
    • HTTPSでブログを運用したいんです!HTTPだけだとかっこ悪い。

Ghost Proで運用する

要件を全部満たす方法をいろいろ検討した結果、Ghostを開発しているところが提供しているGhost Proというホスティングサービスが上手くいけそうなのでそちらに乗り換えることにしました。

Ghost Proならば、

  • 常に最新バージョンのGhostを使うことが出来る。
  • 運用はすべておまかせ
  • 今までVPSで書いた記事のインポートも楽
  • SSL対応、カスタムドメイン対応ができる。

といたれりつくせりでした。

料金について。

----------2017-12-29-23.28.56
Pricing

一番安いプランで1ブログ月5万ビューまでで年間契約で月19ドル。(年間でないと月29ドル)
まずまずな値段です。
14日無料でまず試すことができます。
問題なし。
とりあえずアカウントを作ってみました。
カスタムドメインも対応できるとのことでしたが、デフォルトではxxxxx.ghost.ioというドメインを取得できるみたいです。

https://personal-factory.ghost.io

というブログを開設しました。
あとでカスタムドメインに対応します。

今までの記事をインポートする

ConoHaで運用していたブログコンテンツをGhost Proで作成したブログへインポートをしました。

Ghostの機能の1つにエクスポート機能があり、今まで書いた記事を全てJSONファイルとして出力ができるのです。

----------2017-12-29-23.42.56-1

なので、ConoHaの方のブログでエクスポートしてGhost Proの方でインポートすれば、今まで書いた記事を全てGhost Proに反映することができました。

今までの記事の画像をインポートする

上記の方法だとブログの記事やブログの設定(タグづけやログインユーザー設定)は引き継げるのですが、画像は引き継げません。

どうすればいいのかなと思っていましたら、公式に書いていました。

Import/Export Data

Exporting Images
If you are planning to export your Ghost(Pro) data into a self-installed version of Ghost, note that your images will not migrate with the rest of your blog settings and data. You will need to write to support@ghost.org to request your image directory.
もし自分でインストールしたGhostブログからGhostProに画像を入れたいならサポートに問い合わせてね!

なるほど。ここは手動運営なのでね。
とりあえず言われたとおりにConoHaのVPSにログインしてGhostブログのイメージをローカルにSCPしました。
そしてその画像をZipに固めてsupport@ghost.orgへ依頼のメールに添付して送信しました。

すると翌日、対応完了したとのメールが来ていました。

Thanks for contacting us - and using Ghost! :) I have uploaded your images to your blog for you. If you have any trouble with viewing them, please let me know. I'm happy to help!

実際Ghost Proのブログで画像が適応されていました。
仕事がはやい。

さすが!

Ghost Proをカスタムドメイン対応する

ここがけっこう手こずったところでした。

ドメインpersonal-factory.comはお名前ドットコムで登録していました。

Ghost Proのドキュメントを見ると、ドメインのレジストリ会社iwantmynameが推奨されているようでした。

Custom Domain Setup

ならば仕方がありません。
ドメインのお引っ越しをすることにしました。

この話はまた別記事でまとめます。

常時SSLに対応する

今時HTTPだけのサイトってかっこ悪いじゃないですか!?
今の時代、常時SSLに対応したいものです。

Ghost ProのドキュメントをみるとCloudflareというCDNサービスを提供している企業と連携することができるとのこと。

SSL Setup with CloudFlare – Ghost

早速やってみました。

Cloudflareの無料アカウントを作成すると、ドメインを指定するフォームが現れました。
どうやら、Cloudflareが独自に用意するネームサーバーを指定することでDNS設定管理をiwantmynameではなく、Cloudflareに移していくみたいです。

CloudflareでDNS設定を登録します。

----------2017-12-30-01.25.34

Cloudflareの独自のネームサーバーをiwantmynameで登録します。
ネームサーバーは以下でした。

Type	Value
NS	melinda.ns.cloudflare.com
NS	woz.ns.cloudflare.com

これをiwantmynameの設定画面で指定します。

----------2017-12-30-01.28.54

CloudflareでCrypto画面でAlways use HTTPSをONにします。

----------2017-12-30-01.30.32

最後にGhost Proの管理画面でPublications > Settingで**I'm using CloudFlare UniverSSL and want to force SSL everywhere.**にチェックを入れればOKです。

----------2017-12-30-01.34.49

あとで確認したところ、CloudFlareの無料アカウントのSSLはSNIを使った共有SSLとのことでした。

無料でSSL使える時代きてた!CloudFlare最高!!!(?) - uzullaがブログ

SNIのデメリットはクライアント側で使えない場合がある可能性があるとのこと。

SNIとは?
NameBaseのVirtualHostをSSL通信でも可能にするものです。HTTPSは旧来ドメイン毎にIPがかならず一つ必要でしたが、その制限を回避するためのものですね。
これが一般的につかわれていないのは、クライアント側の対応が微妙だからです。とはいえ、今ならごく一部の端末を除けば無視してもよいケースは多いのではないでしょうか。
具体的には、Windows XPと、Android 2.x系の通信ができない事が問題でしょう。
あるいは、curlやwgetなどのブラウザ以外のhttpクライアントも結構微妙な所があります。(curlやwgetのバージョンが問題というより、OpenSSLのバージョンが問題になる)

今回では個人用ブログ用にSSLをするのでクライアントの問題は目をつぶろうかと思います。

引っ越しして

なんだかんだでいろいろなサービスにまたがった作業が多く手間がかかりましたが、引っ越しは完了しました。

とても良いです。

SSLになったし、Ghostのバージョンは最新になりました。
(最新Ghostバージョンエディターがけっこう使いやすい!)
嬉しい!