chore: 服务启动不再自动迁移数据库

schema 变更改为显式 db:push / 手动应用后再启动。
This commit is contained in:
2026-10-12 13:57:25 +08:00
parent f4f5ed0b0f
commit d0bab545b1
4 changed files with 6 additions and 21 deletions
+1 -1
View File
@@ -27,7 +27,7 @@ Bun 工具链(选型见 `docs/design/技术选型.md`)。**Windows 上 `bun`
|------|------| |------|------|
| `bun install` | 安装 / 链接 workspace 依赖(在仓库根) | | `bun install` | 安装 / 链接 workspace 依赖(在仓库根) |
| `bun run db:generate` | 生成 SQL 迁移(`packages/db/drizzle/`) | | `bun run db:generate` | 生成 SQL 迁移(`packages/db/drizzle/`) |
| `bun run db:push` | 推送到本地库(开发期) | | `bun run db:push` | 推送到本地库(开发期;**服务启动不自动迁**) |
| `bun run db:studio` | Drizzle Studio 看库 | | `bun run db:studio` | Drizzle Studio 看库 |
| `bun run typecheck` | 根 tsconfig 类型检查(不含 web `.vue`) | | `bun run typecheck` | 根 tsconfig 类型检查(不含 web `.vue`) |
| `bun run dev:server` | 开发跑后端(hot reload) | | `bun run dev:server` | 开发跑后端(hot reload) |
+3 -3
View File
@@ -69,7 +69,7 @@ packages/
```bash ```bash
bun install bun install
cp .env.example .env # DATABASE_URL 指向你已有的 PostgreSQL cp .env.example .env # DATABASE_URL 指向你已有的 PostgreSQL
bun run db:push # 开发期推送 schema bun run db:push # 开发期推送 schema(启动不自动迁)
bun run dev:server # 后端(默认 18456) bun run dev:server # 后端(默认 18456)
bun run dev:engine # 同步引擎(另开终端) bun run dev:engine # 同步引擎(另开终端)
bun run dev:web # 前端 Vite(5175) bun run dev:web # 前端 Vite(5175)
@@ -81,7 +81,7 @@ bun run dev:web # 前端 Vite(5175)
## 部署 ## 部署
生产形态:**Caddy**(前端静态 + `/api` 反代)+ **server / engine 单文件**(Bun `--compile`)+ PostgreSQL;启动时自动应用 `packages/db/drizzle` 迁移。开发不依赖本 Compose——把 `DATABASE_URL` 指到任意可用 PostgreSQL 即可。 生产形态:**Caddy**(前端静态 + `/api` 反代)+ **server / engine 单文件**(Bun `--compile`)+ PostgreSQL。**迁移不随服务启动**——改表后先用 `db:push` / 手动应用 SQL,再起服务。开发不依赖本 Compose——把 `DATABASE_URL` 指到任意可用 PostgreSQL 即可。
### 起服务 ### 起服务
@@ -92,7 +92,7 @@ docker compose up -d --build
``` ```
- 页面:`http://<服务器>/`;接口文档:`http://<服务器>/api/docs` - 页面:`http://<服务器>/`;接口文档:`http://<服务器>/api/docs`
- 升级:`git pull` 后重复 `docker compose up -d --build`(改表随启动迁移) - 升级:`git pull` → 有表变更时先应用 schema → 再 `docker compose up -d --build`
### 环境变量要点 ### 环境变量要点
+1 -8
View File
@@ -1,6 +1,5 @@
import { fileURLToPath } from "node:url";
import { appLogger, setupLogging } from "@new-api-key-usage/core"; import { appLogger, setupLogging } from "@new-api-key-usage/core";
import { createDb, createRepos, runMigrations } from "@new-api-key-usage/db"; import { createDb, createRepos } from "@new-api-key-usage/db";
import { loadEnv } from "./env.ts"; import { loadEnv } from "./env.ts";
import { createSyncLoop } from "./loop.ts"; import { createSyncLoop } from "./loop.ts";
@@ -10,12 +9,6 @@ const log = appLogger("engine");
const db = createDb(env.DATABASE_URL); 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 repos = createRepos(db);
const loop = createSyncLoop({ const loop = createSyncLoop({
+1 -9
View File
@@ -1,7 +1,6 @@
import { fileURLToPath } from "node:url";
import { createApp } from "./app.ts"; import { createApp } from "./app.ts";
import { loadEnv } from "./env.ts"; import { loadEnv } from "./env.ts";
import { createDb, runMigrations } from "@new-api-key-usage/db"; import { createDb } from "@new-api-key-usage/db";
import { appLogger, setupLogging } from "@new-api-key-usage/core"; import { appLogger, setupLogging } from "@new-api-key-usage/core";
const env = loadEnv(process.env); const env = loadEnv(process.env);
@@ -9,13 +8,6 @@ setupLogging(env.LOG_LEVEL);
const db = createDb(env.DATABASE_URL); 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);
appLogger("server").info("数据库迁移已就绪");
const app = createApp({ const app = createApp({
db, db,
skKeyEncryptionSecret: env.SK_KEY_ENCRYPTION_SECRET, skKeyEncryptionSecret: env.SK_KEY_ENCRYPTION_SECRET,