Ghost ver0.xからver1.xへの移行 (その1)

ずいぶん前にGhost ver1.0がリリースされていたもののメンドくさいという理由で移行を渋っていたが、ふとしたタイミングでその気になったので、その備忘録を残しておく。

Ghost ver1.xから、少しだけエディタが強化されて、Markdown用のツールバーが増えたことや、色々ブラッシュアップされているのが、一番の理由になる。

ただし、ヘルパーの一部で入れ替えが発生するのと、DBの互換性がないのがネックになる。特に自前でテーマを作成している場合は、何箇所か修正が発生する模様。

あと、最初に断っおくと、Ghostのインストールや更新は、Ghost-CLIを使うのを推奨されているが、下記方法では使用しない。

事前準備

以下から最新版のパッケージをダウンロードしておく。

Ghost Developer Area

Node.jsのバージョンもずいぶん上がっているので、おそらくバージョンアップを余儀なくされると思われる。ちなみに直接GitHubから直接クローンを取得して環境構築したところ、/ghost管理者ページにアクセスできない現象があったので、素直に公開されているzipファイルを使用する。

Supported Node Versions

Nodeに関しては、"n"というツールで管理したほうが手っ取り早いはずだが、ここではnode.jsのバージョンアップに関しては省略する。

あと、以下のツールが必要になるみたいなので、これもインストールしておく。ver0.xの場合は、初回起動時DBの生成が自動で行われていたが、どうもver1.xではDBの作成は、configファイルの内容から以下のツールが自動で生成するようになり、DB作成しないと起動しない動きになっていた。

knex-migrator

> npm install -g knex-migrator --save

Ghost v1.xの環境構築

まず、設定ファイルに関してだが、ver0.xのときは、雛形となるconfig.jsファイルをコピーして設定を変更する手順だったが、ver1.xではなくなっている。
サーバー関連の設定ファイルは以下に移動されている。

> cd [ghost directory]/core/server/config/env
> ls -l
config.development.json
config.testing-mysql.json
config.production.json
config.testing.json

debug用のconfig.development.jsonとリリース用のconfig.production.jsonが用意されている。

config.development.jsonはDBにsqlite3が設定されている

{
    "url": "http://localhost:2368",
    "database": {
        "client": "sqlite3",
        "connection": {
            "filename": "content/data/ghost-dev.db"
        },
        "debug": false
    },
    "paths": {
        "contentPath": "content/"
    },
    "privacy": {
        "useRpcPing": false,
        "useUpdateCheck": true
    },
    "useMinFiles": false,
    "caching": {
        "theme": {
            "maxAge": 0
        },
        "admin": {
            "maxAge": 0
        }
    }
}

production用は、mysqlになっている。

{
    "database": {
        "client": "mysql",
        "connection": {
            "host"     : "127.0.0.1",
            "user"     : "root",
            "password" : "",
            "database" : "ghost"
        }
    },
    "paths": {
        "contentPath": "content/"
    },
    "logging": {
        "level": "info",
        "rotation": {
            "enabled": true
        },
        "transports": ["file", "stdout"]
    }
}

まず最初にghostのpackage.jsonを元に必要なライブラリをインストールする。
これを実施しておかないと、後述するknex-migratorの実行に失敗する。

> npm install

productionの場合は、

> npm install --production

次に先ほどインストールしたknex-migratorを使ってDBを作成する。

> knex-migrator init
[2017-10-14 09:38:49] INFO Creating table: posts 
[2017-10-14 09:38:49] INFO Creating table: users 
[2017-10-14 09:38:49] INFO Creating table: roles 
[2017-10-14 09:38:49] INFO Creating table: roles_users 
[2017-10-14 09:38:49] INFO Creating table: permissions 
[2017-10-14 09:38:49] INFO Creating table: permissions_users 
[2017-10-14 09:38:49] INFO Creating table: permissions_roles 
[2017-10-14 09:38:49] INFO Creating table: permissions_apps 
[2017-10-14 09:38:49] INFO Creating table: settings 
[2017-10-14 09:38:49] INFO Creating table: tags 
[2017-10-14 09:38:49] INFO Creating table: posts_tags 
[2017-10-14 09:38:49] INFO Creating table: apps 
[2017-10-14 09:38:49] INFO Creating table: app_settings 
[2017-10-14 09:38:49] INFO Creating table: app_fields 
[2017-10-14 09:38:49] INFO Creating table: clients 
[2017-10-14 09:38:49] INFO Creating table: client_trusted_domains 
[2017-10-14 09:38:49] INFO Creating table: accesstokens 
[2017-10-14 09:38:49] INFO Creating table: refreshtokens 
[2017-10-14 09:38:49] INFO Creating table: subscribers 
[2017-10-14 09:38:49] INFO Creating table: invites 
[2017-10-14 09:38:49] INFO Creating table: brute 
[2017-10-14 09:38:49] INFO Model: Post 
[2017-10-14 09:38:49] INFO Model: Tag 
[2017-10-14 09:38:49] INFO Model: Client 
[2017-10-14 09:38:49] INFO Model: Role 
[2017-10-14 09:38:49] INFO Model: Permission 
[2017-10-14 09:38:50] INFO Model: User 
[2017-10-14 09:38:50] INFO Relation: Role to Permission 
[2017-10-14 09:38:50] INFO Relation: Post to Tag 
[2017-10-14 09:38:50] INFO Relation: User to Role 
[2017-10-14 18:38:51] INFO Finished database init! 

developmentモードで実行されているので、sqlite3のDBが作成されている。

> cd content/data
> ls -l
-rw-r--r-- 1 hoge hoge    121 10月 10 12:40 README.md
-rw-r--r-- 1 hoge hoge 339968 10月 14 18:42 ghost-dev.db

ちなみに、productionモードの場合は

> NODE_ENV=production knex-migrator init

Ghost ver1.xの起動

ここは以前と変わらず

> npm start

> ghost@1.13.0 start /var/ghost
> node index

[2017-10-14 09:42:41] INFO Ghost is running in development... 
[2017-10-14 09:42:41] INFO Listening on: 127.0.0.1:2368 
[2017-10-14 09:42:41] INFO Url configured as: http://localhost:2368/ 
[2017-10-14 09:42:41] INFO Ctrl+C to shut down 
[2017-10-14 09:42:41] INFO Ghost boot 4.047s 

productionモードの場合は、

> npm start --production

ブログへアクセスしてみる

サーバーの起動ログにあるURLからアクセスしてみる

> http://localhost:2368

デフォルトのテーマで起動すればとりあえず成功である。
新しいcasperのテーマは一段とデザインが良くなっている。

管理者ページに行く場合は、以前と変わりなく/ghostをURLに付与してアクセスする。

> http://localhost:2368/ghost

とりかえず長くなったので、次回に続きを投稿する。