以前の記事でめでたく立ち上げたghostのdockerコンテナですが、何らかの通知はメールを使用して送信されてくるので、mailサーバーの設定はしておくべきでしょう。
ghostのメールサーバーの設定にはSMTPサービスを使用できるので、例えばgmailやhotmailなどの外部サービスを利用できます。

しかし、私用で使っているアカウント情報をそのまま保存するのはよろしくないでしょう。
勿論、ghost用にこれらのアカウントを新たに取得するのもよいですが、ここではghostがお勧めしているmailgunというメールサービスを使用してghostコンテナに登録する方法をまとめます。

ちなみに、ghostがどんな外部サービスに対応しているのかは、ここを参照するとわかります。

maigunの制限

無料ですが、1万通/月という制限があります。
まぁメルマガやよっぽど通知がない限りは大丈夫でしょう。

maigunのアカウント登録

初めに大事なことを言っておきます。

アカウント登録にはSMS、つまり電話番号が必要です。

まぁSMTP関連のサービスはスパム等、悪用されやすいので電話番号を求められるのは仕方ないですかね。
アカウント登録時にクレジットカードを求められますが、入力不要のプランが選択できるのでちゃんと切り替えましょう。
名前とメールアドレス、パスワードを入力すると仮登録は完了です。
すぐに入力したメールアドレス宛に確認用のURLが送信されてくるので、送信元を確認してブラウザで開きます。(ついでにAPIKeyの情報も送信されます)
あとは、電話番号を入力してベリファイ用のコードを送信&入力して完了です。

ドメインの登録

独自ドメインでメールを運用するので、ドメインを登録します。
mg.example.comという、mgサブドメインで登録します。
別にmgサブドメインである必要はありませんが、ルートドメインはサーバー等の設定があるので何らかのサブドメインを決めて指定します。

DNSレコードの更新要求

サブドメインを決めて入力すると、DNSレコードの更新を求められます。
これは、ドメインの所有者であることを証明したりするのに使われるわけですが...ちゃんとそのあたりも英語で記載されてますね。
とりあえず、下記のようなレコードを追加するよう言われると思います。

TYPE HOST VALUE
TXT mg.example.com v=spf1 include:mailgun.org ~all
TXT k1._domainkey.mg.example.com v=spf1 include:mailgun.org ~all
TXT k1._domainkey.mg.example.com k=rsa; p=* * * * * * * * * * * * * * * *
MX mx mxa.mailgun.org 10
MX mxb.mailgun.org 10
CNAME email.mg.example.com mailgun.org

バリュードメインでDNSレコードの修正と反映

前の表を元に、value-domainで下記のようなDNSの修正を行います。

a @ XXX.XXX.XXX.XXX
a www XXX.XXX.XXX.XXX
txt mg v=spf1 include:mailgun.org ~all
txt k1._domainkey.mg k=rsa; p=****.....
mx mxa.mailgun.org. 10 mg
mx mxb.mailgun.org. 10 mg
cname email.mg mailgun.org.

※下記の点に気をつけて下さい

  1. ホスト名にはルートドメインは省略してサブドメインのみを指定します
  2. MXレコードのホストの最後は.(ドット)が必要です
  3. MXレコードは優先度の次にサブドメインの指定が必要です
  4. example.comを自身のドメインに置換する必要があります
  5. aはwebサーバーのIPを指定しているので、mailgunとは直接関係ありません
  6. rsaの追加情報の;(セミコロン)の後ろ、改行しないように注意してください

DNSの確認

バリュードメイン側の設定が完了したら、しばらく待ちます。
これはDNS情報が浸透するのに時間がかかることが多いためです。
数時間くらい掛かるときもあれば数分で反映されたりします。
気長に待ちつつ、"check dns records"ボタンを押下して成功するまで待ちます。

ghostのdockerへの反映作業

dockerへの反映には下記のようないくつかの方法があります。

  1. docker-compose.ymlの修正
  2. コンテナ内のconfig.production.json、config.development.jsonの修正
  3. マウントされているconfig.*.jsonの修正
  4. cpコマンドを用いたコンテナへの転送

色々ありますが、とりあえず2,4は永続化されていないのでここでは使いません。
3はちょっとやりすぎです。
なので今回はdocker-composeの環境変数を使って渡すことにしました。
下記のように、mail__*:に関する設定をdocker-composeへ追加します。

version: "3.1"
services:
  ghost:
    image: ghost:1-alpine
    environment:
      VIRTUAL_HOST: example.com,www.example.com
      LETSENCRYPT_HOST: example.com,www.example.com
      LETSENCRYPT_EMAIL: example@example.com
      # see https://docs.ghost.org/docs/config#section-running-ghost-with-config-env-variables
      url: https://example.com
      mail__transport: SMTP
      mail__options__service: Mailgun
      mail__options__auth__user: postmaster@example.mailgun.org
      mail__options__auth__pass: 1234567890
      database__client: mysql
      database__connection__host: mysql
      database__connection__user: root
      database__connection__password: HOGEHOGE
      database__connection__database: ghost
    restart: always
    logging:
      options:
        max-size: 5m
        max-file: "10"

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: HOGEHOGE
    restart: always
    logging:
      options:
        max-size: 5m
        max-file: "10"

networks:
  default:
    external:
      name: shared

不要かもしれませんが、反映させるために

docker-compose up -d --build

を実行します。