@thinkboat/serverless-nestjs
v1.0.0
Published
腾讯云 serverless components nestjs 组件
Downloads
18
Readme
Serverless Nest.js
腾讯云 Nest.js 组件 ⎯⎯⎯ 通过使用 Serverless Framework,基于云上 Serverless 服务(如网关、云函数等),实现“0”配置,便捷开发,极速部署你的 Nest.js 应用。
注意:本项目仅支持使用 ExpressAdapter 的 Nest.js 项目。
安装
通过 npm 安装最新版本的 Serverless Framework
$ npm install -g serverless
创建
通过如下命令和模板链接,快速创建一个 Nest.js 应用:
$ npm i -g @nestjs/cli
$ nest new serverless-nestjs
$ cd serverless-nestjs
执行如下命令,安装应用的对应依赖
$ npm install
项目改造
- 由于云端函数执行时不需要监听端口的,所以我们需要修改下入口文件
src/main.ts
,如下:
import { NestFactory } from '@nestjs/core'
import { join } from 'path'
import { AppModule } from './app.module'
async function bootstrap() {
const app = await NestFactory.create(AppModule)
return app
}
// 注意: 通过注入 NODE_ENV 为 local,来方便本地启动服务,进行开发调试
const isLocal = process.env.NODE_ENV === 'local'
if (isLocal) {
bootstrap().then((app) => {
app.listen(3000, () => {
console.log(`Server start on http://localhost:3000`)
})
})
}
// 导出启动函数,给 sls.js 使用
export { bootstrap }
- 项目根目录下新增
sls.js
文件,用来提供给 Nest.js 组件使用:
// 注意: 根据实际项目入口文件名进行修改,此 demo 为默认情况
const { bootstrap } = require('./dist/main')
module.exports = bootstrap
注意:实际开发可根据个人项目路径,来导出启动函数
bootstrap
。
部署
在项目根目录下创建serverless.yml
文件,填写基本配置:
# severless.yml
component: nestjs # (必填) 组件名称,在该项目中为nestjs.
name: nestjsDemo # (必填) 组件实例名称.
# 组件配置参数,不填写则使用默认配置
inputs:
src:
src: ./
exclude:
- .env
由于 Nest.js 项目是 TypeScript,部署前需要编译成 JavaScript 后再部署:
$ npm run build
$ sls deploy
第一次部署可能耗时相对较久,但后续的二次部署会在几秒钟之内完成。部署完毕后,你可以在命令行的输出中查看到你 nestjs 应用的 URL 地址,点击地址即可访问你的 Nest.js 项目。
注意:
1、如您的账号未 登录 或 注册 腾讯云,您可以直接通过
微信
扫描命令行中的二维码进行授权登陆和注册。2、如果希望查看更多部署过程的信息,可以通过
sls deploy --debug
命令查看部署过程中的实时日志信息,sls
是serverless
命令的缩写。
配置
nestjs 组件支持 0 配置部署,也就是可以直接通过配置文件中的默认值进行部署。但你依然可以修改更多可选配置来进一步开发该 nestjs 项目。
以下是 nestjs 组件的 serverless.yml
简单配置示例:
# serverless.yml
#应用配置
app: appDemo # (可选) 应用名称,默认为与组件实例名称
stage: dev # (可选) 用于开发环境的隔离,默认为 dev
#组件配置
component: nestjs # (必填) 组件名称,在该项目中为nestjs.
name: nestjsDemo # (必填) 组件实例名称.
#组件参数
inputs:
src:
src: ./ # (可选) 代码路径
exclude:
- .env
functionName: nestjsDemo
region: ap-guangzhou
runtime: Nodejs10.15
apigatewayConf:
protocols:
- http
- https
environment: release
点此查看全量配置及配置说明
当你根据该配置文件更新配置字段后,再次运行 serverless deploy
或者 serverless
就可以更新配置到云端。
远程调试云函数
部署了 nestjs.js 应用后,可以通过开发调试能力对该项目进行二次开发,从而开发一个生产应用。在本地修改和更新代码后,不需要每次都运行 serverless deploy
命令来反复部署。你可以直接通过 serverless dev
命令对本地代码的改动进行检测和自动上传。
可以通过在 serverless.yml
文件所在的目录下运行 serverless dev
命令开启开发调试能力。
serverless dev
同时支持实时输出云端日志,每次部署完毕后,对项目进行访问,即可在命令行中实时输出调用日志,便于查看业务情况和排障。
除了实时日志输出之外,针对 Node.js 应用,当前也支持云端调试能力。在开启 serverless dev
命令之后,将会自动监听远端端口,并将函数的超时时间临时配置为 900s。此时你可以通过访问 chrome://inspect/#devices 查找远端的调试路径,并直接对云端代码进行断点等调试。在调试模式结束后,需要再次部署从而将代码更新并将超时时间设置为原来的值。详情参考开发模式和云端调试。
查看
在serverless.yml
文件所在的目录下,通过如下命令查看部署状态:
$ serverless info
移除
在serverless.yml
文件所在的目录下,通过以下命令移除部署的 nestjs 服务。移除后该组件会对应删除云上部署时所创建的所有相关资源。
$ serverless remove
和部署类似,支持通过 sls remove --debug
命令查看移除过程中的实时日志信息,sls
是 serverless
命令的缩写。
账号配置
当前默认支持 CLI 扫描二维码登录,如您希望配置持久的环境变量/秘钥信息,也可以本地创建 .env
文件
$ touch .env # 腾讯云的配置信息
在 .env
文件中配置腾讯云的 SecretId 和 SecretKey 信息并保存
如果没有腾讯云账号,可以在此注册新账号。
如果已有腾讯云账号,可以在API 密钥管理中获取 SecretId
和SecretKey
.
# .env
TENCENT_SECRET_ID=123
TENCENT_SECRET_KEY=123
License
MIT License
Copyright (c) 2020 Tencent Cloud, Inc.