プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

Roundcube のアップデート(1.5.3 -> 1.5.6)と attachment_reminder を有効化

こちらの記事で書いたように、 Roundcube のアップデートをおこなおうと思っています。とりあえず今回は、既存のバージョンである 1.5.3 から現時点の docker image の最新版である 1.5.6 へアップデートします(Roundcube 自体は 1.5.7 が出てるんですが docker image がまだでした)。

この作業を行った際の手順をメモにしておきます。

docker イメージの作成

以前、 Roundcube を立ち上げたときの記事に書いたように、今は Roundcube のコンテナイメージを元に一部設定を追加した docker イメージを作成して使っています。なので、まずはこれを再作成します。

dockerfile を編集します。

FROM roundcube/roundcubemail:1.5.6-apache

RUN apt-get update -y \
    && apt-get install -y git \
    && apt-get install -y sqlite3

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/

ベースイメージを Roundcube の 1.5.6 にしています。あと、 git と sqlite3 をインストールしているのは、最後に触れているように 1.6.x 系へのアップデートのテストも兼ねていたためです。1.5系で使うだけなら不要です。

今度はタグを2つつけてビルドします。

docker build — Docker-docs-ja 24.0 ドキュメント

[ユーザ名@NAS名 myroundcube]$ docker build -t myroundcube -t myroundcube:0.2 .
Sending build context to Docker daemon  3.072kB
Step 1/4 : FROM roundcube/roundcubemail:1.5.6-apache
(略)
Successfully tagged myroundcube:latest
Successfully tagged myroundcube:0.2
[ユーザ名@NAS名 myroundcube]$ 

無事できました。

新しいコンテナで起動

docker-compose.yml を次のようにします。

version: '3'

services:
  https-portal:
    image: steveltn/https-portal:1.23.1
    ports:
      - 'xxxx:80'
      - 'xxxx:443'
    restart: always
    volumes:
      - rcmail_ssl_certs:/var/lib/https-portal
    environment:
      DOMAINS: 'xxxx.yyyy.zzzz -> http://roundcubemail:80'
      STAGE: 'production'
      # FORCE_RENEW: 'true'
      CLIENT_MAX_BODY_SIZE: 0
  
  roundcubemail:
    image: myroundcube:0.2
    container_name: myrc
#    restart: unless-stopped
    volumes:
      - rcmail_www:/var/www/html
      - rcmail_sqlite:/var/roundcube/db
#    ports:
#      - 9001:80
    environment:
      - ROUNDCUBEMAIL_DB_TYPE=sqlite
      - ROUNDCUBEMAIL_SKIN=elastic
      - ROUNDCUBEMAIL_DEFAULT_HOST=ssl://サーバー名
      - ROUNDCUBEMAIL_DEFAULT_PORT=993
      - ROUNDCUBEMAIL_SMTP_SERVER=ssl://サーバー名
      - ROUNDCUBEMAIL_SMTP_PORT=465
      - ROUNDCUBEMAIL_UPLOAD_MAX_FILESIZE=30M
      - ROUNDCUBEMAIL_PLUGINS=archive,zipdownload,attachment_reminder

volumes:
    rcmail_ssl_certs:
        external: true
    rcmail_www:
        external: true
    rcmail_sqlite:
        external: true

Roundcube のイメージとしてさきほど作成したものを指定します。あと、添付ファイルのつけ忘れプラグイン attachment_reminder は最初から Roundcube に埋め込まれているので、上記で有効なプラグインとして記述するだけで使えるようになるみたいです。あとは、今のアプリケーション(コンテナ)で使っているのと同じボリュームを、上記の docker-compose でも再指定しておくこで、データをそのまま引きつぐようにします

なお、本来は、アップデート作業の前には必ずバックアップを取っておいた方が良いと思います。今回は Roundcube のストレージをバインドマウントからボリュームに変更する作業と同じタイミングで行ったので、バックアップは取得済みでしたので省略しています。

この docker-compose.yml を QNAP の Container Station から既存のアプリケーションの再作成で指定してやります。

これでアップデート完了です。

確認

Roundcubeにログインします。左側のメニューから、『このプログラムについて』を表示すると

のようにバージョンが上がっていることがわかります。また、プラグインの一覧に attachment_reminder が入っていることもわかります。

attachment_reminder を使ってみる

せっかく有効にしたので、早速 attachment_reminder を使ってみます。

ログイン後の画面の右側のメニューより、『設定』->『設定』->『メッセージの作成』を選択し、『基本的な設定』のなかにある『添付ファイルのつけ忘れを確認』を有効にします。

これで、保存を押せば設定完了です。

早速、試します。適当なテストメールを作って、本文中に『添付ファイル』と入れておきます。もちろん、添付ファイルはつけていません。この状態で送信ボタンを押すと

おぉ、警告してくれましたね。もちろん、添付ファイルがあれば、警告なしでそのまま送信されます。

なお、下記の記事によれば、添付以外にもいくつかのキーワードで警告してくれるようです。

Roundcubeのプラグイン〜添付ファイル〜 | OSSのデージーネット

これはずいぶんと役立ちそうです。

まとめ

最初は 1.5.3 から一足飛びにいまの最新版の 1.6.7 にアップデートしようと思って作業したのですが、

  • 1.6.x 系にアップデートすると ident_switch 関連で Roundube コンテナのコンソールに warning が表示される( 1.6.3 と 1.6.7 で試した)
  • そのうえ、データベース内の ident_switch テーブルの中身がすべて消えてしまう
  • ident_switch の後続になりそうな identy_switch は Roundcube 1.6 以降に対応(PHP 8 以降が必要)

ということがあり、なかなか一筋縄ではアップデートできなさそうな印象です。なので、これについてはまた改めて作業したいと思います。

とりあえずは 1.5系の最新版にしたので、当面はこれでいいかなと思ってます。