Files

1 line
5.4 KiB
JSON

{"repo": "8086k-a/mvp24", "files": {"Dockerfile": {"92081a4a15638f07cb694f641d0f141f78751502": {"t": 1785747001.5574741, "n": 1723, "h": "815e0086675965bb", "c": "# 使用多阶段构建减小镜像大小\r\nFROM node:20-alpine AS base\r\n\r\n# 安装pnpm\r\nRUN npm install -g pnpm\r\n\r\n# 设置工作目录\r\nWORKDIR /app\r\n\r\n# ========== 构建时环境变量声明 ==========\r\n# 只声明必须在构建时使用的变量\r\nARG NODE_ENV=production\r\n\r\n# 将 ARG 转换为 ENV,使构建过程能访问这些变量\r\nENV NODE_ENV=$NODE_ENV\r\n\r\n# ⚠️ 重要:移除所有其他 ARG 和 ENV 声明\r\n# 所有与应用配置相关的变量(数据库、API密钥、认证等)\r\n# 都应该在运行时由部署平台动态注入,不应该在构建时硬编码到镜像中\r\n\r\n# 复制包管理文件\r\nCOPY package.json pnpm-lock.yaml ./\r\n\r\n# 安装依赖\r\nRUN pnpm install --frozen-lockfile\r\n\r\n# 复制源代码\r\nCOPY . .\r\n\r\n# 构建应用(此时环境变量已可用)\r\nRUN pnpm build\r\n\r\n# 生产阶段\r\nFROM node:20-alpine AS production\r\n\r\n# 安装pnpm\r\nRUN npm install -g pnpm\r\n\r\n# 设置工作目录\r\nWORKDIR /app\r\n\r\n# ========== 运行时环境变量声明 ==========\r\n# 所有配置变量都应该在运行时由部署平台注入,不在 Dockerfile 中指定\r\n#\r\n# 部署平台(腾讯云、Vercel等)需要在运行时注入以下变量:\r\n# \r\n# 前端配置(通过 /api/auth/config API 读取):\r\n# - MY_NEXT_PUBLIC_APP_URL\r\n# - MY_NEXT_PUBLIC_SUPABASE_URL\r\n# - MY_NEXT_PUBLIC_SUPABASE_ANON_KEY\r\n# - MY_NEXT_PUBLIC_WECHAT_CLOUDBASE_ID\r\n# - MY_NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY\r\n# - MY_NEXT_PUBLIC_ALIPAY_APP_ID\r\n#\r\n# 后端密钥(服务端 API 使用):\r\n# - WECHAT_APP_SECRET\r\n# - WECHAT_PAY_API_V3_KEY\r\n# - WECHAT_PAY_PRIVATE_KEY\r\n# - DEEPSEEK_API_KEY\r\n# - OPENAI_API_KEY\r\n# - ANTHROPIC_API_KEY\r\n# - 等其他 API 密钥\r\n#\r\n# ⚠️ 关键原则:\r\n# 1. 构建时不硬编码任何配置\r\n# 2. 所有配置在运行时由部署环境提供\r\n# 3. 这样同一个镜像可以用于不同的环境(开发、测试、生产等)\r\n\r\nARG PORT=3000\r\nENV PORT=$PORT\r\n\r\n# 从构建阶段复制必要的文件\r\nCOPY --from=base /app/package.json /app/pnpm-lock.yaml ./\r\nCOPY --from=base /app/.next ./.next\r\nCOPY --from=base /app/public ./public\r\nCOPY --from=base /app/next.config.mjs ./\r\n\r\n# 安装生产依赖\r\nRUN pnpm install --frozen-lockfile --prod\r\n\r\n# 创建非root用户\r\nRUN addgroup -g 1001 -S nodejs\r\nRUN adduser -S nextjs -u 1001\r\n\r\n# 更改文件所有权\r\nRUN chown -R nextjs:nodejs /app\r\nUSER nextjs\r\n\r\n# 暴露端口\r\nEXPOSE 3000\r\n\r\n# 启动应用\r\nCMD [\"pnpm\", \"start\"]"}, "f6fa1e0b45b8c5d61be0cba330589f254a842762": {"t": 1785769663.3376303, "n": 1723, "h": "815e0086675965bb", "c": "# 使用多阶段构建减小镜像大小\r\nFROM node:20-alpine AS base\r\n\r\n# 安装pnpm\r\nRUN npm install -g pnpm\r\n\r\n# 设置工作目录\r\nWORKDIR /app\r\n\r\n# ========== 构建时环境变量声明 ==========\r\n# 只声明必须在构建时使用的变量\r\nARG NODE_ENV=production\r\n\r\n# 将 ARG 转换为 ENV,使构建过程能访问这些变量\r\nENV NODE_ENV=$NODE_ENV\r\n\r\n# ⚠️ 重要:移除所有其他 ARG 和 ENV 声明\r\n# 所有与应用配置相关的变量(数据库、API密钥、认证等)\r\n# 都应该在运行时由部署平台动态注入,不应该在构建时硬编码到镜像中\r\n\r\n# 复制包管理文件\r\nCOPY package.json pnpm-lock.yaml ./\r\n\r\n# 安装依赖\r\nRUN pnpm install --frozen-lockfile\r\n\r\n# 复制源代码\r\nCOPY . .\r\n\r\n# 构建应用(此时环境变量已可用)\r\nRUN pnpm build\r\n\r\n# 生产阶段\r\nFROM node:20-alpine AS production\r\n\r\n# 安装pnpm\r\nRUN npm install -g pnpm\r\n\r\n# 设置工作目录\r\nWORKDIR /app\r\n\r\n# ========== 运行时环境变量声明 ==========\r\n# 所有配置变量都应该在运行时由部署平台注入,不在 Dockerfile 中指定\r\n#\r\n# 部署平台(腾讯云、Vercel等)需要在运行时注入以下变量:\r\n# \r\n# 前端配置(通过 /api/auth/config API 读取):\r\n# - MY_NEXT_PUBLIC_APP_URL\r\n# - MY_NEXT_PUBLIC_SUPABASE_URL\r\n# - MY_NEXT_PUBLIC_SUPABASE_ANON_KEY\r\n# - MY_NEXT_PUBLIC_WECHAT_CLOUDBASE_ID\r\n# - MY_NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY\r\n# - MY_NEXT_PUBLIC_ALIPAY_APP_ID\r\n#\r\n# 后端密钥(服务端 API 使用):\r\n# - WECHAT_APP_SECRET\r\n# - WECHAT_PAY_API_V3_KEY\r\n# - WECHAT_PAY_PRIVATE_KEY\r\n# - DEEPSEEK_API_KEY\r\n# - OPENAI_API_KEY\r\n# - ANTHROPIC_API_KEY\r\n# - 等其他 API 密钥\r\n#\r\n# ⚠️ 关键原则:\r\n# 1. 构建时不硬编码任何配置\r\n# 2. 所有配置在运行时由部署环境提供\r\n# 3. 这样同一个镜像可以用于不同的环境(开发、测试、生产等)\r\n\r\nARG PORT=3000\r\nENV PORT=$PORT\r\n\r\n# 从构建阶段复制必要的文件\r\nCOPY --from=base /app/package.json /app/pnpm-lock.yaml ./\r\nCOPY --from=base /app/.next ./.next\r\nCOPY --from=base /app/public ./public\r\nCOPY --from=base /app/next.config.mjs ./\r\n\r\n# 安装生产依赖\r\nRUN pnpm install --frozen-lockfile --prod\r\n\r\n# 创建非root用户\r\nRUN addgroup -g 1001 -S nodejs\r\nRUN adduser -S nextjs -u 1001\r\n\r\n# 更改文件所有权\r\nRUN chown -R nextjs:nodejs /app\r\nUSER nextjs\r\n\r\n# 暴露端口\r\nEXPOSE 3000\r\n\r\n# 启动应用\r\nCMD [\"pnpm\", \"start\"]"}}}}