* 目次 [#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
トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS