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