ちょっと流れから脱線しますが、
Dockerを使ってのメールサーバー構築に成功したため
その内容をメモとして残します。
1.メールサーバーの要件
現在のメールサーバーの使い方なのですが、
以下の2つがあるためこれらを満たす必要があります。
・サービス毎のメールアカウント管理
・フリーメールの集約
サービス毎のメールアカウントを管理するのは前にも言ったようにLDAPL+バーチャルメールボックスで行けるのですが、
フリーメールの集約はFetchmailを使っているためこれが動作する環境である必要があります。
ではできるのか?というとRoundcubeにはFetchmailの設定をWeb上で行えるプラグインが存在します。
ですが、Fetchmailは取得したメールをローカルのMDAにフォーワードすることしかできないのできません。
つまりRoundcube自身にプラグインが入った状態でなおかつローカルにMDAが存在する必要があるのです。
2.考えられる構成は?
考えられる構成は2種類あります。
1つは以下のようにすべてを1つのContainerにまとめること。
もう1つは以下のように転送用のメールサーバーを構築してメインのメールサーバーにメールを転送すること。
今回はどうしてもメールサーバーとRoundcubeは別に構築したかったため後者で構築を行いました。
3.メールサーバーを構築する
これらのContanerについては要件を満たすものがなかったため
DockerHub上のものを改造する形で自分で作りました。
GitHubに挙げてますのでダウンロードしてください。
// メールサーバーのチェックアウト $ git clone https://github.com/gittrname/mailserver-ldap.git // Roundcube + Fetchmailサーバーのチェックアウト $ git clone https://github.com/gittrname/roundcube-fetchmail.git
・docker-compose.yml
version: '2' services: mail: build: mailserver-ldap ports: - "25:25" - "465:465" - "587:587" - "110:110" - "143:143" - "995:995" - "993:993" links: - ldap extra_hosts: - "mail.example.com:127.0.0.1" environment: - "LDAP_SERVER=ldap" - "DOMAIN=example.com" - "HOSTNAME=mail.example.com" - "LDAP_BASE=ou=People,dc=example,dc=com" - "LDAP_USER_FIELD=uid" roundcube: build: roundcube-fetchmail ports: - "80:80" links: - ldap - mail extra_hosts: - "fetch.example.com:127.0.0.1" environment: - "ROUNDCUBE_DEFAULT_HOST=mail" - "ROUNDCUBE_SMTP_SERVER=mail" - "ROUNDCUBE_USERNAME_DOMAIN=example.com" - "HOSTNAME=fetchmail.example.com" ldap: image: sharaku/ldap ports: - "8080:80" environment: - "LDAP_DOMAIN=example.com" - "LDAP_ADMIN_PWD=password" - "LDAP_ORGANISATION=LDAP for docker."
※ RoundcubeとLdapAdminのポートが被らないようにしてください。
後はLdapAdmin上でユーザーを作成すればメールアカウントの作成は完了します。
定期的なメールの取得はログインした後「設定」⇒「Fetchmail]で設定します。
取得先のドメイン、ユーザー、パスワードを設定すると15分間隔でメールを取得し、
ログインユーザー@ドメインにメールを転送します。
ちょっとデータの永続化に多少の不安がありますが
一応、やりたいことはできたので公開してます。