Heroku 不再免费了,我还能如何部署我的 React/Node 应用程序? :(
Heroku 不再免费了,我还能如何部署我的 React/Node 应用程序? 😦
关于 Heroku 免费产品的重要信息
-_________-
是的,Heroku 不再免费了。遗憾的是,我在 Heroku 上托管了一堆随机的东西。我的大部分东西都由某种前端构建(通常是 React)和一个 Express 服务器组成,所有这些都部署到单个 Heroku Dyno。
我通常将 Express 配置为服务于静态前端构建并处理服务器请求。我认为这是一种非常常见的模式,并且已经在互联网上看到了它的引用。我最喜欢的描述这种模式的文章之一在这里:
[
将 React 和 Express 部署到 Heroku
你有一个 React 应用程序,以及一个用 Express 或其他东西编写的 API 服务器。现在——你如何将它们都部署到一个……
daveceddia.com
](https://daveceddia.com/deploy-react-express-app-heroku/)
另一篇优秀的文章展示了如何使用 Flask 应用程序和 React 前端来做到这一点:
[
如何部署 React + Flask 项目
欢迎来到我的“React + Flask”系列的第二部分。在这一集中,我们将把我们的项目部署在一个……
博客.miguelgrinberg.com
](https://blog.miguelgrinberg.com/post/how-to-deploy-a-react--flask-project)
这种模式非常适合 Heroku,但并不能很好地转化为其他托管服务。对于 Express 应用程序,我们依赖于一个名为 **heroku-postbuild**
. **** 在 Flask 示例中,我们使用了一些 Heroku 独有的技术,称为 **档案**
.
我们如何尽可能轻松地将这些应用程序迁移到不同的免费服务?
我觉得最简单的做法是为您的应用程序创建一个 Docker 映像并部署您的容器。你可以捕捉到同样的魔力 **heroku-postbuild**
带有 Docker 多阶段构建的脚本!
那里有大量关于如何充分利用 Docker 的优秀资源,这篇文章足以让你以最少的想法离开 Heroku。
下面是一个示例 Express 应用程序,配置为提供静态 Create React App 构建,同时还处理 API 请求。该项目设置为通过以下方式部署到 Heroku **heroku-postbuild**
**** 或者可以部署为 docker 容器。
https://github.com/motherbrainn/deploy-react-docker
回顾一下,这在 Heroku 上的工作方式是:
开始
将安装服务器然后启动 Express 应用程序
heroku-postbuild
将安装客户端并运行构建命令
如果我们查看 Dockerfile,我们将了解如何使用容器来实现这一点:
分解这个多阶段构建中发生的事情:
- 安装客户端并创建构建。这相当于
**heroku-postbuild**
. - 将 NODE_ENV 设置为生产(这不再像在 Heroku 上那样免费)。
- 仅为我们构建的第二阶段复制构建文件夹。这节省了我们容器中的空间,实际上比保留整个客户端文件夹的旧 Heroku 样式更好。
- 复制服务器文件并安装服务器。
- 启动 Express 服务器!
就是这样……您可以通过将演示项目部署到 Heroku 来对其进行测试,然后转身将其再次部署到任何支持 docker 映像的地方!
这打开了一堆免费或非常便宜的托管选项,这里有一些:
- 数字海洋
- 天蓝色
- AWS
奖金 :如果您想在本地测试此示例中的容器,这可以为您节省 google 搜索:
创建图像: docker build -f Dockerfile -t<tag_name> .
运行图像: 搬运工运行 -p 4000:4000 -d<image_id>
特别感谢 Heroku 多年来免费提供的东西 ❤️
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通