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