ClouisleClouisle

站点设置

配置品牌、注册策略、安全、通知、存储和合规入口

站点设置决定未登录页面、认证流程、资源限制和运行时策略。只有具备相应 admin:settings:* 权限或超级管理员身份的用户才能看到对应标签。

访问系统设置

  1. 以管理员身份登录。
  2. 前往管理后台 > 站点设置(侧边栏「设置」分区)。
  3. 从设置子导航选择分类。

设置分类:

  • 常规(/site-settings)
  • 安全(/site-settings/security)
  • 通知渠道(/site-settings/notifications)
  • 存储(/site-settings/storage)
  • 记忆(/site-settings/memory)
  • SSO(/site-settings/sso)

设置以键值形式存储,通过 GET /api/v1/admin/site-settings 暴露(单键:GET/PUT /api/v1/admin/site-settings/{key},批量更新:PUT /api/v1/admin/site-settings)。查看需要 admin:settings:read;更新需要 admin:settings:update。

常规设置

站点信息

配置站点名称、URL、描述、图标、默认语言和认证页布局:

字段类型默认值说明
site_namestringClouisle站点名称
site_urlstring空站点 URL
site_descriptionstring空站点描述
site_iconstring空站点图标 URL
default_languageen 或 zhen默认语言
auth_page_layoutcentered 或 splitcentered认证页布局

更新站点信息:前往设置 > 常规,修改字段后点击保存更改。

主题与显示

配置主题模式、主色、品牌展示和界面元素:

字段类型默认值说明
theme_modelight、dark 或 systemsystem站点默认主题模式(用户可在个人设置中覆盖)
theme_primary_colorstring空主题主色(留空使用内置默认配色)
theme_branding_displayfull、name_only、icon_only 或 hiddenfull品牌展示

还可自定义更多颜色令牌(主色前景、背景、卡片、侧边栏、导航栏、强调色、图表色等)。

更新品牌:前往设置 > 常规,调整主题模式和颜色令牌后点击保存更改。

语言设置

配置站点默认语言和多语言支持:

字段类型默认值说明
default_languageen 或 zhen站点默认语言

用户可在个人设置中切换界面语言。语言切换后,界面文本和通知消息将使用对应语言的翻译。

法律与合规

配置 ICP 备案、服务条款和隐私政策:

字段类型默认值说明
icp_record_numberstring空ICP 备案号
icp_record_urlstring空ICP 备案链接
terms_enabledbooleanfalse启用服务条款
terms_urlstring空服务条款链接
terms_textstring空服务条款文本(Markdown,无链接时使用)
privacy_enabledbooleanfalse启用隐私政策
privacy_urlstring空隐私政策链接
privacy_textstring空隐私政策文本(Markdown,无链接时使用)
require_terms_acceptance_on_registerbooleanfalse注册时要求接受条款

服务条款和隐私政策仅在启用且提供 URL 或文本时显示。注册接受仅在 require_terms_acceptance_on_register 为 true 时强制。

安全设置

注册

配置注册、审批、邮箱验证和账户删除策略:

字段类型默认值说明
allow_registrationbooleantrue允许注册
require_approvalbooleantrue新用户需管理员审批
email_verificationbooleantrue邮箱验证
allow_account_deletionbooleantrue允许删除账户
default_role_idstringViewer 角色默认角色(初始化时自动设置)
default_team_idstring空默认团队
default_team_roleviewer、member 或 adminmember默认团队角色

密码策略

配置密码复杂度要求:

字段类型默认值说明
min_password_lengthnumber8最小密码长度
require_uppercasebooleantrue需要大写字母
require_numberbooleantrue需要数字
require_special_charbooleanfalse需要特殊字符
没有 require_lowercase 设置。

密码过期配置:

字段类型默认值说明
password_expiration_enabledbooleanfalse启用密码过期
password_expiration_daysnumber90密码过期天数
password_expiration_warning_daysnumber7过期前警告天数
password_history_countnumber5密码历史数量
password_min_age_daysnumber0密码最短使用天数
force_password_change_first_loginbooleanfalse首次登录强制修改密码

会话设置

