部署 Express 应用到 Serverless

参考文档

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】
    $ touch .env # 腾讯云的配置信息
    
    在 .env 文件中配置腾讯云的 SecretId 和 SecretKey 信息并保存
    API 密匙管理中获取SecretIdSecretKey
    # .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() 函数,来初始化数据库连接。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值