- M1-M2: 数据层与核心API(DuckDB, entries/tags/comments/search服务) - M3: SSR页面(EJS模板,接真实数据) - M4: 管理后台(登录/用户/内容源/AI ingest) - M5: 采集层(scheduler+rss/html/eryajf适配器) - M6: MCP只读接口(Streamable HTTP, 4工具) - M7: Docker部署(Dockerfile+docker-compose) - 测试: 10个用例全部通过 - 修复: DuckDB连接参数绑定、状态机迁移、标签树操作
30 lines
778 B
JavaScript
30 lines
778 B
JavaScript
import fs from "node:fs";
|
|
import path from "node:path";
|
|
|
|
function num(v, d) {
|
|
const n = Number(v);
|
|
return Number.isFinite(n) && n > 0 ? n : d;
|
|
}
|
|
|
|
function str(v, d) {
|
|
return v && v.trim() ? v.trim() : d;
|
|
}
|
|
|
|
const env = process.env;
|
|
|
|
export const config = {
|
|
port: num(env.PORT, 3000),
|
|
duckdbPath: str(env.DUCKDB_PATH, "./data/awesome.duckdb"),
|
|
sessionSecret: str(env.SESSION_SECRET, "dev-secret-change-me"),
|
|
adminInitPassword: str(env.ADMIN_INIT_PASSWORD, "admin"),
|
|
aiIngestKey: str(env.AI_INGEST_KEY, ""),
|
|
baseUrl: str(env.BASE_URL, `http://localhost:${num(env.PORT, 3000)}`),
|
|
schedulerEnabled: env.SCHEDULER_DISABLED !== "1",
|
|
};
|
|
|
|
export function ensureDataDir() {
|
|
fs.mkdirSync(path.dirname(path.resolve(config.duckdbPath)), {
|
|
recursive: true,
|
|
});
|
|
}
|