Node.jsベースのBlogプラットフォーム"Ghost"

そもそもどうして使うようになったのかというと、前の投稿に関係している。

自前のサーバーでいろいろ稼動しているアプリをサブドメイン化して整理しようとしたところ、以前使っていたWordpressがどうしてもサブドメイン化がうまくいかない(80番ポートでしか動作しない?)のと、javascript+Node.jsへ一本化して、ApacheやPHPなどと決別したくなったのが発端である。

肝心のブログプラットフォームで、Node.jsで稼動するものがないか探したところこのGhostに出会ったわけである。

生まれたばかりということもあり、Wordpressと比較すると分が悪い評価が多い。とくにプラグインがビルドインされた機能以外ない(そのうちプラグイン機能はリリースされるが)ので、べた褒めしている紹介は皆無。だが実際に触ってみると、使い心地が良く一目惚れして乗り換えてしまった。

Ghostとは?

本家:https://ghost.org/download/
開発者向け:https://ghost.org/developers/

  • kickstarterでローンチされたオープンソースのブログソフトウェア
  • Node.js上で動作するWebアプリケーション
  • マークダウン記法でブログを作成(htmlタグももちろん使える)
  • Wordpressに似ている箇所が多く非常にシンプルな構成
  • まだベータ版?
  • テーマのカスタマイズはWordpressライクでよりシンプル。APIが用意されている(ベータ版)
  • デフォルトのDBはsqlite、MySQL、PostgreSQLも可能

インストール

注意すべきは、稼動する環境のNode.jsのバージョンである。
http://support.ghost.org/supported-node-versions/
2016/05/12現在では、ver5.0以上をサポートしない
起動時にエラーになったはずなので、5.0未満で稼動させる必要がある。

インストールの流れとしては、ghost本体をダウンロード&解凍して、npm installを実行するだけである。

> wget https://ghost.org/zip/ghost-latest.zip
> unzip ghost-0.7.8.zip
> cd ghost-0.7.8
> npm install --production
ghost@0.7.8 preinstall /home/hoge/ghost-0.7.8
npm install semver && node -e "require('./core/server/utils/startup-check.js').nodeVersion()"
 
semver@5.1.0 node_modules\semver
:
bookshelf@0.9.1 node_modules\bookshelf
├── create-error@0.3.1
├── inflection@1.8.0
└── core-js@1.2.6
 
intl@1.0.1 node_modules\intl
 
sqlite3@3.1.1 node_modules\sqlite3
└── nan@2.1.0

初期設定

本体の中に、雛形の設定ファイルが用意されているので、config.jsとしてコピーする。
ホスト名ポート番号DBメールの設定をjson形式で定義する。

注意点としては、メールの設定をしなくても稼動はするが、パスワードを忘れてログインできなくなった場合に設定したメールアドレスに復旧用のURLが送信される。設定してないとアクセスできなくなるので、なるべく早めに設定しておいたほうが良い。

使用するDBだが、ブログという性質上、参照がほとんどなので、sqliteが向いている気がする。
よくディスられるが、クエリの応答スピードも良い。DBに登録されるのは文字列や数字のメタ情報のみで、投稿に貼り付ける画像などはフォルダ管理になる。そこまで肥大化しないし、なにより1個のファイルで済んでしまう。軽快さをウリにしているGhostにぴったりだと思う。

// 公開モード
config.production.url = "http://blog.hoge.com"
config.production.server.host = "xxx.xxx.xxx.xxx"
config.production.server.port = "2368"
config.production.database.client="sqlite3"
config.production.database.connection.filename="/xxx/xxx/content/data/ghost.db"
config.production.mail.transport="SMTP"
config.production.mail.options.service="smtp.xxx.com"
config.production.mail.options.auth.user="hoge"
config.production.mail.options.auth.pass="password"

// 開発モード( 設定する内容はproductionと同じ )
config.development.url = 
:

ちなみにプロキシ経由で構築する場合、urlで設定するホスト名は、外部からアクセスするときのホスト名になっている必要がある。上記の場合、サーバーが2368ポートでListenしているとして、外部からは80ポート経由でアクセスしてもらう場合、urlをhttp://blog.hoge.com:2368としてしまうと、アクセスできなくなってしまうので注意する。

Ghost起動

初回起動は、指定したデータベースに必要なテーブルを自動生成して完了後に起動する。 とりあえず開発者モードで起動してみる。

>npm start --development
> ghost@0.7.8 start /xxx/hoge/ghost-0.7.8
> node index
 
WARNING: Ghost is attempting to use a direct method to send email.
It is recommended that you explicitly configure an email service.
Help and documentation can be found at http://support.ghost.org/mail.
 
Migrations: Database initialisation required for version 004
Migrations: Creating tables...
Migrations: Creating table: posts
Migrations: Creating table: users
Migrations: Creating table: roles
Migrations: Creating table: roles_users
Migrations: Creating table: permissions
Migrations: Creating table: permissions_users
Migrations: Creating table: permissions_roles
Migrations: Creating table: permissions_apps
Migrations: Creating table: settings
Migrations: Creating table: tags
Migrations: Creating table: posts_tags
Migrations: Creating table: apps
Migrations: Creating table: app_settings
Migrations: Creating table: app_fields
Migrations: Creating table: clients
Migrations: Creating table: client_trusted_domains
Migrations: Creating table: accesstokens
Migrations: Creating table: refreshtokens
Migrations: Populating fixtures
Migrations: Populating permissions
Migrations: Creating owner
Migrations: Populating default settings
Migrations: Complete
Ghost is running in production...
Your blog is now available on http://localhost:2368
Ctrl+C to shut down

ちゃんと起動しているかアクセスしてみる

一般向け

http://localhost:2368

投稿者、管理者向け

http://localhost:2368/ghost

マークダウンについて

以下に使用できるMarkdown記法の一覧がある
http://support.ghost.org/markdown-guide/

イメージの挿入も ![] と記述するとプレビュー画面に画像エリアが表示されるので、ここにファイルをドラッグすると、自動でアップロードされる仕組みになっていたり、投稿編集画面がとても軽快に動作する。Wordpressよりもストレスがないのが良い。

ちなみに上記で貼り付けた画像ファイルは、以下に保存される。ファイル名が重複すると自動的に連番が振られる仕組みになっている。

[ghostルートディレクトリ]/content/images