管理面板
Bonds 包含管理面板,用于系统级配置和用户管理。
成为管理员
在新 Bonds 实例上第一个注册的用户会自动获得实例管理员权限。之后,现有管理员可以在管理面板的用户管理页面中提升其他用户为管理员。
管理面板
拥有管理员权限的用户可以访问管理面板来配置:
- 系统设置:所有存储在数据库中的应用级配置。
- 用户管理:查看和管理所有注册用户。
- 备份:配置自动备份和触发手动备份。
系统设置
大部分配置已从环境变量迁移到数据库存储。管理面板提供 Web UI 来配置:
| 类别 | 设置项 |
|---|---|
| 常规 | 应用名称、URL、公告横幅 |
| SMTP | 邮件服务器地址、端口、可选凭证、发件人。用户名和密码都留空时跳过 SMTP AUTH。 |
| OAuth | GitHub 和 Google OAuth 客户端凭证 |
| OIDC | OpenID Connect 提供商(SSO) |
| WebAuthn | Relying Party ID、显示名、允许的来源 |
| Telegram | Bot Token(用于通知) |
| 地理编码 | 服务提供商和 API Key |
| 存储 | 最大上传大小(在此管理,而非通过环境变量) |
| 备份 | Cron 调度、保留天数 |
| Swagger | 启用或禁用 API 文档界面 |
TIP
首次启动时,这些设置会从环境变量中读取作为初始值。之后所有修改都通过管理面板进行。
静态加密
当配置了 SETTINGS_ENC_KEY 时(参见配置, 加密敏感设置),以下字段会以 AES-256-GCM 加密存储在数据库中:
- system_settings 中的
smtp.password以及任何secret.*键 - geocoding_provider_configs 中各服务商的结构化
config - oauth_providers 中所有
client_secret(GitHub、Google、GitLab、Discord、OIDC)
无论是否启用加密,Admin GET /admin/settings 始终把敏感值脱敏为 ***,管理员浏览器和审计日志看不到明文凭证。提交 *** 进行更新表示保留原值,UI 可以安全地往返编辑非敏感字段而不会清空密钥。
启用密钥后首次启动会自动将已有明文行迁移为密文,迁移幂等可重复执行。
个性化设置
账户所有者可通过个性化设置自定义 Bonds 的多个方面,API 路径为 /api/settings/personalize/:entity。
多个个性化设置表支持重排序。你可以通过界面上的按钮将性别、代词、模板页面、日记模板章节、群组角色或模板页内的模块等项目向上或向下移动。
| 实体 | 可自定义内容 | 作用域 | 支持重排序 |
|---|---|---|---|
genders | 性别选项 | 账户级 | 是 |
pronouns | 代词选项 | 账户级 | 是 |
address-types | 地址类型标签 | 账户级 | 是 |
pet-categories | 宠物类别 | 账户级 | 是 |
contact-info-types | 联系方式类型 | 账户级 | 是 |
relationship-types | 关系类型定义 | 账户级 | 是(子类型) |
templates | 联系人页面模板 | 账户级 | 是(页面) |
modules | 模块配置 | 账户级 | 是(页面模块) |
currencies | 货币偏好 | 账户级 | 否(启用开关) |
religions | 宗教选项 | 账户级 | 是 |
call-reasons | 通话原因分类 | 账户级 | 是(子原因) |
gift-occasions | 礼物场合类型 | 账户级 | 是 |
gift-states | 礼物追踪状态 | 账户级 | 是 |
post-templates | 日记模板 | 账户级 | 是(章节) |
group-types | 联系人分组类型 | 账户级 | 是(角色) |
task-statuses | 自定义任务状态 | 账户级 | 是 |
部分内置项(如邮箱和电话联系方式类型)不可删除。
用户邀请
通过邮件邀请他人加入你的账户:
- 前往设置,邀请。
- 输入收件人邮箱并选择权限级别。
- 系统发送包含邀请链接的邮件,7 天内有效。
- 收件人创建账户并自动关联到你的账户。
权限级别:管理者(100)、编辑者(200)、查看者(300)。
备份系统
Bonds 内置自动备份系统:
- 定时备份:在管理面板中配置 Cron 调度(6 字段格式含秒,如
0 0 2 * * *表示每天凌晨 2 点)。 - 手动备份:在管理面板中按需触发备份。
- 保留策略:旧备份在可配置天数后自动清理(默认 30 天)。
- 存储位置:备份存储在
BACKUP_DIR配置的目录中(默认data/backups)。
定时任务(Cron)
提醒发送、CardDAV/CalDAV 同步以及自动备份都通过内置的 cron 调度器运行:
- 单进程 SQLite 部署开箱即用。每个任务在每个调度时刻最多执行一次。
- 多副本 PostgreSQL 部署(如 Kubernetes Deployment
replicas: 2、Docker Composedeploy.replicas、负载均衡的多个实例)同样安全。每个任务通过pg_try_advisory_xact_lock+ 对crons表的原子条件UPDATE加锁,两个副本即便在同一刻触发同一任务也不会同时执行。 - 副本崩溃不会导致任务卡死。advisory lock 在持有事务结束时自动释放。
无需任何配置,调度器会根据数据库驱动自动选择正确的策略。