前回の記事の続きです。今回は、今まで試した設定を含めた dockerfile を作成して、イメージを作ることで簡単に起動できるようにしたいと思います。
- Roundcube の立ち上げ:暗号化接続を有効化 (1/3)
- Roundcube の立ち上げ: docker イメージを作成(2/3) <- ここ
- Roundcube の立ち上げ : https での接続を可能にする (3/3)
docker イメージを作成
いろいろと試した設定を毎回手作業でやるのは面倒なので、 docker イメージを作成したいと思います。なお、作業は NAS に SSH でログインして、適当な作業ディレクトリを作ってそこで行っています。
dockerfile の作成
いままで検討した設定を反映するように、 dockerfile を作成します。
FROM roundcube/roundcubemail:1.5.3-apache RUN set -ex; \ sed -i "s/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/" /etc/ssl/openssl.cnf \ ; COPY ./config.docker.add_imap_conn_options.inc.php /var/roundcube/config/
config.docker.add_imap_conn_options.inc.php は、前の記事で書いた、 imap 接続時のオプション設定を書いたファイルです。
<?php // IMAP socket context options $config['imap_conn_options'] = [ 'ssl' => [ 'verify_peer' => true, 'verify_depth' => 3, ], ]; // SMTP socket context options $config['smtp_conn_options'] = [ 'ssl' => [ 'verify_peer' => true, 'verify_depth' => 3, ], ];
/var/roundcube/config に設定ファイルを置いておくと読み込んでくれるということなので、ここに設定することにしました。
イメージを作成
作成した dockerfile を使ってイメージを作成してみます。
[ユーザ名@NAS名 myroundcube]$ docker build -t myroundcube . Sending build context to Docker daemon 4.608kB Step 1/3 : FROM roundcube/roundcubemail:1.5.3-apache ---> d2eac54d0366 Step 2/3 : RUN set -ex; sed -i "s/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/" /etc/ssl/openssl.cnf ; ---> Running in 4176d8859682 + sed -i s/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/ /etc/ssl/openssl.cnf Removing intermediate container 4176d8859682 ---> 73ef52fbc915 Step 3/3 : COPY ./config.docker.add_imap_conn_options.inc.php /var/roundcube/config/ ---> 664cbf63c985 Successfully built 664cbf63c985 Successfully tagged myroundcube:latest [ユーザ名@NAS名 myroundcube]$
エラーなく、イメージが作成できました。
このイメージを使って、ちゃんと Container Station で起動するのか確認して、問題なく起動できればOKです。
(参考1)
roundcubemail-docker の github には、自分で使うプラグインをあらかじめインストールした docker image の作成方法が載っているので、ident_switch もこのようにしたいと思って下記のようにしてみました。
FROM roundcube/roundcubemail:1.5.3-apache ENV COMPOSER_ALLOW_SUPERUSER=1 RUN set -ex; \ apt update; \ apt install -y --no-install-recommends \ unzip \ ; \ sed -i "s/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/" /etc/ssl/openssl.cnf \ ; \ composer \ --working-dir=/usr/src/roundcubemail/ \ --prefer-dist \ --prefer-stable \ --update-no-dev \ --no-interaction \ --optimize-autoloader \ require \ boressoft/ident_switch \ ; COPY ./config.docker.add_imap_conn_options.inc.php /var/roundcube/config/
しかし、このファイルで docker build を行うと、
[ユーザ名@NAS名 myroundcube]$ docker build -f ./dockerfile.ident_switch -t jmtest . Sending build context to Docker daemon 4.608kB Step 1/4 : FROM roundcube/roundcubemail:1.5.3-apache ---> d2eac54d0366 (略) Setting up unzip (6.0-26+deb11u1) ... Processing triggers for mailcap (3.69) ... + sed -i s/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/ /etc/ssl/openssl.cnf + composer --working-dir=/usr/src/roundcubemail/ --prefer-dist --prefer-stable --update-no-dev --no-interaction --optimize-autoloader require boressoft/ident_switch Info from https://repo.packagist.org: #StandWithUkraine Using version ^4.4 for boressoft/ident_switch ./composer.json has been updated Running composer update boressoft/ident_switch Loading composer repositories with package information Updating dependencies Lock file operations: 1 install, 0 updates, 0 removals - Locking boressoft/ident_switch (4.4.2) Writing lock file Installing dependencies from lock file Package operations: 1 install, 0 updates, 0 removals - Downloading boressoft/ident_switch (4.4.2) - Installing boressoft/ident_switch (4.4.2): Extracting archive Creating package config file Running database initialization script for ident_switch ERROR: SQLSTATE[HY000] [2002] No such file or directory ERROR: Failed to connect to database The command '/bin/sh -c set -ex; apt update; apt install -y --no-install-recommends unzip ; sed -i "s/DEFAULT@SECLEVEL=2/DEFAULT@SECLEVEL=1/" /etc/ssl/openssl.cnf ; composer --working-dir=/usr/src/roundcubemail/ --prefer-dist --prefer-stable --update-no-dev --no-interaction --optimize-autoloader require boressoft/ident_switch ;' returned a non-zero code: 1 [ユーザ名@NAS名 myroundcube]$
のように、エラーが出てしまいます。どうも、インストール時に、データベースにテーブルを作るようで、docker イメージを作るタイミングだと、当然データベースがないので、インストールしても失敗してしまいます。
なので、この部分は起動後に後から手作業でインストールすることにしました。
(参考2)
Roundcube 試用の際の記事でも触れましたが、最新版 Roundcube (1.6.2) を使おうとすると、 php-zip に関するエラーが出てきます。例えば、ログインに成功した際に、コンソールに下記のようなエラーが出てきています。
errors: <73b8bb66> PHP Error: php-zip extension is required for the zipdownload plugin in /var/www/html/plugins/zipdownload/zipdownload.php on line 36 (GET /?_task=mail&_token=EDMRG9or8UJXOvuYH2p7bFOjkqOQEeGP)
いろいろとネットを見てみると、 roundcube が元にしている php のイメージ(多分 8.1.21)が持っているバグっぽいような印象です。おおもとの debian bookworm でライブラリパスがいくつか変更になったのが遠因のようです。
これの解消方法がわからなかったのと、そこまで、最新版にこだわってないので、今回は、 1.5.3-apache を元にイメージを作成することにしました。
まとめ
次は、 この作成した docker イメージを元に、 Roundcube を実際に稼働させたいと思います。