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
私は上記以外の環境でGhostを動かしたいので、今回これを無視して以下の環境でGhostを動かします。
- CentOS7
- MariaDB
- h2o
ghost-cliはインタラクティブにセットアップしていくこともできますが、オプションをつけることでプログラマブルにセットアップすることも可能です。
今回はプログラマブルにセットアップする方法を書きます。
TL;DR
Install ghost-cli
-
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
- 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
-
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の設定はほかにもメールやログの設定ができます。必要に応じて追加していきたい。