feat(deploy): production deployment setup and fixes
- Debian-based api image (bookworm-slim), docker/debian mirrors, prisma binaryTargets for openssl 3.0 - nginx: admin SPA under /admin, TLS via acme.sh (ZeroSSL) + auto-renewal cron, http->https redirect - prisma: add origin_goods.delisted migration, sync missing schema (good_image/tag_font_color/good_tags), fix users.createdAt Timestamptz - api: CORS wildcard reflection, helmet CORP cross-origin, price backfill in persistProductDetail, categoryIcon ancestor fallback, mediaByColor per-color gallery in public goods detail - admin: /admin base path (vite + router) - import-data.mjs: udt_name casting, serial sequence advance fix
This commit is contained in:
@@ -1,126 +1,126 @@
|
||||
# Inkreach
|
||||
|
||||
pnpm workspaces + Turborepo monorepo,包含三个协同工作的子项目和共享包:
|
||||
|
||||
| 子项目 | 包名 | 技术栈 | 端口 | 角色 |
|
||||
|--------|------|--------|------|------|
|
||||
| `apps/api` | `@inkreach/api` | NestJS 10 + Prisma 5 + PostgreSQL | 3001 | 后端 API(鉴权 / CRUD / SDS 同步 / 公开 API / Swagger) |
|
||||
| `apps/admin` | `@inkreach/admin` | Vue 3 + Vite + Element Plus + Pinia | 5173 | 后台管理(登录 / 商品 / 品类 / 国家 / 标签 / 坑位 / 同步) |
|
||||
| `apps/website` | `@inkreach/website` | Nuxt 4 + Vue 3 + Tailwind v4 | 3000 | 官方展示站 + 产品中心页 |
|
||||
|
||||
| 共享包 | 说明 |
|
||||
|--------|------|
|
||||
| `packages/tsconfig` | 共享 TypeScript 配置(base / api / vue) |
|
||||
| `packages/shared-types` | 共享类型定义(PaginatedResult, BackendEnvelope, 实体接口) |
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 安装依赖
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
```
|
||||
|
||||
### 2. 环境变量
|
||||
|
||||
在仓库根目录的 `.env` 中配置数据库:
|
||||
|
||||
```env
|
||||
DATABASE_URL=postgresql://postgres:<password>@localhost:5432/inkreach-official
|
||||
```
|
||||
|
||||
后端额外需要的变量(在 `apps/api/.env` 中):
|
||||
|
||||
```env
|
||||
JWT_SECRET=<your-secret>
|
||||
SDS_API_BASE=https://api.sds.example.com
|
||||
SDS_API_KEY=<your-key>
|
||||
PORT=3001
|
||||
```
|
||||
|
||||
官网通过 `apps/website/.env` 的 `NUXT_PUBLIC_BACKEND_URL=http://localhost:3001` 指向后端。
|
||||
|
||||
后台无需额外环境变量;Vite 代理已把 `/api/*` 转给 `http://localhost:3001`。
|
||||
|
||||
### 3. 部署
|
||||
|
||||
启动顺序:先启动后端,再启动另两个。
|
||||
|
||||
```bash
|
||||
# Terminal 1:后端(需要 PostgreSQL)
|
||||
cd apps/api
|
||||
pnpm prisma:generate
|
||||
pnpm prisma:migrate
|
||||
pnpm --filter @inkreach/api dev
|
||||
# → http://localhost:3001 · Swagger: http://localhost:3001/api/docs
|
||||
|
||||
# Terminal 2:官网
|
||||
pnpm --filter @inkreach/website dev
|
||||
# → http://localhost:3000
|
||||
|
||||
# Terminal 3:后台
|
||||
pnpm --filter @inkreach/admin dev
|
||||
# → http://localhost:5173
|
||||
```
|
||||
|
||||
或者使用 Turborepo 同时启动所有开发服务器:
|
||||
|
||||
```bash
|
||||
pnpm dev # turbo run dev
|
||||
```
|
||||
|
||||
## 端口分配
|
||||
|
||||
| 端口 | 项目 | 入口 |
|
||||
|------|------|------|
|
||||
| 3001 | NestJS 后端 | `apps/api/src/main.ts` |
|
||||
| 5173 | Vue Admin | `apps/admin/vite.config.ts` |
|
||||
| 3000 | Nuxt 官网 | `apps/website/nuxt.config.ts` |
|
||||
|
||||
## 数据流概览
|
||||
|
||||
```
|
||||
[SDS 外部 API]
|
||||
│ (同步)
|
||||
▼
|
||||
[NestJS 后端 :3001] ── public/goods ──► [Nitro 代理 /api/backend/*] ──► [Nuxt 官网 :3000]
|
||||
│ ▲
|
||||
├── /auth /goods /categories ... ──► │ Vite proxy /api/*
|
||||
│ │
|
||||
[PostgreSQL] [Vue Admin :5173]
|
||||
```
|
||||
|
||||
## 常用命令
|
||||
|
||||
```bash
|
||||
# 根目录(使用 pnpm workspace filter)
|
||||
pnpm install # 安装所有依赖
|
||||
pnpm dev # 启动所有 dev 服务器 (turbo)
|
||||
pnpm build # 构建所有项目 (turbo)
|
||||
pnpm format # 格式化所有文件 (prettier)
|
||||
|
||||
# 后端
|
||||
pnpm --filter @inkreach/api start:dev # 开发
|
||||
pnpm --filter @inkreach/api build # 编译
|
||||
pnpm --filter @inkreach/api test # 单元测试
|
||||
pnpm --filter @inkreach/api prisma:generate # 生成 Prisma Client
|
||||
pnpm --filter @inkreach/api prisma:migrate # 运行迁移
|
||||
pnpm --filter @inkreach/api prisma:studio # 打开 Prisma Studio
|
||||
|
||||
# 官网
|
||||
pnpm --filter @inkreach/website dev # 开发
|
||||
pnpm --filter @inkreach/website build # 构建
|
||||
pnpm --filter @inkreach/website generate # 静态站点生成
|
||||
|
||||
# 后台
|
||||
pnpm --filter @inkreach/admin dev # 开发
|
||||
pnpm --filter @inkreach/admin build # 构建
|
||||
```
|
||||
|
||||
## 文档
|
||||
|
||||
- 整体目录结构:[`docs/references/structs.md`](docs/references/structs.md)
|
||||
- 数据库表设计:[`docs/dev/database-table-design.md`](docs/dev/database-table-design.md)
|
||||
- 产品中心 PRD:[`docs/dev/product-center-prd.md`](docs/dev/product-center-prd.md)
|
||||
- 官网子项目结构:[`apps/website/docs/references/structs.md`](apps/website/docs/references/structs.md)
|
||||
- 开发规范:[`AGENTS.md`](AGENTS.md)
|
||||
# Inkreach
|
||||
|
||||
pnpm workspaces + Turborepo monorepo,包含三个协同工作的子项目和共享包:
|
||||
|
||||
| 子项目 | 包名 | 技术栈 | 端口 | 角色 |
|
||||
|--------|------|--------|------|------|
|
||||
| `apps/api` | `@inkreach/api` | NestJS 10 + Prisma 5 + PostgreSQL | 3001 | 后端 API(鉴权 / CRUD / SDS 同步 / 公开 API / Swagger) |
|
||||
| `apps/admin` | `@inkreach/admin` | Vue 3 + Vite + Element Plus + Pinia | 5173 | 后台管理(登录 / 商品 / 品类 / 国家 / 标签 / 坑位 / 同步) |
|
||||
| `apps/website` | `@inkreach/website` | Nuxt 4 + Vue 3 + Tailwind v4 | 3000 | 官方展示站 + 产品中心页 |
|
||||
|
||||
| 共享包 | 说明 |
|
||||
|--------|------|
|
||||
| `packages/tsconfig` | 共享 TypeScript 配置(base / api / vue) |
|
||||
| `packages/shared-types` | 共享类型定义(PaginatedResult, BackendEnvelope, 实体接口) |
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 安装依赖
|
||||
|
||||
```bash
|
||||
pnpm install
|
||||
```
|
||||
|
||||
### 2. 环境变量
|
||||
|
||||
在仓库根目录的 `.env` 中配置数据库:
|
||||
|
||||
```env
|
||||
DATABASE_URL=postgresql://postgres:<password>@localhost:5432/inkreach-official
|
||||
```
|
||||
|
||||
后端额外需要的变量(在 `apps/api/.env` 中):
|
||||
|
||||
```env
|
||||
JWT_SECRET=<your-secret>
|
||||
SDS_API_BASE=https://api.sds.example.com
|
||||
SDS_API_KEY=<your-key>
|
||||
PORT=3001
|
||||
```
|
||||
|
||||
官网通过 `apps/website/.env` 的 `NUXT_PUBLIC_BACKEND_URL=http://localhost:3001` 指向后端。
|
||||
|
||||
后台无需额外环境变量;Vite 代理已把 `/api/*` 转给 `http://localhost:3001`。
|
||||
|
||||
### 3. 部署
|
||||
|
||||
启动顺序:先启动后端,再启动另两个。
|
||||
|
||||
```bash
|
||||
# Terminal 1:后端(需要 PostgreSQL)
|
||||
cd apps/api
|
||||
pnpm prisma:generate
|
||||
pnpm prisma:migrate
|
||||
pnpm --filter @inkreach/api dev
|
||||
# → http://localhost:3001 · Swagger: http://localhost:3001/api/docs
|
||||
|
||||
# Terminal 2:官网
|
||||
pnpm --filter @inkreach/website dev
|
||||
# → http://localhost:3000
|
||||
|
||||
# Terminal 3:后台
|
||||
pnpm --filter @inkreach/admin dev
|
||||
# → http://localhost:5173
|
||||
```
|
||||
|
||||
或者使用 Turborepo 同时启动所有开发服务器:
|
||||
|
||||
```bash
|
||||
pnpm dev # turbo run dev
|
||||
```
|
||||
|
||||
## 端口分配
|
||||
|
||||
| 端口 | 项目 | 入口 |
|
||||
|------|------|------|
|
||||
| 3001 | NestJS 后端 | `apps/api/src/main.ts` |
|
||||
| 5173 | Vue Admin | `apps/admin/vite.config.ts` |
|
||||
| 3000 | Nuxt 官网 | `apps/website/nuxt.config.ts` |
|
||||
|
||||
## 数据流概览
|
||||
|
||||
```
|
||||
[SDS 外部 API]
|
||||
│ (同步)
|
||||
▼
|
||||
[NestJS 后端 :3001] ── public/goods ──► [Nitro 代理 /api/backend/*] ──► [Nuxt 官网 :3000]
|
||||
│ ▲
|
||||
├── /auth /goods /categories ... ──► │ Vite proxy /api/*
|
||||
│ │
|
||||
[PostgreSQL] [Vue Admin :5173]
|
||||
```
|
||||
|
||||
## 常用命令
|
||||
|
||||
```bash
|
||||
# 根目录(使用 pnpm workspace filter)
|
||||
pnpm install # 安装所有依赖
|
||||
pnpm dev # 启动所有 dev 服务器 (turbo)
|
||||
pnpm build # 构建所有项目 (turbo)
|
||||
pnpm format # 格式化所有文件 (prettier)
|
||||
|
||||
# 后端
|
||||
pnpm --filter @inkreach/api start:dev # 开发
|
||||
pnpm --filter @inkreach/api build # 编译
|
||||
pnpm --filter @inkreach/api test # 单元测试
|
||||
pnpm --filter @inkreach/api prisma:generate # 生成 Prisma Client
|
||||
pnpm --filter @inkreach/api prisma:migrate # 运行迁移
|
||||
pnpm --filter @inkreach/api prisma:studio # 打开 Prisma Studio
|
||||
|
||||
# 官网
|
||||
pnpm --filter @inkreach/website dev # 开发
|
||||
pnpm --filter @inkreach/website build # 构建
|
||||
pnpm --filter @inkreach/website generate # 静态站点生成
|
||||
|
||||
# 后台
|
||||
pnpm --filter @inkreach/admin dev # 开发
|
||||
pnpm --filter @inkreach/admin build # 构建
|
||||
```
|
||||
|
||||
## 文档
|
||||
|
||||
- 整体目录结构:[`docs/references/structs.md`](docs/references/structs.md)
|
||||
- 数据库表设计:[`docs/dev/database-table-design.md`](docs/dev/database-table-design.md)
|
||||
- 产品中心 PRD:[`docs/dev/product-center-prd.md`](docs/dev/product-center-prd.md)
|
||||
- 官网子项目结构:[`apps/website/docs/references/structs.md`](apps/website/docs/references/structs.md)
|
||||
- 开发规范:[`AGENTS.md`](AGENTS.md)
|
||||
|
||||
Reference in New Issue
Block a user