使用 Heroku 部署
经典 PaaS,git push 部署、buildpack、附加功能和 dyno 扩缩。
平台入门
为什么
Heroku 开创 git push 部署,托管附加功能(Postgres、Redis、SendGrid)。Buildpack 系统自动检测语言并处理构建、发布和运行时。
平台即服务采用率 2024 年增长 24%,团队从虚拟机管理转向 git push 部署。the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research),PaaS 层捕获了大多数新工作负载。
何时使用
快速原型、Ruby/Python/Node 应用和想要简单的团队用 Heroku。注意:2022 年移除免费层。
如何做
1. 创建 — heroku create myapp
2. 部署 — git push heroku main
3. Buildpack — heroku buildpacks:set heroku/nodejs
4. Procfile — web: npm start,worker: npm run worker
5. 附加 — heroku addons:create heroku-postgresql:hobby-basic
6. 扩缩 — heroku ps:scale web=2 worker=1
7. 发布 — heroku run npm run migrate 作为 release 阶段
示例
# Procfile
web: npm start
worker: npm run worker
release: npm run db:migrate
# app.json — 一键部署
{
"name": "My App",
"scripts": { "postdeploy": "npm run db:migrate" },
"env": { "SECRET_KEY": { "generator": "secret" } },
"addons": ["heroku-postgresql"]
}
# 部署
heroku create
git push heroku main
heroku addons:create heroku-postgresql:essential-0
heroku ps:scale worker=1
常见问题
- ⚠构建失败 — buildpack 或 Node 版本错误,package.json 设 engines
- ⚠Dyno 每 24h 重启 — Heroku 循环 dyno,用 release 阶段做迁移
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓Procfile 用 release 阶段 — dyno 启动前运行迁移,原子部署
- ✓package.json 设 engines — 确保 Heroku 用正确 Node/Python 版本
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求