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

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で動いてるのが見れるはず。