読者です 読者をやめる 読者になる 読者になる

Ghost のバージョンアップ(0.7.8 to 0.11.2)

しばらくサボってたら一気にバージョンが上がっているじゃないですがか、ghost blog platform。

ghost.org

サボりのツケを払うべく、バージョンアップ作業したので参考として記録しておきます。

やってることは過去記事と同じです……。

a244.hateblo.jp

関連:Ubuntu 15.10 Server 版を 16.04LTSにアップグレード - ながいものには、まかれたくない

やったこと

teenyレベルではなくminorバージョンアップなので覚悟して作業する必要があります。

幸いなことに、0.7.xから0.11.x へのバージョンアップは記事数に応じて時間がかかるものの、問題なく移行できるとのこと。

参考:How to Upgrade Ghost - Ghost SupportGhost Support

環境

  • Ubuntu 16.04 LTS
  • ghost のバージョン: 0.7.8 to 0.11.2

ghost の展開先は/var/www/en/ghost。作業ユーザはghost。サービスの管理はsystemdです。

手順の確認

  1. 記事本文のエクスポート
  2. 新しいバージョンのソースアーカイブを入手・展開
  3. サービスの停止
  4. データのバックアップ
  5. ファイルの差し替え(削除してコピー)
  6. モジュールの更新
  7. 動作確認
  8. サービスの再起動

実際の作業

1. 記事本文のエクスポート

先にghostの管理画面にログインし、"Lab"メニューからjsonファイルをエクスポート。

2. 新しいバージョンのソースアーカイブを入手・展開

$ wget https://github.com/TryGhost/Ghost/releases/download/0.11.2/Ghost-0.11.2.zip

作業フォルダを作成してそこに展開。

$ mkdir upgrade_ghost
$ unzip Ghost-0.11.2.zip -d upgrade_ghost

3. サービスの停止

$ sudo systemctl stop ghost-en
$ cd /var/www/en
$ sudo cp -r ghost ghost_backup

systemd経由で起動するようにしているので、systemdctlです。

5. ファイルの差し替え(削除してコピー)

/var/www/en/に移動し、作業ユーザーにsuして作業。

$ cd ghost
$ sudo su ghost

まず、coreというディレクトリをリネームして退避(後で削除して問題ないです)。

拡張子が*.mdのファイルは削除しても問題ないですが、絶対にconfig.jscontentsディレクトリだけは削除しないように注意。

$ mv core core_old
$ cp -r upgrade_ghost/core .
$ cp upgrade_ghost/{Gruntfile.js,package.json,index.js,npm-shrinkwrap.json} .

ファイルの更新日時が変更されていることを確認。

$ ls -l 
skip

ついでにデフォルトのテーマも更新(上書きコピー)

$ cp -R upgrade_ghost/content/themes/casper content/themes/

odinテーマを使用していますが、特に更新されていないようなのでそのまま。

6. モジュールの更新

$ rm -rf node_modules/
$ npm cache clean
$ npm install --production

7. 動作確認

この時点で一度、直接起動してみます。心臓に悪いですが、祈りながらEnterキーを押しましょう。

$ npm start --production

"Migrations: Finished!" というメッセージを出力して入力待ちになったらOK。

Webブラウザからサーバーにアクセスして問題なさそうならCtrl+Cで終了。本来のポート番号は2368です*1

作業ユーザーのシェルからログアウト。

$ exit

8. サービスの再起動

$ sudo systemctl start ghost-en

正常に稼働しているかブラウザからアクセスして問題なければ完了。

管理画面にログインしてバージョンを確認しておきます。

f:id:atuyosi:20161024012827p:plain

まとめ

安直にcoreだけ更新すればいいかと思ったら、途中で何度かエラーの嵐に遭遇しました。無事に作業完了ってことでめでたしめでたし。

*1:Nginxと組み合わせている場合は該当する環境に応じて変更