多阶段镜像编出 server/engine 单文件与前端静态;compose 起 pg/server/engine/caddy; 启动时自动迁移;仅用 DATABASE_URL,postgres 建库参数由 entrypoint 拆解。
38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
import { fileURLToPath } from "node:url";
|
|
import { appLogger, setupLogging } from "@new-api-key-usage/core";
|
|
import { createDb, createRepos, runMigrations } from "@new-api-key-usage/db";
|
|
import { loadEnv } from "./env.ts";
|
|
import { createSyncLoop } from "./loop.ts";
|
|
|
|
const env = loadEnv(process.env);
|
|
setupLogging(env.LOG_LEVEL);
|
|
const log = appLogger("engine");
|
|
|
|
const db = createDb(env.DATABASE_URL);
|
|
|
|
const migrationsFolder =
|
|
process.env.MIGRATIONS_FOLDER ??
|
|
fileURLToPath(new URL("../../../packages/db/drizzle", import.meta.url));
|
|
await runMigrations(db, migrationsFolder);
|
|
log.info("数据库迁移已就绪");
|
|
|
|
const repos = createRepos(db);
|
|
|
|
const loop = createSyncLoop({
|
|
repos,
|
|
newapiBase: env.NEWAPI_BASE,
|
|
skKeyEncryptionSecret: env.SK_KEY_ENCRYPTION_SECRET,
|
|
intervalMs: env.SYNC_INTERVAL_MS,
|
|
});
|
|
|
|
loop.start();
|
|
|
|
log.info`apps/engine 已就绪`;
|
|
|
|
process.on("SIGINT", () => {
|
|
void loop.stop().then(() => process.exit(0));
|
|
});
|
|
process.on("SIGTERM", () => {
|
|
void loop.stop().then(() => process.exit(0));
|
|
});
|