使用Terraform部署Next.js到Kubernetes后无法读取环境变量求助
问题求助:Next.js部署到Kubernetes后所有环境变量均为undefined
此前已有类似问题提出,过去两天我尝试了大量配置示例均未成功,因此现将我的环境配置贴出寻求帮助。
问题
使用Terraform将Next.js部署到Kubernetes后,所有环境变量均为undefined
预期结果
staging: NEXT_PUBLIC_APIROOT=https://apis-staging.mywebsite.com production: NEXT_PUBLIC_APIROOT=https://apis.mywebsite.com
密钥存储在GitHub Actions中。我通过Terraform将应用部署到预发布(staging)和生产(production)集群,以下是配置片段:
env: ENV: staging PROJECT_ID: ${{ secrets.GKE_PROJECT_STAG }} GOOGLE_CREDENTIALS: ${{ secrets.GOOGLE_CREDENTIALS_STAG }} GKE_SA_KEY: ${{ secrets.GKE_SA_KEY_STAG }} NEXT_PUBLIC_APIROOT: ${{ secrets.NEXT_PUBLIC_APIROOT_STAGING }}
我还添加了手动创建.env文件的步骤:
- name: env-file run: | touch .env.local echo NEXT_PUBLIC_APIROOT: ${{ secrets.NEXT_PUBLIC_APIROOT_STAGING }} >> .env.local
Dockerfile
FROM node:16-alpine AS deps RUN apk add --no-cache libc6-compat WORKDIR /app COPY package.json package-lock.json .npmrc ./ RUN npm ci FROM node:16-alpine AS builder WORKDIR /app COPY --from=deps /app/node_modules ./node_modules COPY . . RUN npm run build FROM node:16-alpine AS runner WORKDIR /app RUN addgroup -g 1001 -S nodejs RUN adduser -S nextjs -u 1001 # You only need to copy next.config.js if you are NOT using the default configuration COPY --from=builder /app/next.config.js ./ COPY --from=builder /app/public ./public COPY --from=builder /app/package.json ./package.json # Automatically leverage output traces to reduce image size COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static USER nextjs EXPOSE 3000 ENV PORT 3000 CMD ["node", "server.js"]
next.config.js
module.exports = withBundleAnalyzer({ publicRuntimeConfig: { NEXT_PUBLIC_APIROOT: process.env.NEXT_PUBLIC_APIROOT, }, output: 'standalone', webpack: (config, { dev, isServer }) => { if (dev && isServer) { const ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin') config.plugins.push( new ForkTsCheckerWebpackPlugin({ eslint: { files: './src/**/*.{ts,tsx,js,jsx}', }, }) ) } return config }, })
有没有人遇到过这个问题?
内容的提问来源于stack exchange,提问作者Jason McFarlane
相关产品推荐
相关产品推荐

