TraefikとMailuの共存試案
この件は諦めた。詳細は、TraefikとMailuの共存方法にある。
以下の方法ではうまくいかない。
Docker-composeを使いMailuメールサーバをインストールするにも関連することを書いたが、Mailuは80, 443, その他のメール関係のポートをデフォルトでは占有してしまう。このうち問題となるのは、80, 443番である。これらは必ずリバースプロキシが占有しているからだ。
443番は、8443等に変更することができるが、80番は変更できない。なぜなら、MailuがLets’ Encryptの証明書を取得するときに、Let’s Encrypt側がこのポートを使うからである。方策としては、Mailuによる証明書取得の時にだけリバースプロキシを停止し、Mailuに80番を使わせるということだ。しかし、証明書の更新時にもこの操作が必要になってしまう。こんなことはやってはいられない。
そこで以下のようにしてこの問題の回避を試みたが、まだ正常に動作するかは確認していない。これはあくまでメモ書き。
追加:うまく行かなかった。Mailuのサーバ証明書リニューアル方法(要調査)を参照のこと。
方針
mail.example.comへのリクエストがTraefikの80番ポートに来たら、それをMailu側に引き渡す。
それ以外の処理はすべてmailu独自のものを使う。つまり、メール管理者画面、メールボックス画面は、traefik側のお世話にならない。これもhttpsで保護する必要があるが、ポートは8443にする。
このようにした理由は以下だ。
- mailuは独自にLet’s encryptの証明書を取得しようとする。これはブラウザ画面のみではなく、メール送受信時にも使われるようだ。
- したがって、Traefik側が取得した証明書に依存するわけにはいかない(というより、どうすれば良いかわからない)。mailuに独自に証明書を取得させる。
- したがって、管理画面、メールボックス画面は、traefikによるhttpsルーティングは使わない。8443でアクセスすることにする。
- ただし、外部からの80番ポートへのアクセス(mail.example.comに対するもの)は、mailu側に送信してあげる必要がある。これがないと、Let’s encryptの証明書取得・更新ができなくなる。
mailuの改造
80番を削除、これはTraefikが使う。443番を8443番に変更。メール管理画面、メーラー画面等は8443番でhttpsアクセスする。
ports:
#- "80:80" 削除
- "8443:443" # 変更
- "25:25"
- "465:465"
- "587"
- "110:110"
- "995:995"
- "143:143"
- "993:993"
以下のラベルをつける
front:
.....
labels:
- "traefik.enable=true"
- "traefik.http.routers.mailu.rule=Host(`mail.example.com`)"
- "traefik.http.routers.mailu.entrypoints=web"
Traefik側の対応
もともとcommon-networkというネットワークを作り、そこに他コンテナを接続するようにしていたが、mailuを接続する方法がわからなかったので、以下のようにした。
traefik:
.......
networks:
- default
- mailu_default
......
networks:
default:
external:
name: common-network
mailu_default:
external: true
.....
これを行うと、Traefikのダッシュボードは次の表示になる。80番ポートの受信だけをmailu側に送信する。
ディスカッション
コメント一覧
まだ、コメントがありません