Ghostの1系がリリースされてからDockerイメージが作られるのを待っていたのですが、なかなか出てこないのでどうしたのかな~と思っていたら、忘れかけた頃にDockerイメージがリリースされました。そしてGhost自体もポンポンリリースされて1.5になっていました。
アップグレード手順
Ghostのサイトに1系へのアップグレード方法が掲載されていますが、さらに大雑把に言うとこんな感じです。
- 稼働中の0系のコンテンツを管理ページでJSON形式でエクスポート
- 新しいインスタンスで1系を起動
- 1系のサイトでコンテンツJSONをインポート、設定を調整
- 0系のサイトからユーザがアップロードした画像を1系に移植(コピー)
私の場合、0系で最終的にPostgreSQLがサポート外になってしまっていたこともあり、コンテンツをWebインターフェイス上でエクスポート→1系にインポートの手順は好都合でした。
困ったところ
1系のDockerイメージは記事などのデータをsqlite3で保存する設定で初期化されているような記述があって、Dockerコンテナ起動時にMariaDB(MySQL)に保存するよう指示するにはどうしたらいいのかが最も引っかかったところでした。
あと、0系の時と同様docker stack deploy
でサービス起動したかったので上記のことをdocker-compose.ymlで表現する必要があるのもちょっとだけひっかかりました。
起動時設定の変更方法
Ghost 1系ではGhost CLIを使って初期化とかサービス起動などの管理を行うように作られていて、Dockerfileを作るのはだいぶ苦労したそうです。
いざ使ってみようとするとGhostの設定ファイル(config.production.json)が既に作られた状態で起動が始まるため、例えばデータ保存先をMySQLに変えたいというような設定をどのタイミングで変えられるのかがさっぱりわかりませんでした。
コンテナ起動時に設定できるよう何かしらの用意はあるはずと調べた結果、環境変数を設定することでconfig.production.jsonの内容を上書きできるとのことです。ただ、設定する環境変数の名前が重要で、config.production.jsonのデータ構造をアンダーバー2つつなぎで表現し、なおかつすべて小文字にしないといけないんだそうです。
"url": "http://localhost:2368/",
"database": {
"client": "mysql",
"connection": {
"host": "DATABASE_HOST",
"port": 3306
}
}
というデータであれば
url=http://localhost:2368/
database__client=mysql
database__connection__host=DATABASE_HOST
database__connection__port=3306
こんなふうに定義しないといけないそうです。くれぐれもghost config
などで使用するパラメータ名(例: db
、dbhost
)を指定しないように。docker-compose.ymlで書くのであればenvironment
で定義すればOKです。
version: '2'
services:
ghost:
image: ghost:1
...(snip)...
environment:
url: http://localhost:2368/
database__client: mysql
database__connection__host: DATABASE_HOST
database__connection__port: 3306
...
無事に起動することを祈りましょう。
その他のポイント
Webインターフェイス上でインポートをすると、記事だけではなくGhostの設定のいくつかも復元されるようです。インポートするのであれば先にしてから各種設定を確認した方がいいと思います。
テーマはインポート対象にはならないようなので0系から移植するにはthemeディレクトリ以下にあるテーマ毎のディレクトリをコピーすることになります。そのままでは使えないと思いますが、テーマ用の1系へのアップグレード方法のドキュメントも用意されているので、適宜改修しましょう。
私は面倒に思ったのでしばらくはデフォルトのcasperにしますが、そのままだと記事をカード状に表示するところでかなりの長文で表示されてしまい、レイアウトがだいぶひどいことになります。casperテーマのpartials/post-card.hbs
ファイルにあるwords="33"
をcharacters="150"
(数値は自分で調整してください)に書き換えるとレイアウトはましになります(単語区切りではなくなってしまいますが)。
ということで、このブログも無事1系にアップグレードできたことですしちょいちょい書いていこうと思います。