配置会话超时、登录尝试限制和验证码:

字段类型默认值说明
session_timeout_daysnumber30会话超时天数
single_sessionbooleanfalse仅允许单一会话
max_login_attemptsnumber5最大登录尝试次数(超过锁定)
lockout_duration_minutesnumber15锁定时长(分钟)
enable_captchabooleanfalse启用验证码
没有「最大并发会话数」计数器。相关控制是 single_session 布尔值,会话有效期为 session_timeout_days(默认 30 天)。

双因素认证

字段类型默认值说明
require_totpbooleanfalse要求所有用户启用 TOTP

管理员 TOTP 统计和每用户状态/禁用端点在 /api/v1/admin/totp 下可用。

人机验证

字段类型默认值说明
enable_captchabooleanfalse在登录页启用人类验证

启用后,密码登录请求必须携带一次性验证凭据(captcha_id + captcha_token):前台先调用 POST /api/v1/login/captcha/click 把一次有效的点击交互兑换成私有一次性 proof,再随登录提交。缺失时报 captcha_required,校验失败报 captcha_invalid。

只有这一个总开关

安全页只有这一个验证码开关(界面文案「启用人类验证」),没有失败次数阈值、有效时长或难度配置。它是降低自动化尝试的补充手段,不能替代登录锁定与 TOTP:暴力破解防护实际由 max_login_attempts(默认 5)/lockout_duration_minutes(默认 15)与 require_totp 承担。把 enable_captcha 当作「机器人登录已解决」会留下暴力破解敞口。

模型端点白名单

保存或测试具有新 API 端点的模型前:

  1. 前往设置 > 安全。
  2. 将端点 Origin 添加到模型端点白名单,每行一个。
  3. 仅包含 scheme、主机名和非默认端口,例如 https://gateway.example.com 或 http://ollama.internal:11434。
  4. 保存安全设置,然后再次保存或测试模型。

安全

远程端点优先使用 HTTPS。仅对可信私有网络上的端点使用 HTTP,因为 API 密钥和模型流量在没有传输加密的情况下发送。

