参考文档
https://github.com/serverless-components/tencent-express
安装
- 通过 npm 安装最新版本的 Serverless Framework
$ npm install -g serverless
创建
- 通过如下命令和模板链接,快速创建一个 Express 应用:
$ serverless init express-starter --name example $ cd example
部署
- 在 serverless.yml 文件所在的项目根目录,运行以下指令进行部署:
部署时需要进行身份验证,如您的账号未 登陆 或 注册 腾讯云,您可以直接通过 微信 扫描命令行中的二维码进行授权登陆和注册。$ serverless deploy
注意: 如果希望查看更多部署过程的信息,可以通过serverless deploy --debug 命令查看部署过程中的实时日志信息
- 如果使用上述命令部署的时候发现一直处于等待状态没有反应的话,可以使用配置文件【.env】
在 .env 文件中配置腾讯云的 SecretId 和 SecretKey 信息并保存$ touch .env # 腾讯云的配置信息
在API 密匙管理中获取SecretId
和SecretKey
# .env TENCENT_SECRET_ID=123 TENCENT_SECRET_KEY=123
配置
- Express 组件支持 0 配置部署,也就是可以直接通过配置文件中的默认值进行部署。但你依然可以修改更多可选配置来进一步开发该 Express 项目
- 以下是 Express 组件的 serverless.yml配置示例
# serverless.yml component: express # (required) name of the component. In that case, it's express. name: expressDemo # (required) name of your express component instance. org: orgDemo # (optional) serverless dashboard org. default is the first org you created during signup. app: appDemo # (optional) serverless dashboard app. default is the same as the name property. stage: dev # (optional) serverless dashboard stage. default is dev. inputs: src: src: ./ # (optional) path to the source folder. default is a hello world app. exclude: - .env functionName: expressDemo region: ap-guangzhou runtime: Nodejs10.15 apigatewayConf: protocols: - http - https environment: release
- 点此查看全量配置及配置说明
- 当你根据该配置文件更新配置字段后,再次运行
serverless deploy
或者serverless
就可以更新配置到云端
打开链接
查看状态
serverless info
移除
- 移除部署的 Express 服务。移除后该组件会对应删除云上部署时所创建的所有相关资源。
$ serverless remove
架构说明
Express 组件将在腾讯云账户中使用到如下 Serverless 服务:
- API 网关 - API 网关将会接收外部请求并且转发到 SCF 云函数中。
- SCF 云函数 - 云函数将承载 Express.js 应用。
- CAM 访问控制 - 该组件会创建默认 CAM 角色用于授权访问关联资源。
- COS 对象存储 - 为确保上传速度和质量,云函数压缩并上传代码时,会默认将代码包存储在特定命名的 COS 桶中。
- SSL 证书服务 - 如果你在 yaml 文件中配置了 apigatewayConf.customDomains 字段,需要做自定义域名绑定并开启 HTTPS 时,也会用到证书管理服务和域名服务。Serverless Framework 会根据已经备案的域名自动申请并配置 SSL 证书。
静态资源服务
- 如果想要支持返回静态资源,比如图片之类的,需要在入口文件 sls.js 中指定相关 MIME 类型的文件为二进制,这样云函数在返回请求结果给 API 网关是,会对指定类型进行 Base64 编码,最终返回给客户端才能正常显示。如下:
const express = require('express') const app = express() // Routes // ... app.binaryTypes = ['*/*'] module.exports = app
- [’/’] 代表所有文件类型将进行 Base64 编码,如果需要定制化,可以配置为 [‘image/png’],意思是指定 png 格式的图片类型。
slsInitialize 应用初始化
- 有些时候,Express 服务在启动前,需要进行一个初始化操作,比如数据库建连,就可以通过在 Express 实例对象上添加 slsInitialize 函数来实现,如下:
const express = require('express') const mysql = require('mysql2/promise') const app = new express() // ... app.slsInitialize = async () => { app.db = await mysql.createConnection({ host: 'localhost', user: 'root', database: 'test' }) } // don't forget to export! module.exports = app
- 这样应用部署到云函数后,在函数服务逻辑执行前,会先执行 slsInitialize() 函数,来初始化数据库连接。