diff --git a/.dockerignore b/.dockerignore index 9980816..c522115 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,10 +1,10 @@ -# 🚀 超优化版 .dockerignore for npm (减小镜像体积) +# 🚀 优化版 .dockerignore (减小镜像体积) # 依赖和构建产物 node_modules .next -.npm .pnpm-store +.npm .yarn npm-debug.log* yarn-debug.log* @@ -12,10 +12,6 @@ yarn-error.log* pnpm-debug.log* lerna-debug.log* -# 包管理器锁文件 (保留npm,排除其他) -pnpm-lock.yaml -yarn.lock - # 版本控制 .git .gitignore diff --git a/Dockerfile b/Dockerfile index c95c735..7229107 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,56 +1,44 @@ -# 🚀 超优化版 Dockerfile for Next.js with pnpm (Ubuntu环境解决兼容性) +# 🚀 优化版 Dockerfile for Next.js with pnpm (目标: <200MB) # 第一阶段:构建阶段 -FROM node:22-slim AS builder +FROM node:22-alpine AS builder # 设置工作目录 WORKDIR /app -# 安装必要的系统依赖 -RUN apt-get update && apt-get install -y \ - python3 \ - make \ - g++ \ - && rm -rf /var/lib/apt/lists/* +# 安装 pnpm (指定版本避免版本差异) +RUN npm install -g pnpm -# 安装 pnpm -RUN npm install -g pnpm@9.15.0 +# 复制包管理器配置文件 (利用Docker缓存) +COPY package.json pnpm-lock.yaml ./ -# 复制包管理器配置文件 (只需package.json,pnpm会自动生成锁文件) -COPY package.json ./ - -# 安装依赖 (pnpm正确处理二进制文件,自动生成锁文件) -RUN pnpm install --prod --no-optional && \ - pnpm store prune +# 安装依赖 (禁用缓存以减小体积) +RUN pnpm install --frozen-lockfile --no-optional # 复制源代码和配置文件 COPY . . -# 重新安装所有依赖用于构建 (包含开发依赖) -RUN pnpm install --no-optional - # 构建应用 RUN pnpm run build # 清理构建阶段缓存 (关键优化点) -RUN rm -rf node_modules && \ +RUN pnpm store prune && \ + rm -rf node_modules && \ rm -rf ~/.pnpm-store && \ - rm -rf /root/.pnpm-store && \ - pnpm store prune + rm -rf /root/.pnpm-store -# 第二阶段:运行阶段 (使用Ubuntu slim镜像) -FROM node:22-slim AS runner +# 第二阶段:运行阶段 (使用更小的基础镜像) +FROM node:22-alpine AS runner # 设置工作目录 WORKDIR /app # 创建非root用户 -RUN groupadd --system --gid 1001 nodejs && \ - useradd --system --uid 1001 --gid nodejs nextjs +RUN addgroup --system --gid 1001 nodejs && \ + adduser --system --uid 1001 nextjs # 只安装必要的运行时工具 -RUN apt-get update && apt-get install -y \ - wget \ - && rm -rf /var/lib/apt/lists/* +RUN apk add --no-cache wget && \ + apk cache clean # 从构建阶段复制构建产物 (standalone模式包含所有需要的依赖) COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ diff --git a/package.json b/package.json index e97111b..26aab65 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,8 @@ "react-error-boundary": "^6.0.0", "react-icons": "^5.5.0", "styled-components": "^6.0.9", + "swagger-jsdoc": "^6.2.8", + "swagger-ui-react": "^5.22.0", "zustand": "^5.0.5" }, "devDependencies": { @@ -33,6 +35,8 @@ "@types/node": "^20", "@types/react": "^19", "@types/react-dom": "^19", + "@types/swagger-jsdoc": "^6.0.4", + "@types/swagger-ui-react": "^5.18.0", "tailwindcss": "^4", "typescript": "^5" }