匹配是精确的。URL 路径被忽略,但 scheme、主机名和端口必须全部匹配。移除 Origin 会阻止后续的模型发现、连接测试和运行时请求,无需重启服务。默认白名单已预置 20 个已知供应商 Origin(如 https://api.openai.com、https://api.anthropic.com、http://localhost:11434),最多可保存 200 条。

出站网络白名单(SSRF 豁免)

Clouisle 对自定义 HTTP 工具、工作流 HTTP 请求节点、知识库网址导入与数据库工具连接测试执行统一的 SSRF 校验:域名先解析为 IP,任一解析结果落入 私有(is_private)/ 回环(is_loopback)/ 链路本地(is_link_local)/ 保留(is_reserved)/ 组播(is_multicast)/ 未指定(is_unspecified) 分类即拒绝。常见代表:127.0.0.1、10.0.0.0/8、172.16.0.0/12、192.168.0.0/16、169.254.169.254、fe80::/10、0.0.0.0、::,以及主机名 localhost、local、metadata.google.internal。

需要调用内网 API、微服务或内网数据库时,在设置 > 安全 > 出站网络白名单(SSRF 豁免) 中逐行添加被批准的目标(设置键 ssrf_allowed_targets,JSON 数组):

写法示例匹配规则
单个 IP192.168.1.50精确匹配该地址
CIDR 网段10.10.0.0/16解析到的 IP 属于该网段即放行
精确域名api.internal.service域名必须含 .,大小写不敏感
通配域名*.corp.internal匹配该后缀的所有子域以及基域本身

永远无法加入白名单的目标

保存时即被拒绝:*、0.0.0.0、::、169.254.169.254、metadata.google.internal,以及任何与云元数据(169.254.0.0/16)、组播(224.0.0.0/4)、未指定(0.0.0.0/32)网段重叠的 CIDR(含 0.0.0.0/0、::/0)。非法条目会直接报错,不会被静默忽略。

其他约束与行为:

  • 白名单最多 200 条,重复项自动去重;不含 . 的主机名(如 localhost)无法作为条目,请改用 IP 或 CIDR。
  • 留空白名单等于拦截全部内网目标——这是默认的安全姿态;放行范围越宽,工具与工作流越容易变成内网探测跳板。
  • 校验在每次请求时重新读取站点设置并解析域名,改完立即生效,不需要重启服务。
  • 透明代理的 Fake-IP 基准池 198.18.0.0/15(Clash/Surge/Mihomo TUN 模式)被自动放行,避免公共域名被误判为 SSRF。

通知设置

SMTP(邮件)

配置邮件发送:

字段类型默认值说明
smtp_enabledbooleanfalse启用 SMTP
smtp_hoststring空SMTP 主机
smtp_portnumber587SMTP 端口
smtp_encryptionnone、ssl 或 tlstls加密方式
smtp_usernamestring空SMTP 用户名
smtp_passwordstring空SMTP 密码
email_from_namestringClouisle发件人名称
email_from_addressstring空发件人地址

更新 SMTP 设置:前往设置 > 通知渠道,输入 SMTP 详情,设置发件人名称和地址,点击测试(POST /api/v1/admin/site-settings/test-email),然后点击保存更改。

smtp_enabled 默认 false、smtp_host 默认空,即开箱状态是「未配置邮箱」。在启用并填好主机、端口、加密方式、凭据与发件地址之前,邮件通知会静默地只留在站内:不会报错,也不会事后补发。先点测试确认投递成功,再保存。

外部通知渠道

以下渠道可单独启用和配置(各有自己的设置页分区和测试端点):

渠道关键设置测试端点
钉钉dingtalk_enabled、类型(webhook 或 app)、Webhook URL/Secret 或 App Key/Secret/Agent ID/test-dingtalk
企业微信wechat_enabled、wechat_notification_type(webhook 或 app)、Webhook URL 或 Corp ID(wechat_corp_id)/Agent ID(wechat_agent_id)/App Secret(wechat_secret)/test-wechat
飞书feishu_enabled、类型(webhook 或 app)、Webhook URL/Secret 或 App ID/Secret/test-feishu
Slackslack_enabled、Incoming Webhook URL/test-slack
Webhookwebhook_enabled、URL、方法、自定义请求头、正文模板、HMAC Secret/test-webhook

自动通知

自动通知页(GET/PUT /api/v1/admin/site-settings/auto-notifications)控制哪些事件类型创建通知以及哪些外部渠道接收通知。详见通知与外部渠道。

邮件模板

未实现 / Roadmap。没有邮件模板编辑器。通知消息由内置 i18n 翻译生成(app/core/i18n.py)。

通知偏好

Clouisle 的通知投递由管理员全局配置——没有每用户通知偏好系统。普通用户无法自定义接收哪些通知。

注意: 每用户偏好(邮件频率/摘要、每类型切换、免打扰时段、推送通知、通知分组、优先级级别、自定义规则和用户 Webhook 端点)未实现。

应用内通知

每个用户在通知中心和 /app/notifications 查看通知。通知范围分为:

  • 全局:所有用户可见
  • 团队:目标团队成员可见
  • 用户:特定用户可见

外部渠道(管理员配置)

管理员为自动通知类型全局配置外部投递渠道。可用渠道:

  • 邮件(需 SMTP 配置)
  • 钉钉
  • 企业微信
  • 飞书
  • Webhook(通用 Webhook)
  • Slack

渠道仅在全局配置中选中且管理员启用/配置时发送通知。未配置渠道时,通知仅停留在应用内。

管理员可配置项

管理员选择启用哪些自动事件类型(enabled_types)。默认启用以下类型:

类型事件
team.member_added / team.member_removed团队成员变更
team.role_changed / team.ownership_transferred角色/所有权变更
team.model_granted / team.model_revoked团队模型访问变更
user.activated / user.deactivated账户状态变更
user.password_reset管理员重置密码
user.pending_approval新注册待审批
kb.doc_indexed / kb.doc_failed知识库文档处理
workflow.run_failed工作流执行失败
workflow.pause_pending工作流暂停、等待人工审批
apikey.expiring / apikey.expiredAPI Key 生命周期
security.login_anomaly新地点/设备登录
security.account_locked多次失败后账户锁定
security.password_changed密码变更

其他类型(如 workflow.run_success、agent.published、agent.unpublished、password.expiring 等)存在并可启用。

管理员在管理后台 > 站点设置 > 通知渠道 > 自动通知(以及对应的渠道标签:邮件、钉钉、企业微信、飞书、Webhook、Slack)中配置。

用户可执行操作

作为用户可以:

  • 在通知中心和 /app/notifications 查看通知
  • 将单条通知标记为已读
  • 将所有通知标记为已读
  • 筛选通知列表(按类型、级别、范围、未读和搜索)

详见通知与外部渠道。

通知 API

  • GET /api/v1/notifications — 列出可见通知(筛选:scope、type、level、unread、search)
  • GET /api/v1/notifications/unread-count — 未读数量
  • POST /api/v1/notifications/read — 标记通知已读(notification_ids 或 mark_all)
  • 管理端点(/api/v1/admin/notifications)— 创建/删除通知,管理自动通知配置
没有 PATCH /api/v1/notifications/{id} 或用户级 DELETE /api/v1/notifications/{id}——读取是批量操作,删除仅管理员可执行。

最佳实践

用户:

  • 定期查看通知中心
  • 立即查看安全通知

管理员:

  • 仅在配置完渠道(SMTP、钉钉等)后再启用外部渠道
  • 谨慎选择启用类型,避免通知噪音

后台记忆提取设置

记忆(/site-settings/memory)会在配置的冷却时间后处理待处理用户轮次,或在达到待处理轮次阈值时立即触发后台提取。Agent 还必须启用记忆;关闭 Agent 记忆或该总开关都不会创建提取任务。

字段类型默认值约束与行为
memory_async_extraction_enabledbooleanfalse启用后台提取
memory_extraction_model_idstring""空值使用回退模型链;不可用或已禁用模型也会回退
memory_extraction_cooldown_secondsinteger18010-3600,去抖等待时间
memory_extraction_max_pending_turnsinteger61-50,达到待处理轮次后立即触发

提取模型按以下顺序回退:显式配置且启用的模型、Agent 分配的模型、系统默认聊天模型、首个可用聊天模型。冷却时间内会去抖;待处理轮次达到阈值时立即排队任务。

存储设置

文件存储

配置存储后端和知识库上传大小限制:

字段类型默认值说明
upload_storage_backendlocal 或 objectlocal上传存储后端
kb_document_max_upload_size_mbnumber (1-1024)50知识库单文件上传大小限制(MB)

更新存储设置:前往设置 > 存储,配置存储后端和最大上传大小后点击保存更改。

不支持 Azure Blob 存储。没有公共对象存储 URL 设置,也没有存储清理功能。

对象存储(S3 兼容)

配置 S3 兼容对象存储:

字段类型默认值说明
upload_storage_backendobject-上传存储后端设为对象存储
object_storage_endpointstring空对象存储端点
object_storage_bucketstring空存储桶名称
object_storage_regionstring空区域
object_storage_access_keystring空Access Key
object_storage_secret_keystring空Secret Key
object_storage_force_path_stylebooleantrue使用路径样式 URL
object_storage_securebooleantrue使用 HTTPS

配置对象存储:前往设置 > 存储,输入端点、存储桶、区域、Access Key 和 Secret Key,配置路径样式和 HTTPS 选项后点击保存更改。

审计日志保留

字段类型默认值说明
audit_log_retention_daysnumber (30-3650)365审计日志保留天数
audit_log_archive_pathstring/var/log/clouisle/audit_archives归档 JSON 文件写入的本地路径

超过保留期限的日志被归档(手动触发)到归档路径下的月度 JSON 文件,然后删除。详见审计日志管理。

审计告警(未启用)

以下 5 个键在初始化时写入数据库,但目前没有任何代码读取它们——没有检测任务,也没有投递逻辑,配置后不会产生任何告警:

字段类型默认值说明
audit_alert_enabledbooleantrue疑似遗留的告警总开关
audit_alert_webhookstring空疑似遗留的告警 Webhook URL
audit_alert_failed_login_thresholdnumber5疑似遗留的失败登录阈值
audit_alert_failed_login_windownumber5疑似遗留的检测窗口(分钟)
audit_alert_bulk_deletion_thresholdnumber10疑似遗留的批量删除阈值

需要安全告警时请使用已实现的路径:自动通知 的 security.* 事件与外部渠道。

SSO 设置

全局 SSO 行为

在设置 > 安全(SSO 分区)或设置 > SSO 中配置:

字段类型默认值说明
sso_enabledbooleanfalse启用 SSO
sso_allow_password_loginbooleantrue允许密码登录
sso_auto_create_usersbooleantrue自动创建用户
sso_require_approvalbooleanfalse需要审批
sso_match_by_emailbooleantrue通过邮箱匹配

SSO 提供商

SSO 提供商在设置 > SSO 中管理。提供商通过名称和协议通用创建——没有预设选择器(Google、GitHub、Azure AD 等);每个提供商的配置和属性映射需手动输入。详见配置单点登录。

团队设置

团队用于分组用户和资源(Agent、工作流和知识库)。团队管理员可以管理成员与团队基本信息;模型授权只能由超级管理员修改。

注意: 团队 slug、可见性、邀请流程、加入请求、成员限制、每团队资源限制、每团队安全/API 设置、计费、数据保留、自定义域名和品牌未实现。

访问团队管理

有两个入口,权限与能力完全不同:

入口路径所需权限能力
后台团队管理/teamsadmin:team:read(或超级管理员)跨团队查看/创建/编辑;模型授权仅超级管理员可改
团队设置(团队作用域)/app/team团队成员,且需 team:manage / team:update(团队管理员或所有者)当前团队的成员、基本信息与(只读)模型标签

打开方式:点击团队切换器 → 管理全部团队 (系统后台)(进入 /teams,仅在有 admin:team:read 时显示)或管理当前团队(进入 /app/team,仅在有 team:manage 时显示)。

成员(Member)与观察者(Viewer)角色没有 admin:team:read,因此看不到 /teams 入口;他们在团队切换器里只能看到管理当前团队(且需要 team:manage)。判断「某人为什么看不到团队管理」时先查这个权限,而不是怀疑前端 bug。

团队信息

仅可编辑三个字段:

字段说明
名称团队显示名称(必填)
描述可选描述(最多 500 字符)
头像 URL可选头像图片 URL

注意: 没有团队 slug——团队通过 ID 标识,在 UI 中通过名称引用。

模型授权

团队模型授权只能由超级管理员操作。 在 /app/team > 模型授权 标签里,团队管理员/所有者看到的是只读视图:已授权模型、启用状态,以及「今日用量 / 限额」进度(限额由系统管理员分配,无限制 表示未设上限)。修改授权要去 /teams 的团队详情,而该入口本身还要求 admin:team:read。

操作端点权限
查看团队已授权模型GET /api/v1/teams/{team_id}/models团队成员或超级管理员
授权模型POST /api/v1/teams/{team_id}/models仅超级管理员
修改配额/优先级/启用状态PUT /api/v1/teams/{team_id}/models/{model_id}仅超级管理员
撤销授权DELETE /api/v1/teams/{team_id}/models/{model_id}仅超级管理员
批量授权/撤销POST / DELETE /api/v1/teams/{team_id}/models/batch仅超级管理员
列出可授权模型GET /api/v1/teams/{team_id}/available-models仅超级管理员

授权后的模型才会出现在团队的 Agent 与知识库模型选择器中。

让团队管理员「自己去授权模型」是常见的流程错误:UI 里根本改不动,必须找超级管理员。这同时意味着模型配额是集中治理的——团队无法自行扩额。

成员管理

成员必须已有 Clouisle 账户;没有邮箱邀请或加入请求流程。

添加成员

  1. 打开管理团队(/teams)并选择团队。
  2. 打开成员标签。
  3. 点击添加成员。
  4. 选择现有用户和角色(管理员、成员或观察者——所有者不能在此分配)。
  5. 确认。

仅团队所有者或管理员可以添加成员。所有者不能添加另一成员为所有者。

改变成员角色

  1. 在成员列表中找到成员
  2. 选择**「改变角色」**
  3. 选择新角色(管理员、成员或观察者)

仅团队所有者可以改变成员角色(所有者自身除外)。

移除成员

  1. 在成员列表中找到成员
  2. 点击**「移除」**
  3. 确认

所有者不能被其他成员移除。

离开团队

  1. 打开管理团队(/teams)并选择团队。
  2. 打开成员。
  3. 确认

所有者在转让所有权前不能离开。

转让所有权

  1. 打开管理团队(/teams)并选择团队。
  2. 打开成员。
  3. 确认转让

前所有者变为管理员,新所有者获得完整控制权。

团队角色

角色固定:所有者、管理员、成员、观察者。没有每团队自定义角色。参见团队与成员了解完整权限矩阵。

未实现的功能

以下团队级功能未实现:

  • 团队 slug / 自定义 URL
  • 团队可见性(私有/内部/公开)和发现
  • 邀请过期、需要审批、允许的邮箱域名
  • 成员限制
  • 资源限制(Agent、知识库、工作流、对话)
  • 每团队密码/2FA/会话/IP 策略
  • 团队 API 设置、API Key 策略、速率限制
  • 计费 / 订阅 / 支付方式
  • 数据保留 / 导出 / 删除策略
  • 审计告警、自定义域名、品牌

参见:

灰度发布设置(私有)

以下键的类别是 retrieval、public=false——它们不出现在站点设置界面,也不通过公开设置接口暴露,只供运维调整,用于混合检索(hybrid retrieval)的灰度放量:

字段类型默认值说明
retrieval_hybrid_moderollout、enabled 或 disabledrollout混合检索总开关
retrieval_hybrid_team_idsJSON 数组[]显式纳入灰度的团队 ID 白名单
retrieval_hybrid_percentagenumber100确定性灰度百分比(0-100,按团队集合哈希分桶)

优先级:环境变量 RETRIEVAL_HYBRID_KILL_SWITCH=true 最高,无论设置如何都关闭混合检索;disabled 全局关闭;enabled 全局开启;rollout 时团队命中白名单即开启,否则按哈希分桶 < percentage 决定。

在 rollout 模式下,retrieval_hybrid_percentage 是基于「团队集合」的哈希分桶(同一组团队始终落在同一桶),不是随机抽样——所以调百分比会改变哪些团队被纳入,而不是逐个请求随机切换。把模式改成 disabled 会全局退回单一检索模式,直接影响召回质量。

功能标志与其他设置

未实现 / Roadmap。以下不是可配置的系统设置:
  • 功能标志(启用/禁用 Agent、工作流、知识库等)
  • 邮件模板
  • 安全头(HSTS、CSP、X-Frame-Options)
  • CORS 配置
  • IP 白名单
  • API 速率限制
  • 作为通用系统功能的 Webhook 配置
  • 第三方集成(Salesforce、HubSpot、Slack 应用、Google Analytics/Mixpanel 等分析)
  • 维护模式
  • 数据库连接池 / 缓存设置
  • 设置导出/导入和重置为默认值工作流

模型端点通过模型端点白名单(安全设置)限制,而非全局集成注册表。

关键默认值

新站点公开设置默认:站点名称 Clouisle、认证页居中、主题跟随系统、显示图标和名称、允许注册、邮箱验证开启、验证码关闭、SSO 关闭、密码登录允许、知识库单文件上传 50MB。

生效时机

页面设置保存后通常立即影响公开站点和后续请求;模型端点、存储和部署环境变量由服务端读取,修改后按部署方式重启相关服务。保存后使用隐身窗口验证登录页和注册页。

安全原则

  • SECRET_KEY、SMTP 密码、SSO 客户端密钥、对象存储密钥和模型 API Key 只存服务端 Secret。
  • 白名单按完整 Origin 匹配;空白名单会阻止模型端点。
  • 启用 SSO-only 前先确认至少一个连接可用,并保留管理员恢复路径。
  • 修改审计日志保留天数前确认归档路径与备份策略。

字段级清单见站点设置参考。

这篇文章对你有帮助吗?

本页目录