0.4.0 convex及界面修改
This commit is contained in:
+9
-48
@@ -3,8 +3,7 @@
|
||||
* 一键启动“生产模式”的前后端与相关服务(适用于 Cloudflare Tunnel / 公网访问)。
|
||||
*
|
||||
* 目标:
|
||||
* - 前端使用 Next production(读取 wolai-frontend/.env.production.local)
|
||||
* - 后端与内部服务使用本机/内网地址(读取各自 .env 或仓库根目录 .env.local)
|
||||
* - 前后端与内部服务统一读取仓库根目录 `.env.all`(生产优先,全局唯一 env 文件)
|
||||
*
|
||||
* 可选环境变量:
|
||||
* - SKIP_FRONTEND_BUILD=1:跳过前端 build(仅 start)
|
||||
@@ -185,65 +184,28 @@ function ensureStandaloneStatic(frontendDir) {
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const frontendProdEnv = path.join(frontendDir, ".env.production.local");
|
||||
// 约定:全局仅使用仓库根目录的 .env.all 作为配置来源(生产优先)。
|
||||
const envAllPath = path.join(rootDir, ".env.all");
|
||||
requireFile(envAllPath, "请先在仓库根目录创建 .env.all(全局唯一 env 文件)");
|
||||
const envAll = loadEnvFile(envAllPath);
|
||||
|
||||
// 说明:Next.js 在 production 也会加载 wolai-frontend/.env.local。
|
||||
// 为避免被本地开发环境(可能指向远端 Supabase)的配置污染,这里把“服务端专用”的关键 env 显式注入。
|
||||
// 规则:优先使用 wolai-frontend/.env.production.local,其次使用仓库根目录 .env.local/.env。
|
||||
const envRoot = {
|
||||
...loadEnvFile(path.join(rootDir, ".env.local")),
|
||||
...loadEnvFile(path.join(rootDir, ".env")),
|
||||
};
|
||||
|
||||
requireFile(
|
||||
frontendProdEnv,
|
||||
"请先创建 wolai-frontend/.env.production.local(可参考 wolai-frontend/.env.production.example)",
|
||||
);
|
||||
|
||||
// 生产模式:前端必须使用 production env,避免把 .env.local 的 127.0.0.1 泄露到公网用户
|
||||
// 生产模式:前端必须使用 production env,避免本地开发配置污染公网用户
|
||||
const envFrontend = {
|
||||
...process.env,
|
||||
...loadEnvFile(frontendProdEnv),
|
||||
...envAll,
|
||||
NODE_ENV: "production",
|
||||
NEXT_TELEMETRY_DISABLED: "1",
|
||||
};
|
||||
|
||||
// Next 的 API Route 也会用到这些“内部服务”环境变量(Search / MinerU / LightRAG 等)。
|
||||
// 规则:从仓库根目录 .env.local/.env 读取并注入,避免 production server 缺少配置。
|
||||
const passthroughKeys = [
|
||||
"MINERU_ENDPOINT",
|
||||
"LIGHTRAG_URL",
|
||||
"LIGHTRAG_API_KEY",
|
||||
"SEARXNG_BASE_URL",
|
||||
"SEARXNG_API_TOKEN",
|
||||
];
|
||||
for (const key of passthroughKeys) {
|
||||
if (envRoot[key] && !envFrontend[key]) {
|
||||
envFrontend[key] = envRoot[key];
|
||||
}
|
||||
}
|
||||
|
||||
// Next 服务端(API Route)需要 service role 才能生成签名 URL、清理资源等。
|
||||
if (envRoot.SUPABASE_SERVICE_ROLE_KEY) {
|
||||
envFrontend.SUPABASE_SERVICE_ROLE_KEY = envRoot.SUPABASE_SERVICE_ROLE_KEY;
|
||||
}
|
||||
|
||||
// 兼容旧代码:部分模块读取 SUPABASE_URL(而非 SUPABASE_INTERNAL_URL)。
|
||||
// 强制覆盖:避免从系统环境变量或 wolai-frontend/.env.local 继承到“远端 Supabase”。
|
||||
envFrontend.SUPABASE_URL = envFrontend.SUPABASE_INTERNAL_URL || envRoot.SUPABASE_URL || envFrontend.SUPABASE_URL || "";
|
||||
|
||||
// 后端/内部服务:尽量使用本机/内网配置(不会暴露给浏览器)
|
||||
// wolai-backend 使用自身目录下 .env
|
||||
const envBackend = {
|
||||
...process.env,
|
||||
...loadEnvFile(path.join(backendDir, ".env")),
|
||||
...envAll,
|
||||
PYTHONUTF8: "1",
|
||||
};
|
||||
// ingest_service / rag_gateway 主要依赖仓库根目录 .env.local/.env
|
||||
const envInternalServices = {
|
||||
...process.env,
|
||||
...loadEnvFile(path.join(rootDir, ".env.local")),
|
||||
...loadEnvFile(path.join(rootDir, ".env")),
|
||||
...envAll,
|
||||
PYTHONUTF8: "1",
|
||||
};
|
||||
|
||||
@@ -275,7 +237,6 @@ async function main() {
|
||||
{ name: "backend", port: backendPort },
|
||||
{ name: "rag_gateway", port: ragGatewayPort },
|
||||
{ name: "ingest_service", port: ingestPort },
|
||||
{ name: "supabase(kong)", port: 18000 },
|
||||
];
|
||||
for (const item of portChecks) {
|
||||
// 仅检查本机 127.0.0.1 是否已有服务在监听,方便你快速判断“是否重复启动”
|
||||
|
||||
Reference in New Issue
Block a user