Dockerでghost(CMS)の環境構築





docker-composeでghostのローカル開発環境を立ち上げるまでの手順を簡単に書いていきたいと思います。


■**なんでやろうと思ったか**
ghostを使ってJAMStackなポートフォリオ兼ブログサイトを作りたいと思ったから。
ともかくghostの環境構築にはDockerが良いらしいということで、よくわからないけどやってみることにしました。（GhostのイメージはDockerhubで公式配布されてます）

私はWindowsユーザーなのでWSL2のセットアップからスタートしたわけですが、多少苦戦しながらも5時間ぐらいでローカル環境の立ち上げに成功しました！Dockerすげえよ！！！（今更）

■**実行環境**

- マシン : Win10 home
- 実行OS: Ubuntu  20.04 LTS(WSL2)
- Terminal : Windows Terminal 
- Docker Desktop(ver 20.10.8) 


## 1.プロジェクト用の空ディレクトリを作成

Windows TerminalからUbuntu開いて、そこで作業していきます。
まずは空ディレクトリを作成し、cdコマンドでディレクトリに移動しておきます。

```terminal:ubuntu-20.04のターミナル
~/$ mkdir docker-compose-ghost（ディレクトリ名はよしなに）

~/$ cd docker-compose-ghost

~/docker-compose-ghost$
```

## 2.docker-compose.ymlを作る


touchコマンドでdocker-compose.ymlファイル作成。

```terminal:ymlファイル作成
$ touch docker-compose.yml
```

ファイルが作成されたら、viコマンドでdocker.compose.ymlを開き、Dockerイメージの情報やコンテナを起動するための情報を記述していきます。
ちなみにvscodeユーザーなら、"code ."と叩けばすぐにvscode上で編集を始めることもできます。どちらにせよ、編集できればおkなのです。

```terminal:vimで編集をはじめる
$ vi docker-compose.yml
```
もしくは、

```terminal:vscodeにワープ！
$ code .
```

## 3.docker-compose.ymlファイルを編集

今回僕は自前でymlファイルを書いたわけではありません。というか書けない。。
ということで、[DockerhubにあるGhost公式のリファレンスページ](https://hub.docker.com/_/ghost/)で紹介されている記述例を**ほぼそのまま**拝借しました。完成したdocker-compose.ymlファイルはこちら。

「ghost」と「db」、2つのコンテナを作成しています。Volumeとかは作ってないです。

```vim:docker-compose.yml
version: '3.1'

services:

  ghost:
    image: ghost:latest
    restart: always
    ports:
      - 8080:2368
    environment:
      # see https://ghost.org/docs/config/#configuration-options
      database__client: mysql
      database__connection__host: db
      database__connection__user: root
      database__connection__password: example
      database__connection__database: ghost
      # this url value is just an example, and is likely wrong for your environment!
      url: http://localhost:8080
      # contrary to the default mentioned in the linked documentation, this image defaults to NODE_ENV=production (so development mode needs to be explicitly specified if desired)
      #NODE_ENV: development

  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
```


ほぼそのままと言いましたが、上記の完成ファイルは一点だけ変更を加えています。Dockerhubのページで紹介されている記述では、ghostイメージのバージョン指定が**4-alpine**となっていますが、これだとうまくローカル環境にアクセスできませんでした。
最新バージョンを指定する**latest**に変更することで問題なくアクセスできたので、ひとまずこのようにしています。

```diff:変更した箇所
- image: ghost:4-alpine
+ image: ghost:latest 

```

## 4.ghost,mysqlのイメージを入手
今回使用するイメージを入手しておきます。僕はこれを忘れて沼にハマっていましたｗ

```terminal:それぞれのimageをpull
$ docker pull ghost

$ docker pull mysql
```

## 5.docker-compose upする
**docker-compose up**コマンドで、それぞれのイメージ、コンテナを作成します。正直このコマンドが何者なのかはまだよくわかってないです。

```terminal:
$ docker-compose up
```

うまくいけば、こんな感じでダーッとログが走るハズ。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1672759/4eee0ba9-58e7-2abd-1da6-7582fde88566.png)

## 6.localhost:8080にアクセス
ブラウザからlocalhost:8080にアクセスしてみましょう。
多少表示が違うかもしれませんが、こんな感じでghostのページに遷移すれば成功です！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1672759/127fb1a2-b394-7873-b0a7-066b31ef8b36.png)

上記画面にアクセス出来たら、URLを**localhost:8080/ghost/**としてghostを追加します、すると管理者画面に遷移できるので、そのまま作業したいのであればサインアップしちゃいましょう。

今回はとりあえずここまで。

## さいごに
Dockerやdocker-composeのこともよくわかっていない中ではあるものの、何とかGhostのローカル環境を立てることができました。（まだ始まってすらいないけど...）

作業自体大したことではないかもしれませんが、Dockerを使った環境構築は僕にとってかなりの感動体験でした。
ちゃんと理解して使うとなると難しい部分が多そうなので、基本からしっかりとキャッチアップしていかねば。