fix: Docker 构建改用 npm 替代 pnpm + 补全 OAuth/Redis 环境变量

- Dockerfile 全部改为 npm install + 全局 tsc,解决 pnpm 符号链接问题
- docker-compose 添加 Redis 服务、OAuth 环境变量透传、web 端口改为可配置
- MCP URL 改用 window.location.origin 适配反向代理
- tsconfig 添加 paths 映射解决 Docker 内模块引用

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-03 17:24:52 +08:00
parent 8b6aeb28b1
commit 5e6efdaf59
12 changed files with 553 additions and 63 deletions

View File

@@ -1,36 +1,35 @@
FROM node:20-alpine AS base
RUN corepack enable && corepack prepare pnpm@latest --activate
FROM node:20-alpine AS build
RUN npm install -g typescript@5
WORKDIR /app
FROM base AS deps
COPY pnpm-lock.yaml pnpm-workspace.yaml package.json tsconfig.base.json ./
COPY packages/shared/package.json packages/shared/
COPY packages/shared/tsconfig.json packages/shared/
COPY packages/mcp/package.json packages/mcp/
COPY packages/mcp/tsconfig.json packages/mcp/
COPY prisma/ prisma/
RUN pnpm install --frozen-lockfile
FROM base AS build
COPY --from=deps /app/ ./
COPY packages/shared/ packages/shared/
COPY packages/mcp/ packages/mcp/
COPY prisma/ prisma/
COPY tsconfig.base.json ./
RUN npx prisma generate --schema=prisma/schema.prisma
RUN pnpm --filter @agent-fox/shared build
RUN pnpm --filter @agent-fox/mcp build
COPY prisma/ prisma/
# shared: 安装依赖 + prisma generate
COPY packages/shared/package.json packages/shared/tsconfig.json packages/shared/
RUN cd packages/shared && npm install && npx prisma generate --schema=../../prisma/schema.prisma
# mcp: 安装依赖workspace:* → file: 引用)
COPY packages/mcp/package.json packages/mcp/tsconfig.json packages/mcp/
RUN cd packages/mcp && sed -i 's|"workspace:\*"|"file:../shared"|g' package.json && npm install
# 拷贝源码 + 编译
COPY packages/shared/src/ packages/shared/src/
COPY packages/mcp/src/ packages/mcp/src/
RUN tsc -p packages/shared/tsconfig.json
RUN tsc -p packages/mcp/tsconfig.json
# --- 精简运行时镜像 ---
FROM node:20-alpine AS runtime
WORKDIR /app
COPY --from=build /app/node_modules ./node_modules
COPY --from=build /app/packages/shared/dist ./packages/shared/dist
COPY --from=build /app/packages/shared/node_modules ./packages/shared/node_modules
COPY --from=build /app/packages/shared/package.json ./packages/shared/
COPY --from=build /app/packages/shared/node_modules ./packages/shared/node_modules
COPY --from=build /app/packages/mcp/dist ./packages/mcp/dist
COPY --from=build /app/packages/mcp/node_modules ./packages/mcp/node_modules
COPY --from=build /app/packages/mcp/package.json ./packages/mcp/
COPY --from=build /app/prisma ./prisma
COPY --from=build /app/packages/mcp/node_modules ./packages/mcp/node_modules
WORKDIR /app/packages/mcp
EXPOSE 3001