原文: How to Deploy Your Node.js Application for Free with Render

长久以来,Heroku都是托管全栈应用的优秀平台。freeCodeCamp早期大量使用Heroku,其他各式各样的开源项目也是如此。

但由于Heroku决定停止免费提供服务,这一现象可能会发生改变。

你可能已经收到了Heroku的邮件,通知你从2022年11月28日开始,在该平台托管应用不再免费,你可以购买付费计划。

no_free_heroku

如果你想免费托管静态页面或者web应用可以使用Netlify,具体操作可以查看这篇文章,但对于后端应用来说,并不存在太多如Heroku一样部署体验比较好的免费网站。

在这篇文章中,我们将学习如何使用Render来部署搭配Express服务器的Node.js应用。 它的部署过程和Heroku一样简单,并且免费。

让我们开始吧。

在部署应用之前需要做什么?

根据使用Heroku的经验来看,每一个应用都部署在一个由Heroku随机分配的端点,可以使用process.env.PORT变量访问。

使用Render平台也是一样的。

所以你必须确保自己不是通过硬编码端点值来开启Express服务器,而是使用process.env.PORT变量:

const express = require("express");
const app = express();
const PORT = process.env.PORT || 3030;

// 你的代码

app.listen(PORT, () => {
  console.log(`server started on port ${PORT}`);
});

如何使用Render部署一个GitHub仓库

改好端点之后,就可以开始部署你的应用了。

我准备好了这个GitHub仓库来使用Render部署。这个GitHub仓库展示了一个排名前几位的仓库清单,以及每一个仓库获得的星星数量(以JSON的格式)。

让我们开始吧!

Render提供如下图各种注册方式:

sign_up_render

一旦注册并登陆账号之后,你会看到控制面板:

dashboard

点击Web Services选项卡下的 New Web Service按钮来部署Node.js应用。

你也可以通过点击网页头部你头像旁边的 New + 按钮来选择 Web Service选择卡。

点击之后,会看到以下画面:

new_web_service

点击GitHub菜单下方的Connect account按钮,会看到以下画面:

install_render

点击Configure链接,就可以允许Render选取你所有或者选择的GitHub仓库。

我希望只访问选择的仓库,也就是我需要部署的。所以我选择Only select repositories选项。

然后,点击在选择卡下方的Select repositories按钮,选择你想要部署的仓库。

connect_github

选择完毕后,你会看到如下画面:

selected_repository

点击绿色按钮Install,使得Render有权访问你选择的仓库。

点击完毕后,你会被重定向到控制台,看到如下画面:

connected_repository

现在,点击Connect按钮,看到如下画面:

deploy_details

Name框中,输入一个简短的名字来标识你的网站。

注意: 请保持Name值的简单,因为部署完毕后,它将成为应用的URL。 所以如果我将github-repos设置为Name的值,我的应用URL会成为https://github-repos.onrender.com

所以请填写一个简单有意义的Name值。

如图填写剩下的部分:

details

Build Command中填写yarn就等同于yarn install命令。Yarn是一个类似于npm的包管理工具,但是比npm要快。

如果你的入口文件是 index.js,在Start Command中填写node index.js

填写完所有细节之后,向下滚动页面,会看到Plans区域,自动勾选的是免费计划。如果没有被勾选,请勾选好,因为我们的目的是免费部署应用。

再向下滑动页面会看到Advanced按钮。

advanced_options

如果你的应用使用了环境变量,你可以在Advanced设置中输入。也可以在这里添加 .env文件,这样就不用你手动一个一个地添加。

env_vars-1

注意Auto-Deploy的默认值是Yes——所以一旦你向GitHub仓库推送了更新,它们就会被自动部署到Render。

如果你并不想每次更改仓库的时候都自动部署,你可以在 Auto-Deploy下拉菜单中选择No

现在,点击Create Web Service按钮来开始部署过程。

10-1

部署可能需要等待一段时间,有时候如果页面卡在了“in progress”阶段,可以尝试刷新一下页面。

一旦部署完成,你可以看到如图,应用被部署,有一个Live 小标:

11

你可以点击在顶部的应用URL,在我的例子中,这个URL是https://github-repos.onrender.com/

如果是首次部署应用,可能在访问网站的时候会遇到Page is not working报错。

等待一段时间,并且使用Ctrl + RCmd + R(Mac)来刷新页面。因为免费服务的硬件有限,所以Render平台需要一些时间来启动一个项目。

部署成功后,可以如下图一样看到你的应用:

deployed_live

提示: 想要JSON有格式地显示,你需要安装Chrome插件:JSON Formatter

你或许知道,在使用Heroku的免费账户的时候,没如果没有新的请求进来,你的应用会在30分钟后进入到休眠模式。也就是如果再次请求需要花上一点时间。

同样的,使用Render的话,如果没有新的请求,应用会在15分钟后进入休眠模式。

感谢阅读!

你可以在这个仓库中找到完整的源代码。

你可以在这里查看实时demo

如果你想从零开始学Redux,并且完成三个应用,以及一个完整的食物点单应用,可以查看我的Mastering Redux课程。

在这篇课程中,你将学习:

  • 基础和高阶的Redux
  • 如何管理复杂的数据和对象状态
  • 如何使用多个reducer来管理复杂的redux状态
  • 如果排除Redux应用的错误
  • 如果通过使用react-redux库来在React中使用Redux并使得你的应用是响应式的
  • 如何使用redux-thunk库来处理异步API调用
  • 使用Redux编写三个不同的app

以及更多。

最后我们将从零开始搭建一个食物点单应用 ,包括付费模块和应用的部署。

想要了解JavaScript、React或者Node.js最新的消息吗? 请在LinkedIn上关注我