初次提交
This commit is contained in:
+64
@@ -0,0 +1,64 @@
|
||||
# 支持: linux/amd64, linux/arm64, linux/arm/v7
|
||||
|
||||
# ==========================================
|
||||
# 第一阶段:依赖安装与构建阶段
|
||||
# ==========================================
|
||||
FROM node:22-alpine AS builder
|
||||
|
||||
WORKDIR /app
|
||||
ENV NODE_OPTIONS="--max-old-space-size=1024"
|
||||
ENV VITE_BUILD_THREADS=1
|
||||
ENV NITRO_PRESET=node-server
|
||||
# 1. 仅复制依赖相关文件和 scripts 目录(因为 postinstall 需要),利用 Docker 缓存层
|
||||
COPY package.json package-lock.json ./
|
||||
COPY scripts ./scripts
|
||||
|
||||
# 配置 npm 镜像加速并安装依赖,严格内存优化
|
||||
RUN set -eux; \
|
||||
npm config set registry https://registry.npmmirror.com; \
|
||||
npm config set maxsockets 3; \
|
||||
npm config set progress false; \
|
||||
npm config set cache /tmp/npm-cache; \
|
||||
npm install --package-lock-only --ignore-scripts; \
|
||||
npm ci --prefer-offline --no-audit --no-fund --maxsockets=3
|
||||
|
||||
# 2. 复制源代码并进行构建
|
||||
# 只有在 package.json 没变而源代码改变时,才会从这一步开始重新执行,跳过上面的耗时依赖安装
|
||||
COPY . .
|
||||
|
||||
# 构建应用,使用内存优化脚本适应4GB总内存
|
||||
RUN chmod +x scripts/memory-build.js && \
|
||||
node scripts/memory-build.js
|
||||
RUN npm prune --omit=dev
|
||||
|
||||
# ==========================================
|
||||
# 第二阶段:运行阶段
|
||||
# ==========================================
|
||||
FROM node:22-alpine AS runtime
|
||||
|
||||
USER root
|
||||
WORKDIR /app
|
||||
|
||||
# 从构建阶段复制必要文件,剔除无关的开发依赖
|
||||
COPY --from=builder /app/package.json ./
|
||||
COPY --from=builder /app/package-lock.json ./
|
||||
COPY --from=builder /app/drizzle.config.ts ./
|
||||
COPY --from=builder /app/node_modules ./node_modules
|
||||
COPY --from=builder /app/.output ./.output
|
||||
COPY --from=builder /app/app/drizzle ./app/drizzle
|
||||
COPY --from=builder /app/scripts ./scripts
|
||||
# 如果有 vendor 目录再取消注释
|
||||
# COPY --from=builder /app/vendor ./vendor
|
||||
|
||||
# 环境变量配置
|
||||
ENV NODE_ENV=production \
|
||||
PORT=3000 \
|
||||
NPM_CONFIG_UPDATE_NOTIFIER=false \
|
||||
PREBUILT=true \
|
||||
NODE_OPTIONS="--max-old-space-size=512"
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE $PORT
|
||||
|
||||
# 启动命令:先执行数据库迁移,再启动应用
|
||||
CMD ["sh", "-c", "node scripts/deploy.js && node .output/server/index.mjs"]
|
||||
Reference in New Issue
Block a user