diff --git a/apps/roundcube/README.md b/apps/roundcube/README.md new file mode 100644 index 000000000..6e330809b --- /dev/null +++ b/apps/roundcube/README.md @@ -0,0 +1,64 @@ +# Roundcube + +## 产品介绍 +Roundcube 是一个开源 Webmail 客户端,可通过浏览器连接已有的 IMAP/SMTP 邮件服务器收发邮件。 + +## 主要功能 +- 通过浏览器访问 IMAP 邮箱 +- 使用外部 SMTP 服务器发送邮件 +- 支持内置插件、主题和自定义配置 +- 使用本地 SQLite 保存 Webmail 元数据 + +## 访问说明 +安装后通过 `http://<服务器 IP>:18090` 访问,实际端口以安装表单中的 `PANEL_APP_PORT_HTTP` 为准。 + +## Introduction +Roundcube is an open source Webmail client for accessing an existing IMAP and SMTP mail server from a browser. + +## Features +- Browser-based IMAP mail access +- Send mail through an external SMTP server +- Built-in plugins, themes and custom configuration support +- Local SQLite metadata storage + +## 部署说明 +- 本应用使用官方 Docker 镜像 `roundcube/roundcubemail:1.7.1-apache-nonroot`。 +- 应用分类:邮件服务。 +- 支持架构:amd64、arm64。 +- Roundcube 只是 Webmail 客户端,不包含邮件服务器。请先准备可用的 IMAP/SMTP 服务,例如已有邮箱服务或应用商店中的 Maddy Mail Server。 + +## 端口 +| 变量 | 说明 | 默认值 | 必填 | +| --- | --- | --- | --- | +| PANEL_APP_PORT_HTTP | Web 访问端口 | 18090 | 是 | + +## 数据持久化 +| 变量 | 说明 | 默认值 | 必填 | +| --- | --- | --- | --- | +| APP_DATA_DIR | SQLite 数据库、自定义配置和 Enigma 插件数据目录 | ./data | 是 | + +升级或迁移前,请先在 1Panel 中备份上述数据目录。 + +## 参数说明 +| 变量 | 说明 | 默认值 | 必填 | +| --- | --- | --- | --- | +| ROUNDCUBEMAIL_DEFAULT_HOST | IMAP 主机,可使用 `tls://` 或 `ssl://` 前缀 | ssl://mail.example.com | 是 | +| ROUNDCUBEMAIL_DEFAULT_PORT | IMAP 端口 | 993 | 是 | +| ROUNDCUBEMAIL_SMTP_SERVER | SMTP 主机,可使用 `tls://` 或 `ssl://` 前缀 | tls://mail.example.com | 是 | +| ROUNDCUBEMAIL_SMTP_PORT | SMTP 端口 | 587 | 是 | +| ROUNDCUBEMAIL_USERNAME_DOMAIN | 登录用户名自动补全域名,留空表示不补全 | 空 | 否 | +| ROUNDCUBEMAIL_REQUEST_PATH | 反向代理子路径 | / | 是 | +| ROUNDCUBEMAIL_PLUGINS | 启用的内置插件列表 | archive,zipdownload | 是 | +| ROUNDCUBEMAIL_DES_KEY | Roundcube 加密密钥,安装后不要随意修改 | 随机生成 | 是 | + +## 使用说明 +- 如果 IMAP/SMTP 使用隐式 TLS,主机通常写成 `ssl://mail.example.com`,端口使用 `993` 或 `465`。 +- 如果 IMAP/SMTP 使用 STARTTLS,主机通常写成 `tls://mail.example.com`,端口使用 `143` 或 `587`。 +- `ROUNDCUBEMAIL_DES_KEY` 会影响 Roundcube 保存的加密数据,迁移或重建容器时应保持不变。 +- 自定义 Roundcube 配置可放入数据目录的 `config` 子目录,文件名需以 `.php` 结尾。 + +## 参考资料 +- 官网: +- 项目仓库: +- 官方 Docker 镜像文档: +- 官方镜像: diff --git a/apps/roundcube/data.yml b/apps/roundcube/data.yml new file mode 100644 index 000000000..c6d2d8b5d --- /dev/null +++ b/apps/roundcube/data.yml @@ -0,0 +1,31 @@ +name: Roundcube +tags: + - 邮件服务 +title: 现代 Webmail 客户端 +description: 现代 Webmail 客户端 +additionalProperties: + key: roundcube + name: Roundcube + tags: + - Email + shortDescZh: 现代 Webmail 客户端 + shortDescEn: Modern Webmail client + description: + en: A browser-based IMAP Webmail client for existing mail servers. + zh: 面向已有邮件服务器的浏览器 IMAP Webmail 客户端。 + zh-Hant: 面向既有郵件伺服器的瀏覽器 IMAP Webmail 用戶端。 + ja: 既存のメールサーバー向けのブラウザベース IMAP Webmail クライアントです。 + ko: 기존 메일 서버용 브라우저 기반 IMAP Webmail 클라이언트입니다. + ru: Браузерный IMAP Webmail-клиент для существующих почтовых серверов. + ms: Klien Webmail IMAP berasaskan pelayar untuk pelayan mel sedia ada. + pt-br: Cliente Webmail IMAP baseado em navegador para servidores de e-mail existentes. + type: website + crossVersionUpdate: false + limit: 0 + recommend: 0 + website: https://roundcube.net/ + github: https://github.com/roundcube/roundcubemail + document: https://github.com/roundcube/roundcubemail-docker + architectures: + - amd64 + - arm64 diff --git a/apps/roundcube/latest/.env.sample b/apps/roundcube/latest/.env.sample new file mode 100644 index 000000000..aa77398f2 --- /dev/null +++ b/apps/roundcube/latest/.env.sample @@ -0,0 +1,11 @@ +PANEL_APP_PORT_HTTP=18090 +APP_DATA_DIR=./data +ROUNDCUBEMAIL_DEFAULT_HOST=ssl://mail.example.com +ROUNDCUBEMAIL_DEFAULT_PORT=993 +ROUNDCUBEMAIL_SMTP_SERVER=tls://mail.example.com +ROUNDCUBEMAIL_SMTP_PORT=587 +ROUNDCUBEMAIL_USERNAME_DOMAIN= +ROUNDCUBEMAIL_REQUEST_PATH=/ +ROUNDCUBEMAIL_PLUGINS=archive,zipdownload +ROUNDCUBEMAIL_DES_KEY=roundcube_des_key_change +CONTAINER_NAME=roundcube diff --git a/apps/roundcube/latest/data.yml b/apps/roundcube/latest/data.yml new file mode 100644 index 000000000..468ea82ea --- /dev/null +++ b/apps/roundcube/latest/data.yml @@ -0,0 +1,167 @@ +additionalProperties: + formFields: + - default: 18090 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Web Port + labelZh: Web 端口 + label: + en: Web Port + zh: Web 端口 + zh-Hant: Web 埠 + ja: Web ポート + ko: Web 포트 + ru: Web-порт + ms: Port Web + pt-br: Porta Web + required: true + rule: paramPort + type: number + - default: ./data + edit: true + envKey: APP_DATA_DIR + labelEn: Data Directory + labelZh: 数据目录 + label: + en: Data Directory + zh: 数据目录 + zh-Hant: 資料目錄 + ja: データディレクトリ + ko: 데이터 디렉터리 + ru: Каталог данных + ms: Direktori data + pt-br: Diretorio de dados + required: true + type: text + - default: ssl://mail.example.com + edit: true + envKey: ROUNDCUBEMAIL_DEFAULT_HOST + labelEn: IMAP Host + labelZh: IMAP 主机 + label: + en: IMAP Host + zh: IMAP 主机 + zh-Hant: IMAP 主機 + ja: IMAP ホスト + ko: IMAP 호스트 + ru: IMAP-хост + ms: Hos IMAP + pt-br: Host IMAP + required: true + type: text + - default: 993 + edit: true + envKey: ROUNDCUBEMAIL_DEFAULT_PORT + labelEn: IMAP Port + labelZh: IMAP 端口 + label: + en: IMAP Port + zh: IMAP 端口 + zh-Hant: IMAP 埠 + ja: IMAP ポート + ko: IMAP 포트 + ru: IMAP-порт + ms: Port IMAP + pt-br: Porta IMAP + required: true + rule: paramPort + type: number + - default: tls://mail.example.com + edit: true + envKey: ROUNDCUBEMAIL_SMTP_SERVER + labelEn: SMTP Host + labelZh: SMTP 主机 + label: + en: SMTP Host + zh: SMTP 主机 + zh-Hant: SMTP 主機 + ja: SMTP ホスト + ko: SMTP 호스트 + ru: SMTP-хост + ms: Hos SMTP + pt-br: Host SMTP + required: true + type: text + - default: 587 + edit: true + envKey: ROUNDCUBEMAIL_SMTP_PORT + labelEn: SMTP Port + labelZh: SMTP 端口 + label: + en: SMTP Port + zh: SMTP 端口 + zh-Hant: SMTP 埠 + ja: SMTP ポート + ko: SMTP 포트 + ru: SMTP-порт + ms: Port SMTP + pt-br: Porta SMTP + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ROUNDCUBEMAIL_USERNAME_DOMAIN + labelEn: Login Domain + labelZh: 登录域名 + label: + en: Login Domain + zh: 登录域名 + zh-Hant: 登入網域 + ja: ログインドメイン + ko: 로그인 도메인 + ru: Домен входа + ms: Domain log masuk + pt-br: Dominio de login + required: false + type: text + - default: / + edit: true + envKey: ROUNDCUBEMAIL_REQUEST_PATH + labelEn: Request Path + labelZh: 请求路径 + label: + en: Request Path + zh: 请求路径 + zh-Hant: 請求路徑 + ja: リクエストパス + ko: 요청 경로 + ru: Путь запроса + ms: Laluan permintaan + pt-br: Caminho de requisicao + required: true + type: text + - default: archive,zipdownload + edit: true + envKey: ROUNDCUBEMAIL_PLUGINS + labelEn: Built-in Plugins + labelZh: 内置插件 + label: + en: Built-in Plugins + zh: 内置插件 + zh-Hant: 內建外掛 + ja: 組み込みプラグイン + ko: 기본 제공 플러그인 + ru: Встроенные плагины + ms: Pemalam terbina dalam + pt-br: Plugins integrados + required: true + type: text + - default: roundcube_des_key_change + edit: true + envKey: ROUNDCUBEMAIL_DES_KEY + labelEn: Encryption Key + labelZh: 加密密钥 + label: + en: Encryption Key + zh: 加密密钥 + zh-Hant: 加密金鑰 + ja: 暗号化キー + ko: 암호화 키 + ru: Ключ шифрования + ms: Kunci penyulitan + pt-br: Chave de criptografia + random: true + required: true + rule: paramComplexity + type: password diff --git a/apps/roundcube/latest/docker-compose.yml b/apps/roundcube/latest/docker-compose.yml new file mode 100644 index 000000000..684953d0c --- /dev/null +++ b/apps/roundcube/latest/docker-compose.yml @@ -0,0 +1,37 @@ +services: + roundcube: + image: "roundcube/roundcubemail:1.7.1-apache-nonroot" + container_name: ${CONTAINER_NAME} + restart: always + networks: + - 1panel-network + ports: + - "${PANEL_APP_PORT_HTTP}:8000" + environment: + - ROUNDCUBEMAIL_DB_TYPE=sqlite + - ROUNDCUBEMAIL_DB_DIR=/var/roundcube/db + - ROUNDCUBEMAIL_DB_NAME=roundcube + - ROUNDCUBEMAIL_DEFAULT_HOST=${ROUNDCUBEMAIL_DEFAULT_HOST} + - ROUNDCUBEMAIL_DEFAULT_PORT=${ROUNDCUBEMAIL_DEFAULT_PORT} + - ROUNDCUBEMAIL_SMTP_SERVER=${ROUNDCUBEMAIL_SMTP_SERVER} + - ROUNDCUBEMAIL_SMTP_PORT=${ROUNDCUBEMAIL_SMTP_PORT} + - ROUNDCUBEMAIL_USERNAME_DOMAIN=${ROUNDCUBEMAIL_USERNAME_DOMAIN} + - ROUNDCUBEMAIL_REQUEST_PATH=${ROUNDCUBEMAIL_REQUEST_PATH} + - ROUNDCUBEMAIL_PLUGINS=${ROUNDCUBEMAIL_PLUGINS} + - ROUNDCUBEMAIL_SKIN=elastic + - ROUNDCUBEMAIL_DES_KEY=${ROUNDCUBEMAIL_DES_KEY} + volumes: + - "${APP_DATA_DIR}/db:/var/roundcube/db" + - "${APP_DATA_DIR}/config:/var/roundcube/config:ro" + - "${APP_DATA_DIR}/enigma:/var/roundcube/enigma" + healthcheck: + test: ["CMD-SHELL", "curl -fsS http://127.0.0.1:8000/ >/dev/null || exit 1"] + interval: 10s + timeout: 5s + retries: 10 + labels: + createdBy: "Apps" + +networks: + 1panel-network: + external: true diff --git a/apps/roundcube/latest/scripts/init.sh b/apps/roundcube/latest/scripts/init.sh new file mode 100755 index 000000000..0baabc162 --- /dev/null +++ b/apps/roundcube/latest/scripts/init.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -euo pipefail + +DATA_DIR="${APP_DATA_DIR:-./data}" +mkdir -p "${DATA_DIR}/db" "${DATA_DIR}/config" "${DATA_DIR}/enigma" +chown -R 33:33 "${DATA_DIR}/db" "${DATA_DIR}/enigma" 2>/dev/null || true +chmod 755 "${DATA_DIR}/config" 2>/dev/null || true diff --git a/apps/roundcube/latest/scripts/uninstall.sh b/apps/roundcube/latest/scripts/uninstall.sh new file mode 100755 index 000000000..ab8a8d674 --- /dev/null +++ b/apps/roundcube/latest/scripts/uninstall.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker-compose down --volumes diff --git a/apps/roundcube/latest/scripts/upgrade.sh b/apps/roundcube/latest/scripts/upgrade.sh new file mode 100755 index 000000000..9879df4c3 --- /dev/null +++ b/apps/roundcube/latest/scripts/upgrade.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash +set -euo pipefail +exit 0 diff --git a/apps/roundcube/logo.png b/apps/roundcube/logo.png new file mode 100644 index 000000000..b37854589 Binary files /dev/null and b/apps/roundcube/logo.png differ diff --git a/apps/roundcube/source-evidence.json b/apps/roundcube/source-evidence.json new file mode 100644 index 000000000..636dd3ef9 --- /dev/null +++ b/apps/roundcube/source-evidence.json @@ -0,0 +1,14 @@ +{ + "repository": "https://github.com/roundcube/roundcubemail", + "dockerRepository": "https://github.com/roundcube/roundcubemail-docker", + "dockerDocs": "https://github.com/roundcube/roundcubemail-docker/blob/master/README.md", + "composeFile": "https://github.com/roundcube/roundcubemail-docker/blob/master/examples/docker-compose-simple.yaml", + "imageRegistry": "https://hub.docker.com/r/roundcube/roundcubemail", + "release": "https://github.com/roundcube/roundcubemail/releases/tag/1.7.1", + "notes": [ + "Issue request: https://github.com/okxlin/appstore/issues/439", + "Official Docker README documents the roundcube/roundcubemail image, IMAP/SMTP environment variables, SQLite persistence at /var/roundcube/db, custom config files at /var/roundcube/config, and nonroot image behavior.", + "The app uses the official 1.7.1-apache-nonroot image, maps the nonroot HTTP port 8000, and persists the SQLite database plus optional config/enigma directories under APP_DATA_DIR.", + "Roundcube is a Webmail client only; it does not include a mail server and must connect to an existing IMAP/SMTP service." + ] +}