注意書き

本サイトでは、アフィリエイト広告およびGoogleアドセンスを利用しています。

Dockerコンテナを使ってRoundcubeを動かす

サーバー設定

WebブラウザをメーラーにするRoundcube というソフトウェアは随分と有名になりました。メールサーバーが IMAP で接続可能ならば本ソフトウェアを入れてブラウザをメーラーとして使えるようになるので、自宅メールサーバーなどにはいれておきたい人も多いでしょう。

スポンサーリンク

コンテナで起動する

Roundcube は zip でプログラム一式が公開されており、導入手順にしたがって入れれば特に問題にもならないでしょう。しかし、より一層簡単に使うために、また、バージョンアップも容易にしたいと考えて、Docker コンテナによる起動方法にチャレンジしました。

まず以下のような docker-compose.yml ファイルを作成します。メールサーバーのアドレスについては各自適切なアドレスを使用して下さい。これらのアドレスのプレフィックスですが意味合いとしては次の通りです。

  • tls:// STARTTLS による暗号化を使用する
  • ssl:// SSL/TLS による暗号化を使用する
version: '2'

services:
  roundcubemail:
    image: roundcube/roundcubemail:1.5.x-apache
    container_name: roundcubemail
#    restart: unless-stopped
    volumes:
      - ./www:/var/www/html
      - ./db/sqlite:/var/roundcube/db
    ports:
      - 9002:80
    environment:
      - ROUNDCUBEMAIL_DB_TYPE=sqlite
      - ROUNDCUBEMAIL_SKIN=elastic
      - ROUNDCUBEMAIL_DEFAULT_HOST=tls://192.168.0.1:143
      - ROUNDCUBEMAIL_SMTP_SERVER=tls://192.168.0.1:587

起動

設定が出来たら、いつものコマンドで起動します。初めてのときには、”-d” オプションを付けずに起動して状態を観察するのが良いでしょう。

$ docker-compose up -d

ログインに失敗する場合

ログインに失敗する場合、いくつかの要素が考えられますが、コンソールに出力される情報を増やすところから始めて原因を探りましょう。

そのためにまず volumes に追加を行い、設定ファイルを追加して読み込ませるようにします。

  volumes:
      - ./www:/var/www/html
      - ./db/sqlite:/var/roundcube/db
      - ./config/:/var/roundcube/config/

そして、 config ディレクトリ以下には、設定ファイル(*.php) を用意します。ここでは以下の内容とします(config.debug.inc.php ファイル)。

<?php

$config['log_logins'] = true;
$config['imap_debug'] = true;

この設定を適用したら再びコンテナを起動し直して実行し、どのようなログが出力されたかをみていきましょう。

/var/roundcube/config/ に配置した *.php ファイルは、コンテナの起動時に一緒に読み込まれて適用されます。 www/config 以下にできるファイルへ設定を変更しても起動時に上書きされてしまうため、こちらの変更はできないようです。

証明書についての問題

共用サーバーや、自己証明書による運用の場合、そのままでは接続に失敗してしまいます。そこで、証明書のベリファイをしないように設定を変更することが必要です。

先ほどのファイルに以下の内容を追記します。

$config['imap_conn_options'] = [
  'ssl' => [  'verify_peer'  => false, 'verify_peer_name' => false,  ],
  'tls' => [  'verify_peer'  => false, 'verify_peer_name' => false, ]
];
$config['smtp_conn_options'] = [
  'ssl'  => [  'verify_peer'  => false, 'verify_peer_name' => false,  ],
  'tls'  => [  'verify_peer'  => false, 'verify_peer_name' => false, ]
];

意外とこの設定を記載している人が少ないようで、情報も少なめでした。

参考情報

コメント

タイトルとURLをコピーしました