このページでは、オンプレミス環境でオープンソースのメールサーバであるmailcowを立ち上げるまでの手順を解説しています。2023/05/08
clamd(Clam AntiVirus? とは、オープンソース で提供されているクロスプラットフォームのアンチウイルスソフトウェア)とRspamd(OSSの迷惑メールフィルタリングシステム)とか最初から入ってる
サーバが、 めっちゃ起動する。なので、メモリはたくさん積んだマシンじゃないとつらい。 メモリのサイズが16GBだとSWAP発生してもっさりになったので、32GB以上のメモリは必要だと思います。また、もっさりになってやめる場合は、wslのシャットダウンをしないと、メモリをwslが解放してくれない。対処はこのドキュメントに記載しました。
mkdir mailcow cd mailcow git clone https://github.com/mailcow/mailcow-dockerized cd mailcow-dockerized mkdir data mkdir helper-scripts
./generate_config.sh vi mailcow.conf
変更箇所
MAILCOW_HOSTNAME=mail.example.com HTTP_PORT=11334 HTTPS_PORT=11335 SMTP_PORT=2525 TZ=Asia/Tokyo
windows環境でやると、volumesで指定したフォルダにある設定ファイルの改行文字がCRLFになってしまい、そのせいでbashのスクリプトや定義ファイルが処理されないのが原因のエラーが起きるように思うので、以下を実行して対応する。
一旦docker-composeを起動させて、設定ファイルを生成する
docker-compose up -d
しばらくすると、設定ファイルが十分ではないので、再起動を繰り返すようになるので、停止させる。設定ファイルが生成されればそれでよし。
find data/conf -type f -exec dos2unix {} \;
おそらくGitの自動改行コード変換が裏目にでたのだとおもうので、以降はこのプロジェクトに限り、自動変換しないように以下のコマンドを実行しておく
git config core.autocrlf false
docker-compose.ymlのあるディレクトリで以下
# 念のためバックアップとっておく cp data/assets/ssl/cert.pem data/assets/ssl/cert.pem.bak cp data/assets/ssl/key.pem data/assets/ssl/key.pem.bak # 暗号キーを生成 openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout data/assets/ssl/key.pem -out data/assets/ssl/cert.pem
docker-compose.yml の nginx-mailcow サービスの environment セクションに新しい環境変数を追加します。例えば、NGINX_SERVER_NAME という名前の環境変数を追加できます。
nginx-mailcow: ... environment: ... - NGINX_SERVER_NAME=${NGINX_SERVER_NAME:-mail.example.com}
server { ... server_name $NGINX_SERVER_NAME; ... }
.env ファイルに新しい環境変数 NGINX_SERVER_NAME を追加し、ドメイン名を設定します。
NGINX_SERVER_NAME=mail.example.com
docker-compose ps
とやると、コンテナ名がわかるので
docker logs -f コンテナ名
で、ログが見れる。確か、していした行からのログを出力することもできるが、まあいらんだろうけど、使い方をのせておきます。
docker logs --help Usage: docker logs [OPTIONS] CONTAINER Fetch the logs of a container Aliases: docker container logs, docker logs Options: --details Show extra details provided to logs -f, --follow Follow log output --since string Show logs since timestamp (e.g. "2013-01-02T13:23:37Z") or relative (e.g. "42m" for 42 minutes) -n, --tail string Number of lines to show from the end of the logs (default "all") -t, --timestamps Show timestamps --until string Show logs before a timestamp (e.g. "2013-01-02T13:23:37Z") or relative (e.g. "42m" for 42 minutes)
なぜかdockerのimageの設定ファイルで、セキュリティのアップデート用ダウンロードサイトが見えなくなっているので、設定を修正する必要があります。
dockerのホスト側のファイルを以下のように変更してください。
#UpdateLogFile /dev/console LogTime yes PidFile /run/clamav/freshclam.pid DatabaseOwner clamav DNSDatabaseInfo current.cvd.clamav.net # DatabaseMirror db.uk.clamav.net # DatabaseMirror db.nl.clamav.net # DatabaseMirror db.fr.clamav.net # DatabaseMirror db.ch.clamav.net # 追加 DatabaseMirror db.jp.clamav.net DatabaseMirror db.us.clamav.net MaxAttempts 4 ScriptedUpdates yes Checks 6 NotifyClamd /etc/clamav/clamd.conf Foreground yes ConnectTimeout 20 ReceiveTimeout 20 TestDatabases yes Bytecode yes
初回起動は時間がかかりますが、以下のアドレスで確認できます。
http://localhost:11334/
初期パスワードは
admin / moohoo
です。
Windowsのビルドバージョンによるのですが、2023/05/09時点のwindowsのバージョンでは Docker Desktopとwslの組み合わせは、メモリを消費しても自動で開放してくれないので、.wslconfigファイルで制限を設けるか、手動で開放します。
たとえば
docker-compose down
した際には、以下のコマンドをつかってwslを終了させると、メモリを解放してくれます。
wsl --shutdown
adminでログインができたら、メニューが日本語対応ではないのですが、Chromeブラウザを使っていれば、翻訳機能で日本語表示できます。
以下は、直感でなんとかなるので、ざっくりと説明するだけにします。
まずは、メールの@の右側、これを「ドメイン」と呼ぶのですが、これを追加しましょう。ローカルなので、なんでもいいです。
ユーザ名を入れましょう。
パスワードは適当に入れると、保存はできますがログインできないかもしれません。
直感で使えそうだったので、説明は省きます。
ログインはメールアドレスとパスワードを入れます。
このドキュメントで説明しようと思っていた範囲は以上となります。以下はおまけです。
16GBのマシンではもっさりとした動作でした。
$ docker-compose ps NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS mailcowdockerized-acme-mailcow-1 mailcow/acme:1.84 "/sbin/tini -g -- /s…" acme-mailcow 2 minutes ago Up 24 seconds mailcowdockerized-clamd-mailcow-1 mailcow/clamd:1.61 "/sbin/tini -g -- /c…" clamd-mailcow 2 minutes ago Up 10 seconds (health: starting) 3310/tcp, 7357/tcp mailcowdockerized-dockerapi-mailcow-1 mailcow/dockerapi:2.03 "/bin/sh /app/docker…" dockerapi-mailcow 2 minutes ago Up About a minute mailcowdockerized-dovecot-mailcow-1 mailcow/dovecot:1.23 "/docker-entrypoint.…" dovecot-mailcow 2 minutes ago Up 56 seconds 0.0.0.0:110->110/tcp, :::110->110/tcp, 0.0.0.0:143->143/tcp, :::143->143/tcp, 0.0.0.0:993->993/tcp, :::993->993/tcp, 0.0.0.0:995->995/tcp, :::995->995/tcp, 0.0.0.0:4190->4190/tcp, :::4190->4190/tcp, 127.0.0.1:19991->12345/tcp mailcowdockerized-ipv6nat-mailcow-1 robbertkl/ipv6nat "/docker-ipv6nat-com…" ipv6nat-mailcow 2 minutes ago Up 11 seconds mailcowdockerized-memcached-mailcow-1 memcached:alpine "docker-entrypoint.s…" memcached-mailcow 2 minutes ago Up About a minute 11211/tcp mailcowdockerized-mysql-mailcow-1 mariadb:10.5 "docker-entrypoint.s…" mysql-mailcow 2 minutes ago Up About a minute 127.0.0.1:13306->3306/tcp mailcowdockerized-netfilter-mailcow-1 mailcow/netfilter:1.52 "python3 -u /server.…" netfilter-mailcow 2 minutes ago Up 37 seconds mailcowdockerized-nginx-mailcow-1 nginx:mainline-alpine "/docker-entrypoint.…" nginx-mailcow 2 minutes ago Up 10 seconds 80/tcp, 0.0.0.0:11334-11335->11334-11335/tcp, :::11334-11335->11334-11335/tcp mailcowdockerized-ofelia-mailcow-1 mcuadros/ofelia:latest "/usr/bin/ofelia dae…" ofelia-mailcow 2 minutes ago Up 32 seconds mailcowdockerized-olefy-mailcow-1 mailcow/olefy:1.11 "python3 -u /app/ole…" olefy-mailcow 2 minutes ago Up About a minute mailcowdockerized-php-fpm-mailcow-1 mailcow/phpfpm:1.83 "/docker-entrypoint.…" php-fpm-mailcow 2 minutes ago Up About a minute 9000/tcp mailcowdockerized-postfix-mailcow-1 mailcow/postfix:1.68 "/docker-entrypoint.…" postfix-mailcow 2 minutes ago Up 58 seconds 0.0.0.0:465->465/tcp, :::465->465/tcp, 0.0.0.0:587->587/tcp, :::587->587/tcp, 588/tcp, 0.0.0.0:2525->25/tcp, :::2525->25/tcp mailcowdockerized-redis-mailcow-1 redis:7-alpine "docker-entrypoint.s…" redis-mailcow 2 minutes ago Up About a minute 127.0.0.1:7654->6379/tcp mailcowdockerized-rspamd-mailcow-1 mailcow/rspamd:1.92 "/docker-entrypoint.…" rspamd-mailcow 2 minutes ago Up 24 seconds mailcowdockerized-sogo-mailcow-1 mailcow/sogo:1.117 "/docker-entrypoint.…" sogo-mailcow 2 minutes ago Up About a minute mailcowdockerized-solr-mailcow-1 mailcow/solr:1.8.1 "docker-entrypoint.s…" solr-mailcow 2 minutes ago Up About a minute 127.0.0.1:18983->8983/tcp mailcowdockerized-unbound-mailcow-1 mailcow/unbound:1.17 "/docker-entrypoint.…" unbound-mailcow 2 minutes ago Up About a minute 53/tcp, 53/udp mailcowdockerized-watchdog-mailcow-1 mailcow/watchdog:1.97 "/bin/sh -c /watchdo…" watchdog-mailcow 2 minutes ago Up About a minute
https://takuya-1st.hatenablog.jp/entry/2021/03/17/071022
上記のサイトで紹介されていたYoutube https://youtu.be/4rzc0hWRSPg