Repository navigation
Expand file tree
/
Copy path.env.example
More file actions
176 lines (151 loc) · 7.71 KB
/
Copy path.env.example
File metadata and controls
176 lines (151 loc) · 7.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# KukeChat Server 配置模板
#
# 复制为 .env 后填写。仓库不内置任何生产地址或密钥。
# ============================================================ 必填
# 令牌签名密钥。生成方式:
# python -c "import secrets; print(secrets.token_urlsafe(64))"
# 未设置、仍是占位值或长度不足 32 时,服务启动会直接失败 —— 这是刻意的:
# 可预测的签名密钥意味着任何人都能伪造任意用户(含管理员)的令牌。
JWT_SECRET_KEY=
# ============================================================ 基础
APP_NAME=KukeChat API
DATABASE_URL=sqlite+aiosqlite:///./kukechat.db
# 生产推荐 PostgreSQL(行级锁;坏事务会被角色上的超时自动杀掉,见 docs/postgres-cutover.md):
# DATABASE_URL=postgresql+asyncpg://kukechat:密码@127.0.0.1:5432/kukechat
# 只对 PostgreSQL 生效:每个 worker 的连接池大小 / 溢出上限
# DATABASE_POOL_SIZE=10
# DATABASE_MAX_OVERFLOW=10
# 匿名 HTTP 与 WebSocket/Redis 字节账聚合;默认关闭,排查期间短期设 true。
# 每 worker 每 60 秒分别输出非空 HTTP/WS 汇总;仅计应用接受的载荷字节,非公网/CDN/TLS 实际流量或客户端收讫。
TRANSPORT_METRICS_ENABLED=false
JWT_ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=10080
# 会话 Cookie。留空 COOKIE_SESSION_DOMAIN 表示只对当前域生效(推荐);
# 只有需要跨子域共享登录态时才填,例如 .example.com
COOKIE_SESSION_NAME=kukechat_session
COOKIE_SESSION_DOMAIN=
COOKIE_SESSION_DAYS=30
# 生产环境必须保持 true(仅通过 HTTPS 传输 Cookie)
COOKIE_SECURE=true
# ============================================================ 跨域
#
# 必须包含你的前端来源,否则浏览器端会被 CORS 拦下。
# 默认值只含本地开发地址。
CORS_ORIGINS=["http://localhost:5173","http://127.0.0.1:5173","http://tauri.localhost","https://tauri.localhost"]
CORS_ORIGIN_REGEX=https?://(localhost|127\.0\.0\.1|tauri\.localhost)(:\d+)?
# ============================================================ 实时消息
#
# 单进程部署可留空。多进程 / 多实例时必须配置 Redis,
# 否则 WebSocket 消息无法跨进程广播。
REDIS_URL=
REALTIME_REDIS_CHANNEL=kukechat:realtime
WEB_CONCURRENCY=
GUNICORN_TIMEOUT=120
GUNICORN_GRACEFUL_TIMEOUT=30
# ============================================================ 存储
# local = 存本地 uploads/ 目录;s3 = 存对象存储
STORAGE_BACKEND=local
S3_ENDPOINT_URL=
S3_BUCKET=
S3_ACCESS_KEY_ID=
S3_SECRET_ACCESS_KEY=
S3_REGION=
S3_PUBLIC_URL=
# 群文件私有桶(关公开读);配了就用预签名 URL 直传直下,见 docs/group-plus.md 第 5 节
S3_PRIVATE_BUCKET=
# 发版服务单个安装包的大小上限(字节),默认 1GB。见 docs/releases.md
RELEASE_MAX_ARTIFACT_BYTES=1073741824
# 「我的电脑 / 我的手机」临时文件(24 小时后过期),见 docs/self-chat.md 第 5 节
# 单个文件上限(字节),默认 1GB;每人同时存着的没过期文件总量上限,默认 5GB。
# 配了 S3_PRIVATE_BUCKET 时走预签名直传直下(self-transfers/ 前缀放私有桶),否则经后端中转
SELF_TRANSFER_MAX_BYTES=1073741824
SELF_TRANSFER_QUOTA_BYTES=5368709120
IMAGE_QUALITY=82
IMAGE_MAX_DIMENSION=2048
IMAGE_THUMBNAIL_MAX_DIMENSION=360
# 公告长图单独放宽(信息图/更新日志整图,缩到 2048 会把字糊掉)。
# 只影响 uploads/announcements/,头像、聊天图、作品图、组队图等仍走上面三个值。
IMAGE_ANNOUNCEMENT_MAX_BYTES=20971520
IMAGE_ANNOUNCEMENT_MAX_DIMENSION=8192
IMAGE_ANNOUNCEMENT_MAX_PIXELS=40000000
IMAGE_ANNOUNCEMENT_QUALITY=90
# ============================================================ 内容自动审核
#
# 本项目不自带审核服务,需要你自行接入一个提供 POST /moderate 的服务。
# 保持 false 时所有内容直接通过,仅保留人工举报处置流程。
# 设为 true 时必须同时填写 CONTENT_MODERATION_URL,否则启动失败。
CONTENT_MODERATION_ENABLED=false
CONTENT_MODERATION_URL=
# 审核服务的共享密钥(X-Moderation-Token 请求头),留空则不带
CONTENT_MODERATION_TOKEN=
CONTENT_MODERATION_TIMEOUT_SECONDS=30
CONTENT_MODERATION_RETRY_INTERVAL_SECONDS=300
CONTENT_MODERATION_RETRY_MIN_AGE_SECONDS=120
CONTENT_MODERATION_RETRY_BATCH_SIZE=20
# 审核服务对文本拿不准(review)时是否先撤回。默认只留记录等人工,不撤回
CONTENT_MODERATION_TEXT_REVIEW_RECALL=false
# 二审:一审标出来的文本消息和被举报的消息再交给审核服务的 /judge/text 看一遍上下文(docs/moderation-v2.md 1.10)。
# 只在 CONTENT_MODERATION_ENABLED 时生效。一审 block 时概率 ≥ BLOCK 才处罚;一审拿不准时概率 < ALLOW 直接放行
MODERATION_JUDGE_ENABLED=true
MODERATION_JUDGE_BLOCK_THRESHOLD=0.9
MODERATION_JUDGE_ALLOW_THRESHOLD=0.1
MODERATION_JUDGE_TIMEOUT_SECONDS=45
MODERATION_JUDGE_QUEUE_SIZE=16
MODERATION_JUDGE_CONTEXT_MESSAGES=5
# 空闲复查(docs/moderation-v2.md 1.11):二审闲着时复查一审放行、作者有风险信号或一审风险分 ≥ MIN_RISK 的群聊文字,
# 概率 ≥ THRESHOLD 的建成机器案件(不处罚)。还要后台开关 machine_idle_scan / machine_judge / machine_review 都开着
MODERATION_IDLE_SCAN_ENABLED=true
MODERATION_IDLE_SCAN_THRESHOLD=0.9
MODERATION_IDLE_SCAN_DEDUPE_HOURS=24
MODERATION_IDLE_SCAN_MIN_RISK=3
MODERATION_IDLE_SCAN_BATCH=50
MODERATION_IDLE_SCAN_LOOKBACK_HOURS=6
MODERATION_IDLE_SCAN_HOURLY_CAP=600
# 预筛(docs/moderation-v2.md 1.12):去掉 @、标点之后不超过 SHORT_CHARS 个字的、只有白名单域名网址的,不问二审
MODERATION_PREFILTER_SHORT_CHARS=3
MODERATION_TRUSTED_LINK_DOMAINS=ccw.site,kuke.ink
# 申诉预审:机器处罚的申诉,二审概率低于这个值时后台标「可能误判」
MODERATION_APPEAL_LOW_P=0.3
# 审核服务异常时的告警收件人,留空则不发送
MODERATION_ALERT_EMAIL=
MODERATION_ALERT_COOLDOWN_MINUTES=30
# ============================================================ 风纪委员
#
# 都有默认值,一般不用填;完整列表见 app/core/config.py 里 JURY_ 开头的项。
# 改了之后客户端通过 GET /jury/config 自动拿到新数字。
# 进入委员队列后多久没有结论就转给管理员
JURY_TIMEOUT_HOURS=72
# 公开群成员数达到这个值后,不再按群成员回避,只回避案件上下文里的发言人
JURY_LARGE_GROUP_MEMBERS=200
# 定案后多久内委员还能回看案件内容 / 多久之后进公示栏
JURY_CONTENT_RETENTION_DAYS=30
JURY_PUBLISH_DELAY_HOURS=72
# 总览里的比率至少要这么多样本才给
JURY_OVERVIEW_MIN_SAMPLE=5
# ============================================================ CCW 账号绑定
#
# 用户在指定 CCW 作品下留言,服务端轮询评论完成校验。
# 两项都填才会启用;留空则该功能整体不可用。
# 另外还需要接入 CCW 网关(向 CCW 取数的实现不在本仓库里,见 README「集成点」),没有接入时填了也不生效。
# GUEST_ID 请填你自己的访客标识,不要复用他人的。
CCW_BIND_SUBJECT_OID=
CCW_BIND_GUEST_ID=
CCW_BIND_SUBJECT_TYPE=CREATION
CCW_BIND_POLL_INTERVAL_SECONDS=20
CCW_BIND_CHALLENGE_MINUTES=20
# ============================================================ 邮件
SMTP_ENABLED=false
SMTP_HOST=
SMTP_PORT=465
SMTP_USER=
SMTP_PASSWORD=
SMTP_SENDER_NAME=KukeChat Server
SMTP_USE_SSL=true
# ============================================================ 邀请链接
#
# 邀请链接的落地页,用户打开即可加入群聊 / 添加好友。
# 通常指向你部署了 KukeChat 客户端的页面。
INVITE_BASE_URL=http://localhost:5173
# ============================================================ 任务提醒
TASK_REMINDER_CHECK_INTERVAL_SECONDS=60
TASK_REMINDER_ADVANCE_HOURS=24