目次

趣旨

このページでは、オンプレミス環境でオープンソースのメールサーバであるmailcowを立ち上げるまでの手順を解説しています。2023/05/08

mailcowの特徴

スパム対策済み

clamd(Clam AntiVirus? とは、オープンソース で提供されているクロスプラットフォームのアンチウイルスソフトウェア)とRspamd(OSSの迷惑メールフィルタリングシステム)とか最初から入ってる

mailcowのdockerイメージの特徴

サーバが、 めっちゃ起動する。なので、メモリはたくさん積んだマシンじゃないとつらい。 メモリのサイズが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.conf

変更箇所

MAILCOW_HOSTNAME=mail.example.com
HTTP_PORT=11334
HTTPS_PORT=11335
SMTP_PORT=2525
TZ=Asia/Tokyo

CRLFをLFに統一

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

nginxの設定

docker-compose.ymlの設定

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の設定

server {
  ...
  server_name $NGINX_SERVER_NAME;
  ...
}

.envの設定

.env ファイルに新しい環境変数 NGINX_SERVER_NAME を追加し、ドメイン名を設定します。

NGINX_SERVER_NAME=mail.example.com

それぞれのコンテナのログの見方

docker-compose ps

とやると、コンテナ名がわかるので

docker logs -f コンテナ名

で、ログが見れる。確か、していした行からのログを出力することもできるが、まあいらんだろうけど、使い方をのせておきます。

docker logsの使い方

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の不具合の修正

なぜかdockerのimageの設定ファイルで、セキュリティのアップデート用ダウンロードサイトが見えなくなっているので、設定を修正する必要があります。

dockerのホスト側のファイルを以下のように変更してください。

data/conf/clamav/freshclam.confの修正後

#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

mailcowのざっくりとした使い方

日本語表示させる

adminでログインができたら、メニューが日本語対応ではないのですが、Chromeブラウザを使っていれば、翻訳機能で日本語表示できます。

以下は、直感でなんとかなるので、ざっくりと説明するだけにします。

ドメインの追加

まずは、メールの@の右側、これを「ドメイン」と呼ぶのですが、これを追加しましょう。ローカルなので、なんでもいいです。

メールの追加

ユーザ名を入れましょう。

パスワードは適当に入れると、保存はできますがログインできないかもしれません。

SOGoというWebメール

直感で使えそうだったので、説明は省きます。

ログイン

ログインはメールアドレスとパスワードを入れます。

このドキュメントで説明しようと思っていた範囲は以上となります。以下はおまけです。

docker-compose up -dしたときに立ち上がるサーバたち

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

参考ブログ

mailcowをインストールしてubuntuでお手軽メールサーバー構築

https://takuya-1st.hatenablog.jp/entry/2021/03/17/071022

メールサーバにmailcowを使ってみましたwith Docker

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

上記のサイトで紹介されていたYoutube https://youtu.be/4rzc0hWRSPg

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2023-05-09 (火) 11:23:18 (352d)