* 目次 [#ja974246]
#contents
* 趣旨 [#ncb69dec]
このページでは、オンプレミス環境でオープンソースのメールサーバであるmailcowを立ち上げるまでの手順を解説しています。2023/05/08
* mailcowの特徴 [#d59e620a]
** スパム対策済み [#l27e8cba]
clamd(Clam AntiVirus とは、オープンソース で提供されているクロスプラットフォームのアンチウイルスソフトウェア)とRspamd(OSSの迷惑メールフィルタリングシステム)とか最初から入ってる
*** mailcowのdockerイメージの特徴 [#d80a5afe]
サーバが、 めっちゃ起動する。なので、メモリはたくさん積んだマシンじゃないとつらい。
メモリのサイズが16GBだとSWAP発生してもっさりになったので、32GB以上のメモリは必要だと思います。また、もっさりになってやめる場合は、wslのシャットダウンをしないと、メモリをwslが解放してくれない。対処はこのドキュメントに記載しました。
* 手順 [#gaf0d833]
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.conf [#e139d895]
変更箇所
MAILCOW_HOSTNAME=mail.example.com
HTTP_PORT=11334
HTTPS_PORT=11335
SMTP_PORT=2525
TZ=Asia/Tokyo
** CRLFをLFに統一 [#l895f0f4]
windows環境でやると、volumesで指定したフォルダにある設定ファイルの改行文字がCRLFになってしまい、そのせいでbashのスクリプトや定義ファイルが処理されないのが原因のエラーが起きるように思うので、以下を実行して対応する。
一旦docker-composeを起動させて、設定ファイルを生成する
docker-compose up -d
しばらくすると、設定ファイルが十分ではないので、再起動を繰り返すようになるので、停止させる。設定ファイルが生成されればそれでよし。
find data/conf -type f -exec dos2unix {} \;
おそらくGitの自動改行コード変換が裏目にでたのだとおもうので、以降はこのプロジェクトに限り、自動変換しないように以下のコマンドを実行しておく
git config core.autocrlf false
** 暗号鍵の設定方法 [#vd5cbffa]
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
** nginxの設定 [#a399f7c9]
*** docker-compose.ymlの設定 [#e3865191]
docker-compose.yml の nginx-mailcow サービスの environment セクションに新しい環境変数を追加します。例えば、NGINX_SERVER_NAME という名前の環境変数を追加できます。
nginx-mailcow:
...
environment:
...
- NGINX_SERVER_NAME=${NGINX_SERVER_NAME:-mail.example.com}
*** data/conf/nginx/site.confの設定 [#z65c7b3b]
server {
...
server_name $NGINX_SERVER_NAME;
...
}
*** .envの設定 [#b23291cd]
.env ファイルに新しい環境変数 NGINX_SERVER_NAME を追加し、ドメイン名を設定します。
NGINX_SERVER_NAME=mail.example.com
** それぞれのコンテナのログの見方 [#a59c50c2]
docker-compose ps
とやると、コンテナ名がわかるので
docker logs -f コンテナ名
で、ログが見れる。確か、していした行からのログを出力することもできるが、まあいらんだろうけど、使い方をのせておきます。
*** docker logsの使い方 [#r5d014f6]
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)
* セキュリティツールClaimAVの不具合の修正 [#za388969]
なぜかdockerのimageの設定ファイルで、セキュリティのアップデート用ダウンロードサイトが見えなくなっているので、設定を修正する必要があります。
dockerのホスト側のファイルを以下のように変更してください。
** data/conf/clamav/freshclam.confの修正後 [#be49a558]
#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
** 起動確認 [#m6f342d1]
初回起動は時間がかかりますが、以下のアドレスで確認できます。
http://localhost:11334/
初期パスワードは
admin / moohoo
です。
* 注意点 [#y24f7cc7]
Windowsのビルドバージョンによるのですが、2023/05/09時点のwindowsのバージョンでは
Docker Desktopとwslの組み合わせは、メモリを消費しても自動で開放してくれないので、.wslconfigファイルで制限を設けるか、手動で開放します。
たとえば
docker-compose down
した際には、以下のコマンドをつかってwslを終了させると、メモリを解放してくれます。
wsl --shutdown
* mailcowのざっくりとした使い方 [#uf052fba]
** 日本語表示させる [#yab13df1]
adminでログインができたら、メニューが日本語対応ではないのですが、Chromeブラウザを使っていれば、翻訳機能で日本語表示できます。
以下は、直感でなんとかなるので、ざっくりと説明するだけにします。
** ドメインの追加 [#z5c7f036]
まずは、メールの@の右側、これを「ドメイン」と呼ぶのですが、これを追加しましょう。ローカルなので、なんでもいいです。
** メールの追加 [#le8d4b21]
ユーザ名を入れましょう。
パスワードは適当に入れると、保存はできますがログインできないかもしれません。
** SOGoというWebメール [#qa62bcd2]
直感で使えそうだったので、説明は省きます。
** ログイン [#ze789898]
ログインはメールアドレスとパスワードを入れます。
このドキュメントで説明しようと思っていた範囲は以上となります。以下はおまけです。
** docker-compose up -dしたときに立ち上がるサーバたち [#l157d2a8]
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
* 参考ブログ [#e67d1edf]
** mailcowをインストールしてubuntuでお手軽メールサーバー構築 [#je227973]
https://takuya-1st.hatenablog.jp/entry/2021/03/17/071022
** メールサーバにmailcowを使ってみましたwith Docker [#hbb53c08]
https://blog.tstylestudio.com/2022/02/08/%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%82%92docker%E3%81%A7-mailcow%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%BF%E3%81%BE%E3%81%97%E3%81%9F/
*** Install a mail server on Linux in 10 minute [#wd3f16b8]
上記のサイトで紹介されていたYoutube
https://youtu.be/4rzc0hWRSPg