以前の記事でめでたく立ち上げた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.
※下記の点に気をつけて下さい
- ホスト名にはルートドメインは省略してサブドメインのみを指定します
- MXレコードのホストの最後は.(ドット)が必要です
- MXレコードは優先度の次にサブドメインの指定が必要です
- example.comを自身のドメインに置換する必要があります
- aはwebサーバーのIPを指定しているので、mailgunとは直接関係ありません
- rsaの追加情報の;(セミコロン)の後ろ、改行しないように注意してください
DNSの確認
バリュードメイン側の設定が完了したら、しばらく待ちます。
これはDNS情報が浸透するのに時間がかかることが多いためです。
数時間くらい掛かるときもあれば数分で反映されたりします。
気長に待ちつつ、"check dns records"ボタンを押下して成功するまで待ちます。
ghostのdockerへの反映作業
dockerへの反映には下記のようないくつかの方法があります。
- docker-compose.ymlの修正
- コンテナ内のconfig.production.json、config.development.jsonの修正
- マウントされているconfig.*.jsonの修正
- 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
を実行します。