Files
ThriveX-Blog/Dockerfile
刘宇阳 918ee608a4 feat: 更新Dockerfile和package.json以支持静态资源复制
1. 在Dockerfile中新增复制公共静态资源的逻辑,确保应用在构建时包含必要的文件。
2. 在package.json中添加postbuild脚本,自动化复制独立资产的过程,提升构建效率。
2026-07-20 14:17:54 +08:00

54 lines
1.4 KiB
Docker
Executable File

# 使用国内代理 Node20 镜像
FROM docker.m.daocloud.io/library/node:20-alpine AS base
# 安装 Alpine兼容库
RUN apk add --no-cache libc6-compat
# 设置应用目录
WORKDIR /app
#关闭 Next.js 遥测
ENV NEXT_TELEMETRY_DISABLED=1
# 使用依赖安装阶段
FROM base AS deps
#复制依赖清单
COPY package.json package-lock.json ./
# 使用锁文件安装依赖
RUN npm ci
# 使用构建阶段
FROM base AS builder
#复制已安装依赖
COPY --from=deps /app/node_modules ./node_modules
#复制项目源码
COPY . .
# 接收接口地址
ARG NEXT_PUBLIC_PROJECT_API
# 写入接口地址
ENV NEXT_PUBLIC_PROJECT_API=$NEXT_PUBLIC_PROJECT_API
# 构建 standalone产物
RUN npm run build
# 使用运行阶段
FROM base AS runner
# 设置生产环境
ENV NODE_ENV=production
# 设置容器端口
ENV PORT=9001
#监听所有网卡
ENV HOSTNAME=0.0.0.0
# 创建运行用户组
RUN addgroup --system --gid 1001 nodejs
# 创建非 root 用户
RUN adduser --system --uid 1001 nextjs
# 创建 Next.js 缓存目录
RUN mkdir .next
# 授权缓存目录
RUN chown nextjs:nodejs .next
#复制 standalone 服务
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
#复制静态资源
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
COPY --from=builder --chown=nextjs:nodejs /app/public ./public
# 切换非 root 用户
USER nextjs
# 暴露应用端口
EXPOSE 9001
# 启动 standalone 服务
CMD ["node", "server.js"]