beta

Docker + Mailuでマルチドメインメールサーバーを立ち上げる

Docker + Mailuでマルチドメインで利用できるメールサーバーを立ち上げてみます。慣れれば5分もあれば管理画面&Webメール付きのメールサーバー立ち上げることができます。

公開日:2020年7月22日

Mailuとは?

オープンソースのメールサーバー・管理システムです。

Mailu

DockerとDocker-composeを使うことで、面倒な設定をしないで一発で、

  • メールサーバー
  • Webメール
  • メール・ドメイン管理画面

を立ち上げることができます。

Docker + Mailuのセットアップ

DockerとDocker-composeはインストールされている前提で話を進めます。

Mailuセットアップで設定ファイルを作成する

Mailuには、Mailu configurationというサイトが用意されていて、必要な情報を入力するだけで自動でセットアップファイルを用意してくれます。

各入力値の解説は下記の通りです。

Step 項目 入力値
1 pick a flavor Composeを選択、Nextで次へ
2 Main mail domain and server display name メールで利用するドメインを入力(xxx.comなど)
2 Website name 任意、「Linked Website URL」-> Webメールで使うドメインを入力(mail.xxx.comなど)
3 Enable Web email client Webメールを使うなら好きなものを選ぶ
4 IPv4 listen address サーバーの外部IPを入力
4 Subnet of the docker network 172.30.0.0/24を入力
4 Public hostnames メールサーバー、Webメールで利用するドメイン名を入力(mail.xxx.comなど)
- Database preferences 好きなDBを選択。SQLite以外ならどちらでも良い

注意ポイントは、ドメイン、IPアドレスの設定周りです。

「Step 4 - expose Mailu to the world」では、AWSだと「IPv4 listen address」をプライベートIPにすべきようですが、通常のVPSであれば公開用の外部IPでOKです。

また、「Subnet of the docker network」はDockerで使われていないサブネットアドレスということで、172.30.0.0/24にすれば動きます。もし、172.30.0.0/24を使っているなら、30の部分を変更すればOKです。

また、ドメイン関連の指定も複数あって、どういう使い分けをしているのかが非常にわかりづらいのですが、

フォーム項目 解説 Gメールで例えると
Main mail domain and server display name メールアドレスの@以降のドメイン gmail.com
Public hostnames メールサーバーのドメイン mail.google.com

と考えれば簡単です。

Gメールで考えると理解がしやすく、Gメールはメールアドレスは「gmail.com」がメールドメイン(xxxx@gmail.com)ですが、Webメールのページは「mail.google.com」となっています。Mailuでも同じように考えると良いでしょう。

最後に「Setup Mailu」ボタンを押すと、設定ファイルがMailu configurationサイトにアップされます。

サーバーでMailuを設定する

mkdir /mailu

cd /mailu
wget http://setup.mailu.io/1.7/file/XXXXXXXXXXXXXXXXXXXXXXXX/docker-compose.yml
wget http://setup.mailu.io/1.7/file/XXXXXXXXXXXXXXXXXXXXXXXX/mailu.env

wgetのURLは、Mailu configurationで出力されているURLを利用します。セットアップごとにURLが異なります。

コピーができたら、docker-composeでコンテナを起動します。

docker-compose -p mailu up -d

コンテナが起動したら、「Public hostnames」で設定したドメインにアクセスすると使えるようになっているはずです。

管理ユーザーを作成する

立ち上げたばかりのメールサーバーは管理者すらいないすっぴんの状態なので、とりあえず管理者を入れます。

docker-compose -p mailu exec admin flask mailu admin ユーザー名 ドメイン名(アドレスの@以降) パスワード
  • ユーザー名
  • ドメイン名(アドレスの@以降)
  • パスワード

を任意のものに変更してサーバー上で実行します。

管理ユーザーができたら、

https://Public hostnamesで指定したドメイン/admin

で管理コンソールにログインして、諸々の設定をします。

ここからは、Dockerコマンドは使わず、全てWeb上の管理コンソールから設定可能です。(Dockerコンテナのコマンドからも利用できます)

マルチドメインの設定

管理コンソールから「メールドメイン」->「ドメイン名を追加」で追加ができます。

DNSの設定に必要な、MXレコードやSPFレコードも表示してくれるので、ネームサーバーで表示されたレコードを追加するだけですぐに使えます。

サーバーが許容できる範囲で幾つでもドメインを設定できるので、マルチサイトを運営している方は重宝しそうです。

Mailuにはどれくらいのスペックのサーバーが必要か?

今回テストで立ち上げたのは、DigitalOceanの最安値プラン(1コア、1GBメモリ、25GBストレージ)ですが、動作も重く、CPU利用率も何もしてなくても80%くらいで張り付いているので、2コア、2GBメモリ以上のサーバーのが快適でしょう。

1コア、1GBメモリでも動かなくはないですが、たまにメールの送信や受信でエラーが発生します。試してはいませんが、AWSのt2.nanoやGCPのf1.microでは、おそらく動作は難しいかと思います。

10人、20人と利用するユーザーがいるのであれば、できれば4コア・4GBメモリくらいのサーバーが良いかと思います。

WebArenaのIndigoだと4コア・4GBで月額1,399円で利用できるので、コスパも良いかと思います。

GoogleのG Suiteは一人700円くらいなので、サーバー費用が月額1400円だったとしても、3人以上で使うのであればペイできます。


Docker + Mailuでマルチドメインメールサーバーを立ち上げる方法をみてきました。

動作は重めでそこそこのスペックのVPSサーバーが必要になりますが、GmailやOutlookなどのメールプラットフォームに頼らずにメールサーバーを簡単に永続化できるのでとても便利だなと思いました。