FastAPI应用部署Firebase Hosting遇404:构建命令问题求助
解决Firebase Hosting部署FastAPI后/hello端点404的问题
核心问题
Firebase Hosting是静态资源托管服务,无法直接运行FastAPI这类后端服务。你之前在GitHub Action中启动gunicorn或构建Docker镜像的操作,并没有将服务部署到可运行后端的环境(如Cloud Run),导致Hosting无法定位API端点。
正确部署流程
1. 将FastAPI部署到Cloud Run
Docker方式(推荐)
你的Dockerfile只需移除后台运行参数-d,并指定Cloud Run要求的8080端口:
FROM python:3.9-slim WORKDIR /app COPY ./requirements.txt /app/requirements.txt RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt COPY ./app /app # Cloud Run需前台运行,且监听8080端口 CMD ["gunicorn", "-k", "uvicorn.workers.UvicornWorker", "app.main:app", "--bind", "0.0.0.0:8080"]
2. 配置Firebase Hosting重写规则
在项目根目录创建或修改firebase.json,添加规则将API请求转发到Cloud Run服务:
{ "hosting": { "public": "public", // 可保留空的public目录用于存放静态资源 "rewrites": [ { "source": "/hello", // 仅转发/hello路径,或用"**"转发所有请求 "run": { "serviceId": "your-cloud-run-service-name", // 替换为你的Cloud Run服务名 "region": "us-central1" // 替换为服务所在区域 } } ] } }
3. 修正GitHub Action工作流
原工作流未正确部署后端服务,需调整为先部署Cloud Run,再部署Hosting:
name: Deploy FastAPI + Firebase Hosting 'on': push: branches: - main jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 # 部署到Cloud Run - name: Deploy to Cloud Run uses: google-github-actions/deploy-cloudrun@v2 with: service: fastapi-service # 替换为你的Cloud Run服务名 region: us-central1 # 替换为服务区域 source: . credentials: ${{ secrets.GCP_SERVICE_ACCOUNT_KEY }} # 需在GitHub Secrets中配置GCP服务账号密钥 # 部署Firebase Hosting - name: Deploy to Firebase Hosting uses: FirebaseExtended/action-hosting-deploy@v0 with: repoToken: ${{ secrets.GITHUB_TOKEN }} firebaseServiceAccount: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_AGENT_AVATAR_GENERATION }} channelId: live projectId: agent-avatar-generation
4. 验证步骤
- 先访问Cloud Run提供的服务URL,加上
/hello,确认返回{"message": "Success"} - 等待Hosting部署完成后,访问Firebase域名的
/hello端点,验证是否正常响应
额外注意事项
- 确认FastAPI文件结构:若主文件为
app/main.py,app.main:app正确;若主文件是根目录的main.py,需改为main:app - 重写规则生效可能需要1-2分钟,部署后稍作等待再测试
- 确保GCP服务账号拥有Cloud Run Admin、Cloud Build Editor等必要权限
内容的提问来源于stack exchange,提问作者Neha
相关产品推荐
相关产品推荐

