NextJS无法识别从Secret Manager加载的Docker构建环境变量
问题:NextJS + GCP Cloud Build构建Docker镜像时环境变量无法生效
在使用NextJS应用通过GCP Cloud Build构建Docker镜像时遇到环境变量问题:通过GCP Secret Manager在构建阶段加载的API密钥,日志已确认变量值正常填充,但NextJS运行时却找不到这些变量,导致报错。
已知NextJS可在构建阶段(next.config.ts)或运行阶段(.env文件)配置环境变量,但无法定位变量失效的具体原因。另外,部分API密钥属于机密信息,不想通过NEXT_PUBLIC_前缀暴露到客户端(除非对该方式的安全性理解有误)。
cloudbuild.yml配置
steps: - name: 'gcr.io/cloud-builders/docker' entrypoint: 'bash' args: - '-c' - | echo "GHOST_CONTENT_API environment variable: $$GHOST_CONTENT_API" echo "GA4_MEASUREMENT_ID environment variable: $$GA4_MEASUREMENT_ID" docker build -t us-central1-docker.pkg.dev/${PROJECT_ID}/repo/repo-website . secretEnv: ['GHOST_CONTENT_API', 'GA4_MEASUREMENT_ID'] availableSecrets: secretManager: - versionName: projects/${PROJECT_ID}/secrets/GHOST_CONTENT_API/versions/1 env: 'GHOST_CONTENT_API' - versionName: projects/${PROJECT_ID}/secrets/GA4_MEASUREMENT_ID/versions/1 env: 'GA4_MEASUREMENT_ID'
构建日志(变量已正确输出)
BUILD Already have image (with digest): gcr.io/cloud-builders/docker GHOST_CONTENT_API environment variable: ##### GA4_MEASUREMENT_ID environment variable: GTM-####
Dockerfile配置
FROM node:18-alpine WORKDIR /app COPY . . RUN npm install --omit=dev --production RUN npm run build EXPOSE 3000 CMD ["npm", "start"]
NextJS测试代码(layout.tsx)
在layout.tsx中测试客户端和服务端环境变量加载情况,结果均为undefined:
console.log('ENV Variables - Layout.tsx') console.log('Client ENV') // undefined console.log(process.env.NEXT_PUBLIC_GHOST_CONTENT_API) console.log('Server ENV') // undefined console.log(process.env.GHOST_CONTENT_API)
内容的提问来源于stack exchange,提问作者cphill
相关产品推荐
相关产品推荐

