feat: 重构配置管理,使用数据库替代环境变量,优化系统配置读取

This commit is contained in:
2026-05-23 15:37:58 +08:00
parent ea95886cfc
commit 92b063c4c4
10 changed files with 249 additions and 129 deletions
+61
View File
@@ -0,0 +1,61 @@
// server/plugins/initConfig.ts - 服务启动时检查 system_config 表,补全缺失的默认配置
// 只在首次部署或新增配置项时写入,不覆盖已有值;不读取环境变量
import { prisma } from "~~/server/utils/db";
// 所有系统配置的默认值,key 对应 system_config.key
// 管理员后续通过后台修改 valueopenai_api_key 默认留空,需手动填入
const DEFAULT_CONFIGS = [
{
key: "openai_api_key",
value: "",
description: "OpenAI 或兼容 API Key,仅服务端使用,不能返回给前端"
},
{
key: "openai_api_base",
value: "https://api.openai.com/v1",
description: "OpenAI 兼容 API base URL,例如 https://api.openai.com/v1"
},
{
key: "openai_model",
value: "gpt-3.5-turbo",
description: "Chat Completions 使用的模型名"
},
{
key: "max_tokens",
value: "500",
description: "单次回答最大 token 数"
},
{
key: "temperature",
value: "0.7",
description: "模型采样温度,越低越稳定,范围 0~2"
},
{
key: "openai_stream_max_sse_line_bytes",
value: "1048576",
description: "单行 SSE data 最大字节数,防止异常流无限堆内存"
}
];
export default defineNitroPlugin(async () => {
try {
const existingRows = await prisma.systemConfig.findMany({
select: { key: true }
});
const existingKeys = new Set(existingRows.map((r) => r.key));
const missing = DEFAULT_CONFIGS.filter((c) => !existingKeys.has(c.key));
if (missing.length === 0) return;
await prisma.systemConfig.createMany({
data: missing,
skipDuplicates: true
});
console.log(
`[initConfig] 已写入 ${missing.length} 项默认系统配置:${missing.map((c) => c.key).join(", ")}`
);
} catch (err) {
// 初始化失败不阻断进程启动,记录警告供排查
console.error("[initConfig] 系统配置初始化失败:", String(err));
}
});