如何将FastAPI应用部署到Heroku?现有Procfile配置不生效
FastAPI部署到Heroku的Procfile正确配置方案
现有配置错误原因
你当前的Procfile配置存在两处核心问题:
原有错误配置:
web: gunicorn wsgi:app api: uvicorn main:app --host=0.0.0.0 --port=${PORT:-5000}
- Heroku仅会为
web类型的进程分配公网可访问的端口,你定义的api进程无法接收外部HTTP请求,自然无法对外提供FastAPI服务 - 无需同时启动gunicorn和uvicorn两个独立服务,FastAPI属于ASGI应用,选择对应合适的运行方式即可
正确配置方案
根据你的使用场景二选一即可:
方案1:单Uvicorn运行(适合轻量小型应用)
直接修改Procfile为如下内容即可:
web: uvicorn main:app --host=0.0.0.0 --port=${PORT}
无需设置端口默认值,Heroku会自动注入PORT环境变量供进程读取。
方案2:Gunicorn托管Uvicorn工作进程(生产环境推荐)
先确认你的requirements.txt中已经添加gunicorn、uvicorn[standard]依赖,再将Procfile修改为如下内容:
web: gunicorn main:app --workers 2 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:${PORT}
该方案通过Gunicorn管理多个Uvicorn工作进程,并发能力和稳定性远高于单Uvicorn进程,适合生产环境使用,--workers参数可以根据你的应用负载调整,常规配置为CPU核心数*2+1即可。
必做校验项
部署前请逐一确认以下配置:
- 项目根目录存在
main.py文件,且FastAPI实例的变量名确实为app,如果你的文件名、实例名有变动,需要同步修改Procfile中main:app的对应部分 requirements.txt中已经正确添加fastapi、uvicorn(方案2需额外添加gunicorn)的依赖声明- 代码中没有硬编码服务端口,所有端口配置优先读取
PORT环境变量
内容的提问来源于stack exchange,提问作者C3ald
相关产品推荐
相关产品推荐

