How to install Ghost on CentOS7 and MariaDB

少し前にGhost初のメジャーバージョンがリリースされました。

Ghost 1.0は後方互換の無いアップデートで幾つもの大幅な変更がありました。

その中でGhostのインストール、設定、起動方法等も変わっています。1.0からはghost-cliを使ってGhostのインストール、設定、起動などができるようになりました。

Ghost1.0をインストールするための環境として、以下が推奨されています。

  • Ubuntu 16.04
  • MySQL
  • NGINX (minimum of 1.9.5 for SSL)
  • Systemd
  • Node v6 installed via NodeSource
  • At least 1GB memory (swap can be used)
  • A non-root user for running ghost commands

Pre-requisites

私は上記以外の環境でGhostを動かしたいので、今回これを無視して以下の環境でGhostを動かします。

  • CentOS7
  • MariaDB
  • h2o

ghost-cliはインタラクティブにセットアップしていくこともできますが、オプションをつけることでプログラマブルにセットアップすることも可能です。

今回はプログラマブルにセットアップする方法を書きます。

TL;DR

Install ghost-cli

  1. install Node.js

  2. install ghost-cli

    npm install -g ghost-cli@latest
    

Install Ghost

yes | /usr/lib/node_modules/ghost-cli/bin/ghost install \
--no-stack \
--no-start \
--no-setup-nginx \
--no-setup-linux-user \
--no-setup-mysql \
--no-setup-systemd \
--pname ghost-blog \
--dir /var/www/ghost \
--url <Blog url ex) https://blog.example.com/> \
--port 2368 \
--ip 127.0.0.1 \
--db mysql \
--dbhost localhost \
--dbuser <DB user> \
--dbpass <DB password> \
--dbname <DB name>

Add systemd service file

  1. Add /etc/systemd/system/ghost.service.
[Unit]
Description=Ghost systemd service for blog: your-blog
Documentation=https://docs.ghost.org
   
[Service]
Type=simple
WorkingDirectory=/var/www/ghost
User=root
Environment="NODE_ENV=production"
ExecStart=/usr/bin/node /usr/lib/node_modules/ghost-cli/bin/ghost run
Restart=always
   
[Install]
WantedBy=multi-user.target
  1. Reload systemd manager configuration.

    systemctl daemon-reload
    

Start Ghost

systemctl start ghost

Ghost-CLIでGhostをインストールする

推奨の環境と異なる環境へGhostをインストールする場合、いくつかコツが必要でした。

  • 環境チェック(OSの確認など)、ミドルウェアのセットアップをスキップするオプションをつける

    --no-stack
    --no-setup-nginx
    --no-setup-linux-user
    --no-setup-mysql
    
  • systemdも自分でセットアップするのでsystemdのセットアップ、インストール後の起動をスキップするオプションをつける(CentOSとUbuntuではsystemdの設定ファイルのpathが異なるため、ghost-cliは使えず自分でセットアップする必要がある)

    --no-start
    --no-setup-systemd
    
  • MySQLのインストール有無のチェックが--no-promptをつけると失敗してしまうので(MySQLが入っていないことを無視できない)、yesコマンドで回避

あとはDBのパスワードなど必要なオプションを埋めていくと以下のようなコマンドになります。

yes | /usr/lib/node_modules/ghost-cli/bin/ghost install \
--no-stack \
--no-start \
--no-setup-nginx \
--no-setup-linux-user \
--no-setup-mysql \
--no-setup-systemd \
--pname ghost-blog \
--dir /var/www/ghost \
--url <Blog url ex) https://blog.example.com/> \
--port 2368 \
--ip 127.0.0.1 \
--db mysql \
--dbhost localhost \
--dbuser <DB user> \
--dbpass <DB password> \
--dbname <DB name>

これでGhostのインストールと設定は完了です。

systemdの設定は/etc/systemd/system/ghost.serviceを設置してsystemctl daemon-reloadすればOKです。ghost.serviceの中身は以下。

[Unit]
Description=Ghost systemd service for blog: your-blog
Documentation=https://docs.ghost.org

[Service]
Type=simple
WorkingDirectory=/var/www/ghost
User=root
Environment="NODE_ENV=production"
ExecStart=/usr/bin/node /usr/lib/node_modules/ghost-cli/bin/ghost run
Restart=always

[Install]
WantedBy=multi-user.target

あとはGhostを起動すればOK。h2oとかNginxの設定とかはよしなに。

systemctl start ghost

感想

Ghostを動かすには基本的にNode.jsのバージョンを合わせるのと、MySQL互換のDBが使われていれば良いはず。

推奨環境としてOSとか色々提示されているけど、ghost-cliでGhostをセットアップするための意味合いが強そう。

今までsystemdのファイルを自作したり、アップデートスクリプトを自作したりしていたけどその辺のGhostの運用がghost-cliにまとめられたので便利になった…のかな。

Ghostの設定はほかにもメールやログの設定ができます。必要に応じて追加していきたい。

参考リンク