Serverless体验之 把nest.js项目部署到Heroku

前言

关于serverless服务,之前我们讲过了netlify,和zeit now,也给大家简单介绍过firebase,这次带来的是老牌云服务商heroku。

初见

首先我个人最喜欢的就是heroku,因为我在做 Python Flask的时候就接触过Heroku了,在李辉老师写的Flask那本书中,他使用的Paas服务好像就是在Heroku门下的,好像还有 pythonanywhere,记不清了,但是就是那时我就知道了Heroku这个平台。

所以自然而然,我的第一个网站就是部署在heroku上面的,但是还对cli等等东西不熟悉,下载的还是微软下的msi包,这次重新捡起来当然使用yarn拉:

yarn global add heroku

我记得当时部署的时候也不会看日志,出错了就去网上搜错误,对Heroku的pipline也不是很熟悉,所以现在再度尝鲜heroku不禁有些感慨。

当初之所以放弃heroku,无非是觉得有了自己的服务器,有了docker,觉得自己做运维还是不成问题的,尤其是现在devops时代,后端运维一肩挑,岂不是美滋滋;后来开始把目光转向前端之后,开始觉得更应该把目光放在前端的前沿技术,或者网站性能优化,或者JS上,即使学习了Node,也是想着使用一些非常成熟的框架,减少自己后端服务的操作量,这也是我为什么非常喜欢Nest.js的原因。

有什么不同

关于Heroku与Faas服务的比较,因为我接触的也不是很多,关于zeit和netlify的话,他们都是使用cli的,但是他们的语言方面都有限制,甚至语言的框架上也有很多限制,甚至觉得他们的serverless就是Faas。而Heroku的话,首先它并没有netlify那样的模板,其次他更加灵活,因为heroku并不是Faas,而是完整的框架使用。

所以Heroku是Paas的典型代表,那么我们为什么在serverless里面加上Heroku呢,首先就是Heroku做到了Serverless能达到的标准,即:

如果你的 PaaS 能在 20ms 内启动一个只运行半秒钟的实例,它就叫 Serverless。 — Adrian Cockcroft

关于大厂的服务,像腾讯云之类的Faas服务也是免费的,你可以去体验一下,我个人没怎么使用过,但是看别人用感觉和netlify也差不多,除了没有Cli.

简单使用

关于简单使用heroku,在刚刚下载的基础上我们可以新建一个文件夹,我这里叫他:heroku-nest,接着我们需要登陆:

heroku login

然后建立一个新的nest.js项目:

nest new

接着我们需要修改一些内容,首先是package.json中,我们需要在scripts中添加:

    "postinstall": "npm run prebuild",

因为heroku的环境是没有nest这个命令的,我们要先生成静态文件,然后使用node启动。

因为heroku的默认启动是:

npm start

所以我们需要修改一下默认启动指令,首先我们在根目录下创建Procfile文件,添加:

web: npm run start:prod

然后修改一下启动端口,因为heroku不一定给你分配 3000端口,也可以改一下跨域,启动端口:

  await app.listen(process.env.PORT || 3000);

然后修改下环境变量:

NPM_CONFIG_PRODUCTION: false
NODE_ENV: production

最后我们通过常规的git命令直接推上去就可以了:

git add .
git commit -am ""
git push heroku master 

出错的话使用

heroku login

来看一下日志报错即可,一般都比较好解决。
最后可以看到成功的标志:

remote: -----> Compressing...
remote:        Done: 67.2M
remote: -----> Launching...
remote:        Released v9
remote:        https://test-eswang.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy... done.

然后在网页端可以看到:

环境变量:
Serverless体验之 把nest.js项目部署到Heroku_第1张图片
启动指令:
Serverless体验之 把nest.js项目部署到Heroku_第2张图片
关于其他使用后面再说,待更新。

你可能感兴趣的:(Nest.js学习日记)