登录流程(以 openid 为唯一标识): - auth.service.login 改为 upsert:openid 在库续登,不在库自动建用户签 token - 个人主体无 getPhoneNumber 权限,故不强制手机号注册;register 接口保留备未来用 - wechat.service 新增 getAccessToken(Redis 缓存)、getPluginOpenPid、getUserPhoneNumber - 新增 /api/wechat/plugin-openpid、/api/wechat/phone 接口 schema 与迁移: - User 增加 openpid(可空唯一) 兼容插件场景;openid 保持必填主键 - 新增 add_openpid_optional_openid、openid_required_primary 迁移 部署: - docker-compose.yml 改为 docker compose up -d 一键启动 postgres+redis+app - app 容器内用服务名连 db/redis,启动自动跑 prisma migrate deploy - 端口统一 3090(Dockerfile EXPOSE、compose 映射同步) - 新增 docs/wechat-api-signature-guide.md API 签名手册 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
28 lines
785 B
Docker
28 lines
785 B
Docker
# 多阶段构建:builder 编译 TS -> runner 仅运行 dist
|
|
FROM node:22-alpine AS builder
|
|
WORKDIR /app
|
|
|
|
# 先装依赖(利用 Docker 层缓存)
|
|
COPY package*.json ./
|
|
COPY prisma ./prisma
|
|
RUN npm ci
|
|
|
|
COPY tsconfig*.json nest-cli.json ./
|
|
COPY src ./src
|
|
RUN npx prisma generate && npm run build
|
|
|
|
# ──────────────────────────────────────────────
|
|
FROM node:22-alpine AS runner
|
|
WORKDIR /app
|
|
ENV NODE_ENV=production
|
|
|
|
COPY package*.json ./
|
|
COPY prisma ./prisma
|
|
RUN npm ci --omit=dev && npx prisma generate
|
|
|
|
COPY --from=builder /app/dist ./dist
|
|
|
|
EXPOSE 3090
|
|
# 启动前执行 migrate deploy(生产用),随后启动服务
|
|
CMD ["sh", "-c", "npx prisma migrate deploy && node dist/main.js"]
|