docker-composeによる、Ghost CMSのセットアップ例

はじめに
前回の記事で建てたdocker-composeなmysqlサーバを前提に話が進んでいます。
他の方法でmysqlを建ててる人は、適宜読み替えるなりなんなりしてください。
MySqlをセットアップする記事は以下です。
docker-composeによる、mysqlのセットアップ例
docker-composeによる、mysqlのセットアップ例
技術メモなんかをつけるためにCMSを探してたら、いい感じなものがあったので、Ghost CMSというものをdocker-composeで組み立ててみた。
そのCMSの前提にMySQLを求められたので、けど、公式のdocker-composeのように、本体とDBをひとくくりにしたくなかったので、MySQLを単体で建てるおはなし。

書いてる人は、フロントエンドの人間なので、ツメが甘いところがあるかもしれないけれど、そのあたりはご容赦を。
概要
能書き
ghost公式の情報によると、mysqlとghost本体を同じcomposeに入れてしまってる。
ただ、複数のトピックを別のシステムとして管理したい、または、他のシステムでmysqlを利用しているという事情の場合、これらを分離した方が効率がいいこともあるので、分離した例。
なお、mysql側データとghost側のデータは、個別にgit管理している。
構成図
ghost/
.env
docker-compose.yml
start.sh
data/
下準備
docker-compose.yml
mysql側で生成したネットワークに同居するために、network
節を書いてあげる。
services:
ghost:
container_name: example.ghost
image: ghost:alpine
restart: always
ports:
- 8888:2368 # <- ポート番号はお好みで。
environment:
database__client: mysql
database__connection__host: ${MY_SQL_HOST_NAME}
database__connection__user: ${GHOST_USER_NAME}
database__connection__password: ${GHOST_USER_PASSWORD}
database__connection__database: ${GHOST_DB_NAME}
url: https://ghost.example.com/
NODE_ENV: production
networks:
- mysql-network
volumes:
- ./data/ghost:/var/lib/ghost/content
networks:
mysql-network:
name: service.mysql # <- mysql側で指定したものと同じ名前
external: true
.env
MY_SQL_HOST_NAME=example.mysql # <- mysql側docker-composeのcontainer_nameと同じものを指定
MY_SQL_HOST_IP=127.0.0.1 # <- start.shで使う。
### GHOST ###
GHOST_DB_NAME=<DBの名前>
GHOST_USER_NAME=<そのDBを使うユーザ名>
GHOST_USER_PASSWORD=<そのユーザのパスワード>
db.conf
後述のstart.sh
でログインするための情報
[client]
user = root
password = <password> # <- mysql側.envのMYSQL_ROOT_PASSWORDと同じものを指定
start.sh
ghostで使用するDBと、ユーザをmysqlに入れ込んでる。
#! /bin/bash
source ./.env
mysql --defaults-extra-file=./conf/db.conf --host="${MY_SQL_HOST_IP}" --execute="CREATE DATABASE IF NOT EXISTS ${GHOST_DB_NAME};";
mysql --defaults-extra-file=./conf/db.conf --host="${MY_SQL_HOST_IP}" --execute="CREATE USER IF NOT EXISTS '${GHOST_USER_NAME}'@'%' IDENTIFIED BY '${GHOST_USER_PASSWORD}'";
mysql --defaults-extra-file=./conf/db.conf --host="${MY_SQL_HOST_IP}" --execute="GRANT ALL ON ${GHOST_DB_NAME}.* TO '${GHOST_USER_NAME}'@'%';";
docker compose up -d
起動
エラーを吐かないことを祈りながら、スタートしましょ。
Ghostのスタート
db.conf
は全開にしてるとmysqlが怒って起動してくれないので、権限を縮小しておく。
$ chmod 644 mysql/conf/db.conf
start.sh
も権限をつけとかないと怒られることがあるので一応つけとく。
$ cd ghost/
$ chmod u+x start.sh
$ ./start.sh
これで、ghostが起動したはず。
http://localhost:8888
で動いてるのが見れるはず。