forked from keycompute/keycompute
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path.env.example
More file actions
309 lines (285 loc) · 21.3 KB
/
Copy path.env.example
File metadata and controls
309 lines (285 loc) · 21.3 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
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
# =============================================================================
# .env.example — KeyCompute 环境变量配置模板
#
# 使用方法:
# cp .env.example .env
# # 编辑 .env 填入实际值,.env 已被 .gitignore 排除
# docker compose up -d
#
# 环境变量分类说明:
#
# 1. Docker Compose 插值变量(用于构建数据库 URL 等)
# 这些变量被 docker-compose.yml 用来组装最终的 KC__ 变量。
# 示例:POSTGRES_USER + POSTGRES_PASSWORD + POSTGRES_DB
# → KC__DATABASE__URL 通过 docker-compose 拼装而成
#
# 2. 应用直接读取的环境变量(KC__ 前缀或特殊名称)
# 这些变量被后端程序直接读取使用。
# 格式:KC__SECTION__KEY(双下划线分隔层级)
# 对应 config.toml 中 [section] key = value 的结构
# 示例:KC__AUTH__JWT_SECRET ← config.toml [auth] jwt_secret
#
# 3. 前端编译期变量(可选)
# 用于前端构建时的编译期常量设置。
#
# 加载优先级(从高到低):
# 环境变量 (KC__ 等) > config.toml 配置文件 > 代码默认值
#
# 警告:
# - 生产环境中所有 "change-me" 占位符必须替换为真实安全值
# - KC__CRYPTO__SECRET_KEY 一旦数据库写入数据后不可更改(会导致历史数据无法解密)
# - KC__AUTH__JWT_SECRET 更换后所有已签发 Token 立即失效
# - 敏感值如密钥和密码不应提交到版本控制,应使用 .gitignore 排除 .env
# =============================================================================
# ═══════════════════════════════════════════════════════════════════════════
# 第 1 部分:Docker Compose 插值变量
# ═══════════════════════════════════════════════════════════════════════════
# 这些变量被 docker-compose.yml 用来构建更复杂的环境变量。
# docker-compose 根据这些值拼装(interpolate)最终的环境变量,
# 最终的变量值再传给应用程序。
#
# 具体映射示例(见 docker-compose.yml 的 keycompute-server 环节):
# - POSTGRES_USER, POSTGRES_PASSWORD, POSTGRES_DB
# → KC__DATABASE__URL: "postgres://user:pass@postgres:5432/dbname"
# - REDIS_PASSWORD
# → KC__REDIS__URL: "redis://:password@redis:6379"
# - DB_MAX_CONNECTIONS
# → KC__DATABASE__MAX_CONNECTIONS
# ─────────────────────────────────────────────────────────────────────────────
# PostgreSQL 基础配置(被 docker-compose 用来构建 KC__DATABASE__URL)
# ─────────────────────────────────────────────────────────────────────────────
# 数据库名称
POSTGRES_DB=keycompute
# 数据库用户名
POSTGRES_USER=keycompute
# 数据库密码(必需!生产环境使用强密码,建议 32 位以上随机字符串)
# 生成命令:openssl rand -base64 32
POSTGRES_PASSWORD=change-me-strong-password
# 数据库连接池大小(最终拼装为 KC__DATABASE__MAX_CONNECTIONS)
DB_MAX_CONNECTIONS=10
# 数据库连接池最小值(最终拼装为 KC__DATABASE__MIN_CONNECTIONS)
DB_MIN_CONNECTIONS=2
# ─────────────────────────────────────────────────────────────────────────────
# Redis 基础配置(被 docker-compose 用来构建 KC__REDIS__URL)
# ─────────────────────────────────────────────────────────────────────────────
# Redis 密码(必需!docker-compose 使用它构建 KC__REDIS__URL)
# 生成命令:openssl rand -base64 32
REDIS_PASSWORD=change-me-redis-password
# Redis 连接池大小(最终拼装为 KC__REDIS__POOL_SIZE)
REDIS_POOL_SIZE=10
# ─────────────────────────────────────────────────────────────────────────────
# 容器化服务配置(Docker Compose 服务端口和启动参数)
# ─────────────────────────────────────────────────────────────────────────────
# 前端 Web 服务对外绑定端口(Nginx 容器的 HTTP 端口)
WEB_PORT=80
# 后端 API 对外端口(示例中通过 Nginx 代理,不直接暴露)
# 如需直接调试 API,可在 docker-compose.yml 中取消注释相应端口配置
# Ollama 本地模型服务配置
OLLAMA_PORT=11434
# 容器启动后自动拉取并预热的模型
OLLAMA_MODEL=gemma3:270m
# 模型保活时间(30m = 30分钟;-1 表示常驻内存)
OLLAMA_KEEP_ALIVE=30m
# 预热模型时发送的简短提示词
OLLAMA_WARMUP_PROMPT=You are KeyCompute's assistant, ready to help with any questions.
# ═══════════════════════════════════════════════════════════════════════════
# 第 2 部分:应用配置环境变量(KC__ 前缀)
# ═══════════════════════════════════════════════════════════════════════════
# 这些变量被后端应用程序直接读取。
# 对应关系:环境变量 KC__SECTION__KEY ← config.toml [section] key = value
#
# 加载流程:
# 1. 应用启动时读取 config.toml(如果存在)
# 2. 环境变量 KC__* 覆盖 config.toml 配置
# 3. 顶层 APP_BASE_URL 环境变量覆盖所有配置
# 启用邮件服务或公开邀请链接时必须显式设置
# ─────────────────────────────────────────────────────────────────────────────
# 运行环境选择
# ─────────────────────────────────────────────────────────────────────────────
# 值:development, dev, production, prod
# 不同环境下日志格式、可观测性配置、验证等级都有区别
# 通常 docker-compose 中固定设置为 production
KC__ENV=production
# ─────────────────────────────────────────────────────────────────────────────
# 服务器配置
# ─────────────────────────────────────────────────────────────────────────────
# 绑定地址(容器内固定为 0.0.0.0)
# KC__SERVER__BIND_ADDR=0.0.0.0
# 监听端口(容器内固定为 3000)
# KC__SERVER__PORT=3000
# ─────────────────────────────────────────────────────────────────────────────
# 数据库连接配置(被 docker-compose 自动构建,不需手动设置)
# ─────────────────────────────────────────────────────────────────────────────
# KC__DATABASE__URL 由 docker-compose 根据以下值自动构建:
# postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${POSTGRES_DB}
# 高级连接参数(可选):
# KC__DATABASE__CONNECT_TIMEOUT_SECS=30
# KC__DATABASE__IDLE_TIMEOUT_SECS=600
# KC__DATABASE__MAX_LIFETIME_SECS=1800
# ─────────────────────────────────────────────────────────────────────────────
# Redis 配置(被 docker-compose 自动构建,不需手动设置)
# ─────────────────────────────────────────────────────────────────────────────
# KC__REDIS__URL 由 docker-compose 根据 REDIS_PASSWORD 自动构建:
# redis://:<password>@redis:6379
# 高级连接参数(可选):
KC__REDIS__CONNECT_TIMEOUT_SECS=5
# ─────────────────────────────────────────────────────────────────────────────
# 认证配置
# ─────────────────────────────────────────────────────────────────────────────
# JWT 签名密钥(生产环境必须修改!)
# 生成命令:openssl rand -base64 64
# 更换后所有已签发 Token 立即失效
KC__AUTH__JWT_SECRET=change-me-jwt-secret-key
# JWT 签发者标识
KC__AUTH__JWT_ISSUER=keycompute
# Token 有效期(秒)
KC__AUTH__JWT_EXPIRY_SECS=3600
# ─────────────────────────────────────────────────────────────────────────────
# 加密配置
# ─────────────────────────────────────────────────────────────────────────────
# API Key 存储加密密钥(Base64 编码的 32 字节密钥)
# 生产环境强烈推荐配置!一旦数据库中有数据,不可更改。
# 生成命令:openssl rand -base64 32
KC__CRYPTO__SECRET_KEY=change-me-base64-encoded-32-byte-key
# ─────────────────────────────────────────────────────────────────────────────
# 邮件服务配置(可选)
# ─────────────────────────────────────────────────────────────────────────────
# 用于发送注册验证码、密码重置、欢迎邮件等
# 如果启用邮件服务,必须同时配置下方 APP_BASE_URL
# SMTP 服务器地址
KC__EMAIL__SMTP_HOST=smtp.example.com
# SMTP 端口
KC__EMAIL__SMTP_PORT=465
# SMTP 用户名
KC__EMAIL__SMTP_USERNAME=noreply@example.com
# SMTP 密码
KC__EMAIL__SMTP_PASSWORD=change-me-smtp-password
# 邮件发件人地址
KC__EMAIL__FROM_ADDRESS=noreply@example.com
# 邮件发件人显示名称
KC__EMAIL__FROM_NAME=KeyCompute
# 邮件发送超时(秒,可选,0 表示禁用 SMTP 超时)
# KC__EMAIL__TIMEOUT_SECS=30
# 是否使用 TLS 加密(可选,默认 true)
# KC__EMAIL__USE_TLS=true
# ─────────────────────────────────────────────────────────────────────────────
# 应用公开地址配置
# ─────────────────────────────────────────────────────────────────────────────
# 对外公开的前端应用基础 URL
# 用于密码重置邮件、邀请注册链接等中的公开链接
# 启用邮件服务或需要生成公开邀请链接时必须显式配置
# 生产环境必须使用 https;仅 localhost / 127.0.0.1 等本地地址可使用 http
# 优先级:APP_BASE_URL 环境变量 > config.toml
APP_BASE_URL=http://127.0.0.1
# ─────────────────────────────────────────────────────────────────────────────
# Gateway 路由配置(可选,使用默认值即可)
# ─────────────────────────────────────────────────────────────────────────────
# 请求超时时间(秒)
# KC__GATEWAY__TIMEOUT_SECS=120
# HTTP 请求超时(秒)
# KC__GATEWAY__REQUEST_TIMEOUT_SECS=120
# 流式请求超时(秒)
# KC__GATEWAY__STREAM_TIMEOUT_SECS=600
# 最大重试次数
# KC__GATEWAY__MAX_RETRIES=3
# 是否启用 fallback(当主 Provider 失败时尝试备选)
# KC__GATEWAY__ENABLE_FALLBACK=true
# 重试策略:初始退避时间(毫秒)
# KC__GATEWAY__INITIAL_BACKOFF_MS=100
# 重试策略:最大退避时间(毫秒)
# KC__GATEWAY__MAX_BACKOFF_MS=10000
# 重试策略:退避倍数
# KC__GATEWAY__BACKOFF_MULTIPLIER=2.0
# ─────────────────────────────────────────────────────────────────────────────
# 分销配置(可选,使用默认值即可)
# ─────────────────────────────────────────────────────────────────────────────
# 一级分销默认比例(0.03 = 3%)
# KC__DISTRIBUTION__DEFAULT_LEVEL1_RATIO=0.03
# 二级分销默认比例(0.02 = 2%)
# KC__DISTRIBUTION__DEFAULT_LEVEL2_RATIO=0.02
# 最大总分销比例限制(0.30 = 30%)
# KC__DISTRIBUTION__MAX_TOTAL_RATIO=0.30
# ─────────────────────────────────────────────────────────────────────────────
# 默认系统管理员(首次启动时自动创建)
# ─────────────────────────────────────────────────────────────────────────────
# 注意:该配置不在 config.toml 中(config.toml 无 [admin] 段)
# 仅通过环境变量读取
# 生产环境部署后请立即修改默认管理员密码!
KC__DEFAULT_ADMIN_EMAIL=admin@keycompute.local
KC__DEFAULT_ADMIN_PASSWORD=change-me-admin-password
# ─────────────────────────────────────────────────────────────────────────────
# 节点网关配置(Node Gateway)
# ─────────────────────────────────────────────────────────────────────────────
# 用于个人 PC 节点接入,支持 Ollama 本地模型执行
# 节点通过 node-token 客户端连接,主动轮询任务并提交结果
#
# 节点注册 token(生产环境必须修改!)
# 用于验证节点注册请求,所有节点共享此 token
# 生成命令:openssl rand -base64 32
KC__NODE_GATEWAY__REGISTRATION_TOKEN=change-me-node-registration-token
# 会话 TTL(秒),节点会话有效期,默认 300(5 分钟)
# 超过此时间未心跳的会话将被标记为过期
KC__NODE_GATEWAY__SESSION_TTL_SECS=300
# 心跳间隔(秒),node-token 客户端发送心跳的间隔,默认 30
KC__NODE_GATEWAY__HEARTBEAT_INTERVAL_SECS=30
# 轮询超时(秒),节点长轮询领取任务的最长等待时间,默认 30
KC__NODE_GATEWAY__POLL_TIMEOUT_SECS=30
# 任务 deadline 超时(秒),任务必须在 deadline 内完成,默认 120(2 分钟)
KC__NODE_GATEWAY__TASK_DEADLINE_SECS=120
# 完成宽限期(秒),任务过期后允许提交结果的时间,默认 60(1 分钟)
KC__NODE_GATEWAY__COMPLETE_GRACE_SECS=60
# 节点失败阈值,节点连续失败次数达到此值后被排除(excluded),默认 3
KC__NODE_GATEWAY__NODE_FAILURE_THRESHOLD=3
# 任务失败阈值,单个任务失败重试次数上限,默认 3
KC__NODE_GATEWAY__TASK_FAILURE_THRESHOLD=3
# Sweeper 心跳 TTL(秒),超过此时间未心跳的 online 节点标记为 offline,默认 600(10 分钟)
KC__NODE_GATEWAY__SWEEPER_HEARTBEAT_TTL_SECS=600
# Sweeper 补推间隔(秒),创建超过此时间的 queued 任务补推到 Redis,默认 10
KC__NODE_GATEWAY__SWEEPER_REPUSH_INTERVAL_SECS=10
#
# 安全警告:
# - KC__NODE_GATEWAY__REGISTRATION_TOKEN 一旦有节点注册后不可更改(会导致已注册节点失效)
# - 生产环境必须使用强随机 token,建议使用 openssl rand -base64 32 生成
# ═══════════════════════════════════════════════════════════════════════════
# 第 3 部分:支付配置(可选)
# ═══════════════════════════════════════════════════════════════════════════
# 如需启用支付功能,配置相应的支付服务商环境变量
# ─────────────────────────────────────────────────────────────────────────────
# 支付宝配置(可选)
# ─────────────────────────────────────────────────────────────────────────────
# 支付宝应用 ID
# ALIPAY_APP_ID=change-me-alipay-appid
# 应用私钥(PEM 格式)
# ALIPAY_PRIVATE_KEY=-----BEGIN RSA PRIVATE KEY-----\n...\n-----END RSA PRIVATE KEY-----
# 支付宝公钥(PEM 格式,用于验签)
# ALIPAY_PUBLIC_KEY=-----BEGIN PUBLIC KEY-----\n...\n-----END PUBLIC KEY-----
# 支付宝环境(sandbox 或 production)
# ALIPAY_ENV=production
# 支付结果异步通知 URL(必填)
# ALIPAY_NOTIFY_URL=https://app.example.com/webhooks/alipay/notify
# 支付成功后的同步返回 URL(可选)
# ALIPAY_RETURN_URL=https://app.example.com/payment/result
# 支付超时时间(分钟,默认 30)
# ALIPAY_TIMEOUT_MINUTES=30
# ─────────────────────────────────────────────────────────────────────────────
# 微信支付配置(可选)
# ─────────────────────────────────────────────────────────────────────────────
# 微信支付机构商户号
# WECHATPAY_MCH_ID=change-me-mchid
# 微信支付商户密钥
# WECHATPAY_API_KEY=change-me-apikey
# 微信支付证书路径(如使用证书认证)
# WECHATPAY_CERT_PATH=/path/to/cert.pem
# 微信支付环境(SANDBOX 或 PRODUCTION)
# WECHATPAY_ENV=PRODUCTION
# ═══════════════════════════════════════════════════════════════════════════
# 第 4 部分:前端编译期配置(可选)
# ═══════════════════════════════════════════════════════════════════════════
# 这些变量在前端构建时(dx build)被编译到二进制中
# ─────────────────────────────────────────────────────────────────────────────
# Web 前端 API 配置
# ─────────────────────────────────────────────────────────────────────────────
# 前端调用后端 API 的基础 URL(编译期常量)
# 开发环境默认为 http://localhost:3001
# 生产构建时默认为相对根路径 ""(与前端同源)
# API_BASE_URL=https://api.example.com