serverless 入门 腾讯云serverless

什么是Serverless

要说Serverless是什么,直译过来就是无服务器。根据 CNCF 的定义,Serverless 是指构建和运行不需要服务器管理的应用程序的概念。

CloudFlare对其定义:

无服务器计算是一种按需提供后端服务的方法。无服务器提供程序允许用户编写和部署代码,而不必担心底层基础结构。从无服务器供应商处获得后端服务的公司将根据其计算费用,而不必保留和支付固定数量的带宽或服务器数量,因为该服务是自动扩展的。请注意,尽管称为无服务器,但仍使用物理服务器,但开发人员无需了解它们。

运维的三个阶段:

物理服务器

云服务器

无服务器(serverless)

serverless是否是下一代云计算?

优点:轻运维、低成本、弹性伸缩,按量付费

缺点:需要使用云服务商的配套服务、冷启动

实践:部署一个Vue+Egg+PostgreSql的serverless应用

1.首先需要在腾讯云注册账号

2.安装serverless framework

为了部署完整的项目,我们这里不单讨论云函数,直接使用serverless框架

npm install -g serverless
  • 这里主要参考了最佳实践fullstack-app,为了更好的了解各个组件的配置运行机制,这里将每个组件拆分进行部署

3.部署私有网络VPC

私有网络VPC可以串联各项云服务,可以使后端服务和数据库在同一私网内,使之能够连接数据库

mkdir vpc; cd vpc
touch serverless.yaml

serverless.yaml是serverless framework的配置文件

大致结构为

公共部分,例如component、name等字段

inputs:部署组件需要的字段

outputs: 部署成功后的输出字段

VPC完整配置

component: vpc # (必填) 组件名称,此处为 vpc
name: serverless-vpc # (必填) 实例名称

inputs:
  region: ${env:REGION} # VPC 的所属地区
  zone: ${env:ZONE} # VPC 所在地区的区域
  vpcName: ${name} # VPC 的名称
  subnetName: ${name} # Subnet 的名称

部署

serverless deploy

校验身份,使用腾讯云关联的微信号扫码


image-20201229173227777.png

部署成功后可在https://serverless.cloud.tencent.com/查看部署成功的组件

4.部署PostgreSql数据库

至于为什么不使用mysql,因为腾讯云现在只有pgsql推出了serverless版本

mkdir db; cd db
touch serverless.yaml

postgreSql完整配置

component: postgresql #(必填) 引用 component 的名称,当前用到的是 postgresql 组件
name: serverless-db # (必填) 该 postgresql 组件创建的实例名称

inputs:
  region: ${env:REGION}
  zone: ${env:ZONE}
  dBInstanceName: ${name} # 数据库实例名称,对一用户必须唯一
  vpcConfig:
    vpcId: vpc-xxx # VPC 的 ID 这里填写刚部署好的VPC的outputs.vpcId(见下图)
    subnetId: subnet-xxx # Subnet 的 ID 这里填写刚部署好的VPC的outputs.subnetId
  extranetAccess: true # 是否开启 serverlessDB 实例外网访问

https://serverless.cloud.tencent.com/apps/serverless-vpc/serverless-vpc/dev

image-20201230115026150.png

部署

serverless deploy

校验身份,使用腾讯云关联的微信号扫码

部署成功后可在https://serverless.cloud.tencent.com/查看部署成功的组件

  • 使用navicat连接

    填写https://serverless.cloud.tencent.com/apps/serverless-db/serverless-db/dev中outputs.public外网访问信息

image-20201230135759928.png

5.部署后端Eggjs

后端api使用的是egg.js + sequelize,这里可以使用现成的案例

git clone https://gitee.com/logicadi/serverless-egg.git

修改serverless.yaml配置 查看全量配置

component: egg
name: serverless-api

inputs:
  src:
    src: ./
    exclude: # 被排除的文件或目录
      - .env
      - node_modules
  functionName: ${name}
  region: ${env:REGION}
  runtime: Nodejs10.15
  functionConf: # 函数配置相关
    timeout: 30
    vpcConfig:
      vpcId: vpc-xxx # VPC 的 ID 这里填写刚部署好的VPC的outputs.vpcId
      subnetId: subnet-xxx # Subnet 的 ID 这里填写刚部署好的VPC的outputs.subnetId
    environment: # 环境变量
      variables:
        PG_CONNECT_STRING: postgresql://xxx # 这里填写刚部署的db outputs.private.connectionString
  apigatewayConf: # api网关配置
    enableCORS: true
    protocols:
      - http
      - https

部署

serverless deploy

从面板点击链接打开api首页,发现报错,是因为没有安装依赖

node_modules文件夹常常会导致上传不上去,所以在这里需要排除,可以使用两种方法处理:

  1. 使用层管理
  2. 在线安装依赖

这里使用方法2,登录腾讯云。开启自动安装依赖,再点部署

image-20201230180948364.png

部署完成后再打开api首页就可以了

image-20201231090444409.png
  • 初始化数据库
// 本地安装依赖
npm install

使用sequelize初始化数据库

// database/config.json
{
  "development": {
    "url": "postgresql://xxx",// 填写db外网地址 db outputs.public.connectionString
    "dialect": "postgres"
  }
}

执行数据库脚本

# 升级数据库
npx sequelize db:migrate
# 如果有问题需要回滚,可以通过 `db:migrate:undo` 回退一个变更
# npx sequelize db:migrate:undo
# 可以通过 `db:migrate:undo:all` 回退到初始状态
# npx sequelize db:migrate:undo:all
image-20201231161316854.png

表已建好

image-20201231161346992.png

6.部署前端Vue

推荐使用现有模板。前端静态文件是使用的对象存储COS部署

git clone https://gitee.com/logicadi/serverless-vue.git

website组件配置 全量配置

component: website
name: serverless-vue

inputs:
  region: ${env:REGION}
  bucketName: ${name} # COS Bucket 名称。 不允许大写字母。如果你不加 AppId 后缀,则默认自动会为你加上。
  src:
    src: ./
    hook: npm run build # 钩子脚本。在你项目代码上传之前执行。
    dist: ./dist
    envPath: ./
    index: index.html # 网站 index 页面
    error: index.html
  env: # 配置前端环境变量
    apiUrl: https://xxx # 这里填写后端api地址
// 部署
serverless deploy

打开页面,可操作相应的user增删改查


image.png

参考链接

腾讯云serverless控制台

腾讯云serverless framework文档

部署 Vue + Express + PostgreSQL 全栈网站

你可能感兴趣的:(serverless 入门 腾讯云serverless)