Heroku原生支持PHP,通过composer.json自动识别并安装依赖;需确保composer.json在根目录、提交composer.lock、不提交vendor/、明确Web入口(如public/或index.php),并通过Procfile配置服务器启动命令。

Heroku 原生支持 PHP,并能自动识别 composer.json 文件,因此部署依赖 Composer 的 PHP 应用非常直接——关键是确保项目结构规范、依赖声明正确、入口配置清晰。
确认项目根目录包含必要文件
Heroku 通过检测 composer.json 判断这是 PHP 项目,并自动运行 composer install --no-dev。所以必须确保:
-
composer.json存在于 Git 仓库根目录(不是子文件夹) - 已执行过
composer install并提交了composer.lock(强烈建议提交,保证环境一致性) - 没有把
vendor/目录提交到 Git(Heroku 会自行安装) - 有明确的 Web 入口,比如
index.php或public/index.php
设置正确的 Web 服务器配置
Heroku 不提供 Apache/Nginx 配置文件权限,但支持通过 Procfile 或内置规则启动 PHP 内置服务器或使用公共目录。推荐方式:
- 若项目使用
public/作为 Web 根(如 Laravel、Slim),在根目录创建Procfile,内容为:web: vendor/bin/heroku-php-apache2 public/ - 若只有
index.php在根目录,可用:web: vendor/bin/heroku-php-apache2 ./ - 不写
Procfile时,Heroku 会尝试自动推断:优先找public/,再找web/,最后是根目录下的index.php
处理环境变量与运行时配置
Composer 依赖可能需要环境变量(如数据库连接、API 密钥),不能硬编码:
立即学习“PHP免费学习笔记(深入)”;
- 用
getenv('DB_HOST')或$_ENV['DB_HOST']读取(Heroku 自动注入环境变量) - 在本地开发可借助
.env文件,但生产环境不要提交它;用heroku config:set DB_HOST=xxx设置 - PHP 扩展(如
pdo_pgsql、ext-mbstring)通常已预装;如有特殊需求,在composer.json的require中声明,Heroku 会自动启用对应扩展
部署并验证
完成代码准备后,按标准 Heroku 流程推送:
-
heroku create your-app-name(或留空让 Heroku 自动生成名) -
git push heroku main(注意分支名是否为main,旧项目可能是master) - 观察构建日志:看到
Installing dependencies (including require-dev)和Installing Heroku PHP buildpack...表示成功触发 Composer 安装 -
heroku open查看应用是否正常响应;用heroku logs --tail排查 500 或白屏问题
基本上就这些。不需要手动上传 vendor,也不用 SSH 登录服务器,只要 composer.json 正确、入口路径明确、环境变量到位,Heroku 就能可靠地跑起你的 PHP 应用。











