You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions构建Docker镜像时遇Firebase auth/invalid-api-key错误求助

解决GitHub Actions构建Docker时Firebase API Key无效的问题

核心原因

错误auth/invalid-api-key发生在Next.js构建阶段的页面数据收集环节,说明构建时未正确注入NEXT_PUBLIC_*开头的Firebase环境变量。Next.js的NEXT_PUBLIC_前缀变量是在构建时嵌入到客户端代码中的,仅在Cloud Run设置运行时环境变量无法解决构建阶段的缺失。

修复步骤

1. 修正Docker构建步骤的变量传递格式

你的build-and-push步骤中,secrets字段的转义引号是多余的,且对于NEXT_PUBLIC_这类需要暴露给客户端的变量,直接用build-args传递更直观。修改为:

- name: Build and push Docker image
  id: build-and-push
  uses: docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a
  if: ${{ github.event_name != 'pull_request' }}
  with:
    context: .
    file: ./Dockerfile.prod
    build-args: |
      NEXT_PUBLIC_FIREBASE_API_KEY=${{ secrets.NEXT_PUBLIC_FIREBASE_API_KEY }}
      NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=${{ secrets.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN }}
      NEXT_PUBLIC_FIREBASE_PROJECT_ID=${{ secrets.NEXT_PUBLIC_FIREBASE_PROJECT_ID }}
    push: true
    tags: ${{ steps.meta.outputs.tags }}
    labels: ${{ steps.meta.outputs.labels }}
    cache-from: type=gha
    cache-to: type=gha,mode=max

2. 在Dockerfile.prod中配置构建时变量

需要在Dockerfile的构建阶段(安装依赖、编译Next.js的环节)引入这些参数并设置为环境变量,供Next.js编译使用。示例Dockerfile.prod:

# 构建阶段
FROM node:16-alpine AS builder
WORKDIR /app

# 声明构建参数
ARG NEXT_PUBLIC_FIREBASE_API_KEY
ARG NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN
ARG NEXT_PUBLIC_FIREBASE_PROJECT_ID

# 设置为环境变量,让Next.js构建时能读取到
ENV NEXT_PUBLIC_FIREBASE_API_KEY=$NEXT_PUBLIC_FIREBASE_API_KEY
ENV NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=$NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN
ENV NEXT_PUBLIC_FIREBASE_PROJECT_ID=$NEXT_PUBLIC_FIREBASE_PROJECT_ID

COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 运行阶段
FROM node:16-alpine AS runner
WORKDIR /app
ENV NODE_ENV production

COPY --from=builder /app/public ./public
COPY --from=builder /app/.next/standalone ./
COPY --from=builder /app/.next/static ./.next/static

EXPOSE 3000
CMD ["node", "server.js"]

3. (可选)为测试阶段添加环境变量

如果你的测试用例依赖Firebase变量,需要在test-code job中注入环境变量:

jobs:
  test-code:
    runs-on: ubuntu-20.04
    env:
      NEXT_PUBLIC_FIREBASE_API_KEY: ${{ secrets.NEXT_PUBLIC_FIREBASE_API_KEY }}
      NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN: ${{ secrets.NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN }}
      NEXT_PUBLIC_FIREBASE_PROJECT_ID: ${{ secrets.NEXT_PUBLIC_FIREBASE_PROJECT_ID }}
    steps:
    - uses: actions/checkout@v3
    - name: Use Node.js 16.x
      uses: actions/setup-node@v3
      with:
        node-version: 16.x
    - run: npm ci
    - run: npm run test

4. 确认Next.js配置一致性

你的next.config.js配置是正确的,但要确保变量名和GitHub Secrets、Dockerfile中的完全一致,避免拼写错误。

关键说明

  • Next.js的NEXT_PUBLIC_*变量是构建时注入的,必须在Docker构建阶段就存在,运行时再设置无法生效。
  • Cloud Run的环境变量仅作用于容器运行阶段,适合存储非客户端的敏感变量,不适合NEXT_PUBLIC_开头的变量。

内容的提问来源于stack exchange,提问作者Aliton Oliveira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 07:15:34