mirror of
https://github.com/okxlin/appstore.git
synced 2026-09-27 00:01:05 +00:00
Merge pull request #5401 from okxlin/adapt/bichon-20260731
feat: add Bichon
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
CONTAINER_NAME=bichon-compose-check
|
||||
PANEL_APP_PORT_HTTP=15630
|
||||
APP_DATA_DIR=./data
|
||||
BICHON_ENCRYPT_PASSWORD=replace-with-a-long-random-encryption-password
|
||||
BICHON_PUBLIC_URL=
|
||||
BICHON_LOG_LEVEL=info
|
||||
@@ -0,0 +1,95 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 15630
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: HTTP Port
|
||||
labelZh: HTTP 端口
|
||||
label:
|
||||
en: HTTP Port
|
||||
zh: HTTP 端口
|
||||
zh-Hant: HTTP 埠
|
||||
ja: HTTP ポート
|
||||
ko: HTTP 포트
|
||||
ru: HTTP-порт
|
||||
ms: Port HTTP
|
||||
pt-br: Porta HTTP
|
||||
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
|
||||
- edit: true
|
||||
envKey: BICHON_ENCRYPT_PASSWORD
|
||||
labelEn: Encryption Password
|
||||
labelZh: 加密密码
|
||||
label:
|
||||
en: Encryption Password
|
||||
zh: 加密密码
|
||||
zh-Hant: 加密密碼
|
||||
ja: 暗号化パスワード
|
||||
ko: 암호화 비밀번호
|
||||
ru: Пароль шифрования
|
||||
ms: Kata laluan penyulitan
|
||||
pt-br: Senha de criptografia
|
||||
random: true
|
||||
required: true
|
||||
rule: paramComplexity
|
||||
type: password
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: BICHON_PUBLIC_URL
|
||||
labelEn: Public URL
|
||||
labelZh: 公开访问地址
|
||||
label:
|
||||
en: Public URL
|
||||
zh: 公开访问地址
|
||||
zh-Hant: 公開存取位址
|
||||
ja: 公開 URL
|
||||
ko: 공개 URL
|
||||
ru: Публичный URL
|
||||
ms: URL awam
|
||||
pt-br: URL publico
|
||||
required: false
|
||||
type: text
|
||||
- default: info
|
||||
edit: true
|
||||
envKey: BICHON_LOG_LEVEL
|
||||
labelEn: Log Level
|
||||
labelZh: 日志级别
|
||||
label:
|
||||
en: Log Level
|
||||
zh: 日志级别
|
||||
zh-Hant: 日誌層級
|
||||
ja: ログレベル
|
||||
ko: 로그 수준
|
||||
ru: Уровень журнала
|
||||
ms: Tahap log
|
||||
pt-br: Nivel de log
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: trace
|
||||
value: trace
|
||||
- label: debug
|
||||
value: debug
|
||||
- label: info
|
||||
value: info
|
||||
- label: warn
|
||||
value: warn
|
||||
- label: error
|
||||
value: error
|
||||
@@ -0,0 +1 @@
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
services:
|
||||
bichon:
|
||||
image: "rustmailer/bichon:1.6.2"
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
user: "1000:1000"
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:15630"
|
||||
environment:
|
||||
- BICHON_ROOT_DIR=/data
|
||||
- BICHON_ENCRYPT_PASSWORD=${BICHON_ENCRYPT_PASSWORD}
|
||||
- BICHON_PUBLIC_URL=${BICHON_PUBLIC_URL}
|
||||
- BICHON_LOG_LEVEL=${BICHON_LOG_LEVEL}
|
||||
- BICHON_ANSI_LOGS=false
|
||||
volumes:
|
||||
- "${APP_DATA_DIR}:/data"
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
Executable
+60
@@ -0,0 +1,60 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"
|
||||
ENV_FILE="${ENV_FILE:-$ROOT_DIR/.env}"
|
||||
|
||||
read_env_value() {
|
||||
local key="$1"
|
||||
local value
|
||||
[[ -f "$ENV_FILE" ]] || return 0
|
||||
value="$(sed -n "s/^${key}=//p" "$ENV_FILE" | tail -n 1)"
|
||||
value="${value%$'\r'}"
|
||||
case "$value" in
|
||||
\"*\") value="${value#\"}"; value="${value%\"}" ;;
|
||||
\'*\') value="${value#\'}"; value="${value%\'}" ;;
|
||||
esac
|
||||
printf '%s\n' "$value"
|
||||
}
|
||||
|
||||
DATA_DIR="${APP_DATA_DIR:-}"
|
||||
if [[ -z "$DATA_DIR" ]]; then
|
||||
DATA_DIR="$(read_env_value APP_DATA_DIR)"
|
||||
fi
|
||||
DATA_DIR="${DATA_DIR:-./data}"
|
||||
|
||||
if [[ "$DATA_DIR" = /* ]]; then
|
||||
RESOLVED_DATA_DIR="$(realpath -m -- "$DATA_DIR")"
|
||||
if [[ -L "$DATA_DIR" ]]; then
|
||||
printf 'APP_DATA_DIR must not be a symbolic link\n' >&2
|
||||
exit 1
|
||||
fi
|
||||
if [[ -e "$RESOLVED_DATA_DIR" ]]; then
|
||||
[[ -d "$RESOLVED_DATA_DIR" ]] || {
|
||||
printf 'APP_DATA_DIR must refer to a directory\n' >&2
|
||||
exit 1
|
||||
}
|
||||
[[ "$(stat -c '%u:%g' "$RESOLVED_DATA_DIR")" == '1000:1000' ]] || {
|
||||
printf 'Existing absolute APP_DATA_DIR must be owned by UID/GID 1000:1000\n' >&2
|
||||
exit 1
|
||||
}
|
||||
else
|
||||
install -d -m 0750 -- "$RESOLVED_DATA_DIR"
|
||||
if [[ "$(id -u)" -eq 0 ]]; then
|
||||
chown 1000:1000 -- "$RESOLVED_DATA_DIR"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
RESOLVED_DATA_DIR="$(realpath -m -- "$ROOT_DIR/${DATA_DIR#./}")"
|
||||
case "$RESOLVED_DATA_DIR" in
|
||||
"$ROOT_DIR"/*) ;;
|
||||
*)
|
||||
printf 'Relative APP_DATA_DIR must remain inside the application version directory\n' >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
install -d -m 0750 -- "$RESOLVED_DATA_DIR"
|
||||
if [[ "$(id -u)" -eq 0 ]]; then
|
||||
chown 1000:1000 -- "$RESOLVED_DATA_DIR"
|
||||
fi
|
||||
fi
|
||||
Executable
+4
@@ -0,0 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
docker-compose down --volumes --remove-orphans
|
||||
Executable
+5
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)"
|
||||
exec "$SCRIPT_DIR/init.sh"
|
||||
@@ -0,0 +1,58 @@
|
||||
# Bichon
|
||||
|
||||
## 产品介绍
|
||||
|
||||
Bichon 是使用 Rust 构建的自托管邮件归档服务,可从多个 IMAP 账户下载邮件,在本地建立全文索引,并通过内置 Web 界面和 REST API 提供统一检索。它是归档工具,不是用于撰写或发送邮件的客户端。
|
||||
|
||||
## 主要功能
|
||||
|
||||
- 多账户 IMAP 增量归档与定时同步
|
||||
- 邮件、附件和联系人全文检索
|
||||
- 内嵌元数据、索引和压缩对象存储,无外部数据库依赖
|
||||
- 多用户 RBAC、账户级权限和 API token
|
||||
- EML、MBOX、Thunderbird 和 PST 导入工具
|
||||
|
||||
## Features
|
||||
|
||||
- Incremental archiving and scheduled synchronization for multiple IMAP accounts
|
||||
- Full-text search across messages, attachments, and contacts
|
||||
- Embedded metadata, index, and compressed object stores with no external database
|
||||
- Multi-user RBAC, account-level permissions, and API tokens
|
||||
- Import tools for EML, MBOX, Thunderbird, and PST data
|
||||
|
||||
## Introduction
|
||||
|
||||
Bichon is a self-hosted email archiving service written in Rust. It downloads mail from multiple IMAP accounts, builds local full-text indexes, and exposes a unified WebUI and REST API. It is an archive, not a mail client for composing or sending messages.
|
||||
|
||||
## 访问说明
|
||||
|
||||
安装后通过 `http://<服务器 IP>:15630` 访问,实际端口以安装表单中的 `PANEL_APP_PORT_HTTP` 为准。首次登录用户名为 `admin`,密码为 `admin@bichon`。请登录后立即在设置页面修改默认密码,并通过 1Panel 网站反向代理启用 HTTPS 后再向不受信任网络开放服务。
|
||||
|
||||
## 参数说明
|
||||
|
||||
| 变量 | 说明 | 默认值 | 必填 |
|
||||
| --- | --- | --- | --- |
|
||||
| `PANEL_APP_PORT_HTTP` | Web 界面和 API 的 HTTP 端口 | `15630` | 是 |
|
||||
| `APP_DATA_DIR` | 元数据、全文索引和邮件对象存储目录 | `./data` | 是 |
|
||||
| `BICHON_ENCRYPT_PASSWORD` | 用于加密保存的 IMAP/OAuth 凭据 | 安装时随机生成 | 是 |
|
||||
| `BICHON_PUBLIC_URL` | OAuth 回调和文档使用的公开 URL | 空 | 否 |
|
||||
| `BICHON_LOG_LEVEL` | 服务日志级别 | `info` | 是 |
|
||||
|
||||
## 数据与安全
|
||||
|
||||
- 使用 Bichon 官方单服务镜像,容器按上游要求以 UID/GID `1000:1000` 运行。
|
||||
- `APP_DATA_DIR` 必须位于本地文件系统;上游明确不支持 NFS、CIFS/SMB 等网络文件系统作为数据目录。
|
||||
- `BICHON_ENCRYPT_PASSWORD` 用于派生 AES-256-GCM 加密密钥。上游当前不支持直接轮换该口令后重新加密已有凭据,因此应妥善保管,并在恢复备份时使用相同值。
|
||||
- 可选 SMTP 接收器、TLS 文件和高级存储拆分未在默认安装中启用,可在确认上游配置与端口策略后手工扩展。
|
||||
|
||||
## 备份与升级
|
||||
|
||||
升级或迁移前,应停止 Bichon 并备份 `APP_DATA_DIR` 指向的完整目录以及安装时使用的加密口令。默认 `./data` 位于 1Panel 应用版本目录内,卸载时会随应用目录移除;若需要跨卸载保留归档,请选择独立绝对路径,并预先保证其所有权为 UID/GID `1000:1000`。
|
||||
|
||||
本应用只打包稳定版 `1.6.2`。截至本批次适配时,上游 `latest` 已指向 `2.0.0-alpha.1` 预发布镜像,因此没有将 `latest` 作为稳定版本交付。
|
||||
|
||||
## 参考资料
|
||||
|
||||
- 项目仓库: <https://github.com/rustmailer/bichon>
|
||||
- Docker 安装说明: <https://github.com/rustmailer/bichon#docker-recommended>
|
||||
- API 文档: 安装后访问 `/api-docs`
|
||||
@@ -0,0 +1,31 @@
|
||||
name: Bichon
|
||||
tags:
|
||||
- Tool
|
||||
title: 自托管邮件归档与全文检索服务
|
||||
description: 自托管邮件归档与全文检索服务
|
||||
additionalProperties:
|
||||
key: bichon
|
||||
name: Bichon
|
||||
tags:
|
||||
- Tool
|
||||
shortDescZh: 自托管邮件归档与全文检索服务
|
||||
shortDescEn: A self-hosted email archiving and full-text search service
|
||||
description:
|
||||
en: A self-hosted email archiving and full-text search service
|
||||
zh: 自托管邮件归档与全文检索服务
|
||||
zh-Hant: 自託管郵件封存與全文檢索服務
|
||||
ja: セルフホスト型のメールアーカイブおよび全文検索サービス
|
||||
ko: 자체 호스팅 이메일 보관 및 전문 검색 서비스
|
||||
ru: Самостоятельно размещаемый сервис архивации и полнотекстового поиска почты
|
||||
ms: Perkhidmatan arkib dan carian teks penuh e-mel hos sendiri
|
||||
pt-br: Servico auto-hospedado de arquivamento e busca textual de emails
|
||||
type: tool
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://github.com/rustmailer/bichon
|
||||
github: https://github.com/rustmailer/bichon
|
||||
document: https://github.com/rustmailer/bichon#quick-start
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 4.8 KiB |
Reference in New Issue
Block a user