在 Docker 容器中运行 Roundcube
最简单的方法是运行官方镜像:
docker run -e ROUNDCUBEMAIL_DEFAULT_HOST=mail -e ROUNDCUBEMAIL_SMTP_SERVER=mail -p 8000:80 -d roundcube/roundcubemail
其中 mail 应替换为 IMAP 和 SMTP 服务器的主机名。
标签和变体
Roundcube 提供三种不同的变体(apache、fpm 和 fpm-alpine),它们均基于相同变体的官方 php 镜像构建。
latest-* 标签始终包含 Roundcube Webmail 的最新稳定版以及可用的 php 基础镜像的最新版本。对于 Roundcube 的近期主要版本,我们有类似 1.3.x 的标签。这些标签会持续更新对应发布系列的版本以及基础镜像的更新。
我们还发布完整版本标签(例如 1.3.10),但这些标签仅代表发布时的版本和基础镜像。这些标签不会接收任何更新。
配置/环境变量
可以设置以下环境变量来配置您的 Roundcube Docker 实例:
ROUNDCUBEMAIL_DEFAULT_HOST - 要连接的 IMAP 服务器的主机名。对于加密连接,请在主机名前添加 tls://(STARTTLS)或 ssl://(SSL/TLS)。
ROUNDCUBEMAIL_DEFAULT_PORT - IMAP 端口号;默认为 143
ROUNDCUBEMAIL_SMTP_SERVER - 用于发送邮件的 SMTP 服务器的主机名。对于加密连接,请在主机名前添加 tls://(STARTTLS)或 ssl://(SSL/TLS)。
ROUNDCUBEMAIL_SMTP_PORT - SMTP 端口号;默认为 587
ROUNDCUBEMAIL_USERNAME_DOMAIN - 登录时自动将此域名添加到用户名中。有关更多信息,请参阅 defaults.inc.php。
ROUNDCUBEMAIL_REQUEST_PATH - 使用反向代理时指定请求路径;默认为 /。有关可能的值,请参阅 defaults.inc.php。
ROUNDCUBEMAIL_PLUGINS - 要激活的内置插件列表。默认为 archive,zipdownload
ROUNDCUBEMAIL_COMPOSER_PLUGINS - 启动时要安装的 composer 包列表。使用 ROUNDCUBEMAIL_PLUGINS 来启用它们。
ROUNDCUBEMAIL_SKIN - 配置默认主题。默认为 elastic
ROUNDCUBEMAIL_UPLOAD_MAX_FILESIZE - 文件上传大小限制;默认为 5M。(注意:此变量在 nonroot-image 中无效!)
ROUNDCUBEMAIL_SPELLCHECK_URI - 指向 Google XML 拼写检查 API 的完全限定 URL,例如 google-spell-pspell
ROUNDCUBEMAIL_ASPELL_DICTS - 用于拼写检查的 aspell 字典列表(逗号分隔,例如 de,fr,pl)。(注意:此变量在 nonroot-image 中无效!)
默认情况下,镜像将使用本地 SQLite 数据库来存储用户账户元数据。
它将在容器目录 /var/roundcube/db 内创建。为了持久化数据库,应在此路径添加一个卷
挂载。
(对于生产环境,请单独评估 SQLite 是否是合适的数据库选择。)
连接到数据库
运行 Roundcube 的推荐方式是连接到 MySQL 数据库。指定以下环境变量以完成此操作:
ROUNDCUBEMAIL_DB_TYPE - 数据库提供商;目前支持:mysql、pgsql、sqlite
ROUNDCUBEMAIL_DB_HOST - 数据库服务的主机(或 Docker 实例)名称;根据链接的容器,默认为 mysql 或 postgres。
ROUNDCUBEMAIL_DB_PORT - 数据库服务的端口号;根据链接的容器,默认为 3306 或 5432。
ROUNDCUBEMAIL_DB_USER - Roundcube 的数据库用户名;在 mysql 上默认为 root
ROUNDCUBEMAIL_DB_PASSWORD - 数据库连接的密码
ROUNDCUBEMAIL_DB_NAME - Roundcube 使用的数据库名称;默认为 roundcubemail
在启动容器之前,请确保所提供的数据库已存在,并且给定的数据库用户 具有创建表的权限。
使用指向 MySQL 主机的链接以及用户名/密码变量运行它:
docker run --link=mysql:mysql -d roundcube/roundcubemail
非 root 镜像
我们提供以普通用户而非 root 用户运行所有进程的 nonroot 镜像。这可以限制在配置错误或安全漏洞情况下可能造成的损害。
不以 root 用户运行任何进程会禁用一些需要在容器启动时安装包或写入系统文件的功能。具体来说,您无法使用环境变量 ROUNDCUBEMAIL_UPLOAD_MAX_FILESIZE 和 ROUNDCUBEMAIL_ASPELL_DICTS。
- 要指定最大上传文件大小,请将所需的 php 配置选项写入文件,并将其绑定挂载到
/usr/local/etc/php/conf.d/$filename。请参阅examples/docker-compose-nonroot.yaml和examples/nonroot-custom-php-config.ini获取示例。 - 要安装额外的 aspell 词典,您必须基于我们的镜像构建自己的容器镜像,并在构建过程中安装它们。
持久化数据
Roundcube 容器默认不持久化存储任何数据。但是, 有一些目录可以作为卷或绑定挂载来挂载,以在容器之间共享数据 或向容器中注入额外数据:
-
/var/www/html:Roundcube 安装目录 这是 Roundcube 的文档根目录。插件和额外的皮肤与 Roundcube 源代码一起存储在此处。 如果使用 FPM 变体,请共享此目录,并让 Web 服务器容器从此处提供静态文件。 -
/var/roundcube/config:额外配置文件的存放位置 请参阅 高级配置 部分以获取详细信息。 -
/var/roundcube/db:SQLite 数据库的存储位置 仅在使用ROUNDCUBEMAIL_DB_TYPE=sqlite持久化 Roundcube 数据库时需要。 -
/var/roundcube/enigma:enigma 插件的存储位置 如果启用,"enigma" 插件将在此处存储 OpenPGP 密钥。 -
/tmp/roundcube-temp:Roundcube 的临时文件夹 上传的附件或缩略图等临时文件将存储在此处。 在运行多个 roundcube 容器副本时,请通过卷共享此目录。
Docker Secrets
在 Docker Swarm 中运行 Roundcube 容器时,您可以使用 Docker Secrets 在所有实例之间共享凭据。Roundcube 目前支持以下 secrets:
roundcube_des_key:用于加密的唯一随机密钥roundcube_db_user:数据库连接用户名(mappend 到ROUNDCUBEMAIL_DB_USER)roundcube_db_password:数据库连接密码(mappend 到ROUNDCUBEMAIL_DB_PASSWORD)roundcube_oauth_client_secret:OAuth 客户端密钥(mappend 到ROUNDCUBEMAIL_OAUTH_CLIENT_SECRET)
Advanced configuration
除了上述环境变量外,Docker 镜像还允许添加自定义配置文件,
这些文件将被合并到 Roundcube 的默认配置中。因此,镜像定义了路径 /var/roundcube/config,
在此处搜索并包含额外的配置文件(*.php)。在启动 Docker 容器时,挂载包含您配置
文件的本地目录 - 请检查有效的 PHP 语法 - :
docker run -v ./config/:/var/roundcube/config/ -d roundcube/roundcubemail
查看 Roundcube Webmail 维基以获取 Roundcube 配置选项 的参考。
可以通过将配置文件挂载到 /usr/local/etc/php/conf.d/zzz_roundcube-custom.ini 来实现自定义 PHP 设置。
例如,它可以用于增加 PHP 内存限制(memory_limit=128M)。
安装 Roundcube 插件
随着最新更新,Roundcube 镜像现在能够安装插件。
您需要用要安装的 composer 包列表填写 ROUNDCUBEMAIL_COMPOSER_PLUGINS。
并在 ROUNDCUBEMAIL_PLUGINS 中设置它们以启用已安装的插件。
例如:
ROUNDCUBEMAIL_COMPOSER_PLUGINS: "weird-birds/thunderbird_labels,jfcherng-roundcube/show-folder-size,germancoding/tls_icon:^1.2"
ROUNDCUBEMAIL_PLUGINS: thunderbird_labels, show_folder_size, tls_icon
要覆盖插件的默认配置,您可能需要使用一个后置设置脚本(见下文),将自定义配置文件移动到插件目录中。
前置设置和后置设置任务
为了在容器中的 Roundcubemail 设置完成之前或之后执行自定义任务,您可以将目录绑定挂载到 /entrypoint-tasks/pre-setup/ 和 /entrypoint-tasks/post-setup/。然后,这些目录中的所有可执行文件将分别在入口脚本的开始或结束时执行。如果某个可执行文件以大于 1 的代码退出,入口脚本也会退出。
每个可执行文件都会接收容器的 CMD 作为参数。
它们按字母顺序执行(bash 在 en_US 区域设置下的理解方式)。
如果由于自定义的 CMD 而跳过了 Roundcubemail 设置,这些任务也会被跳过。
HTTPS
目前所有镜像都配置为使用 HTTP。要提供 HTTPS,请在它们前面运行一个额外的反向代理,由该代理处理证书并终止 TLS。或者,您可以基于我们的镜像(或使用高级配置方法)让 Apache 或 nginx 提供 HTTPS——但请勿提交 issue 要求支持此类配置。
示例
使用 docker-compose 的几个示例配置可以在我们的 Github 仓库 中找到。
构建 Docker 镜像
使用本仓库中的 Dockerfile 来构建您自己的 Docker 镜像。
它从 Github 下载页面拉取 Roundcube Webmail 的最新构建版本,并在一个 php:7.4-apache Docker 镜像之上进行构建。
使用其中一个变体目录进行构建
docker build -t roundcubemail .
你也可以通过扩展此镜像来创建自己的 Docker 镜像。
例如,你可以扩展此镜像以添加 composer 并为特殊插件安装依赖项:
FROM roundcube/roundcubemail:latest
# COMPOSER_ALLOW_SUPERUSER is needed to run plugins when using a container
ENV COMPOSER_ALLOW_SUPERUSER=1
RUN set -ex; \
apt-get update; \
apt-get install -y --no-install-recommends \
git \
; \
许可证
本程序是自由软件:您可以按照自由软件基金会发布的 GNU 通用公共许可证的条款 重新分发和/或修改它,无论是许可证的第 3 版,还是(在您选择的情况下)任何更高版本。
本程序分发的希望是它会有用,但没有任何保证; 甚至没有对适销性或特定用途适用性的隐含保证。 有关更多详细信息,请参阅 GNU 通用公共许可证。
有关许可证以及皮肤和插件例外的更多详细信息, 请参阅 [roundcube.net/license][license]。