一、关于云函数的介绍
腾讯云云函数(Serverless Cloud Function,SCF)是腾讯云为企业和开发者们提供的无服务器执行环境,帮助您在无需购买和管理服务器的情况下运行代码, 是实时文件处理和数据处理等场景下理想的计算平台。 您只需使用 SCF 平台支持的语言编写核心代码并设置代码运行的条件,即可在腾讯云基础设施上弹性、安全地运行代码。
简单点概述就是以下几点
- 不需要自己单独购买服务器,节省开支
- 不需要你专门的运维人员,为企业节省开支
- 自动扩容,不用但是访问量大服务器不够用
- 根据访问量收费,降低企业服务器成本
- 开发人员专注写业务代码,不需要花太多时间去学习运维知识
二、腾讯云上注册账号及创建环境
- 1、腾讯云注册自己的账号并且选择云开发产品
- 2、选择新建
nestjs
应用
三、客户端使用脚手架创建项目
-
1、安装
cloudbase/cli
npm i -g @cloudbase/cli
-
2、测试安装是否成功
cloudbase -v
-
3、
登录云开发
cloudbase login
-
4、本地创建项目
tcb new <appName> [template] # 比如 tcb new nest_test nest-starter
-
5、根据区来创建
选择自己已经创建的环境,如果没有就 创建新环境,这时候会打开浏览器
-
6、构建出来的项目和自己用
nestjs-cli
构建出来的没什么区别,会nestjs
开发的就可以无障碍的过度到云函数开发
四、在nestjs
元函数中连接数据库,对数据的操作
-
1、关于
nestjs
基础使用可以参考我github上一个项目,这套rbac
权限系统管理的,我相信好好研读可以带你入门nestjs
到项目开发,这里就不去介绍如何使用nestjs
开发了。 -
2、关于腾讯云函数中使用数据库的说明
目前各个厂商的云函数编程都是支持
NoSql
型的数据库,我们可以叫文档型数据库,大多数是采用mongodb
数据库,对于传统(SQL
)的关系型数据库MySQL
支持不是很友好,都要单独配置甚至要付费操作在腾讯云函数编程中使用
MySQL
数据库要自行购买
-
3、在腾讯云控制面板上创建数据库
注意上面的区域和当前元开发的环境,目前腾讯元函数开发使用的方式是用(区域+环境 = 数据库),新建集合就相当于新建表
-
4、在项目中安装连接数据库的
SDK
npm install @cloudbase/node-sdk
-
5、简单的在
nestjs
d服务层连接数据库import cloudbase from '@cloudbase/node-sdk'; // 注意以下几个参数是必填的,文档上说的是非必填 const app = cloudbase.init({ secretId: 'xx', secretKey: 'yy', env: 'xx', // 根据你创建的区域来写,目前只有上海(ap-shanghai)、广州(ap-guangzhou) region: 'ap-shanghai' }) // 1. 获取数据库引用 const db = app.database();
-
关于初始化函数的参数参考地址
-
关于
secretId
和secretKey
的获取方式需要创建一个子用户
-
env
是指当前你用的环境ID
-
-
6、基本的数据库操作参考文档
// 简单的举例 async updateUser(data:any) { const {id, age, books} = data; return await db.collection('nest-collection') .doc(id) .update({ age: _.inc(2), books: _.push(...books) }) }
五、项目部署
目前云函数部署有两种方式
-
1、本地通过命令方式部署
查看
package.json
文件有一个命令... "scripts": { ... "deploy": "cloudbase framework deploy", } ...
直接运行命令,就可以部署项目
npm run deploy
-
2、在腾讯云控制面板上部署
-
3、两种方式部署的比较
- 使用命令方式部署优势在于方便,可以一条命令执行部署操作,改完代码直接就可以进行部署,当然还有个好处就是,有很多模板,可以不用写
dockfile
直接部署 - 使用控制面板部署,一般人都可以操作,比较傻瓜式
- 使用命令方式部署优势在于方便,可以一条命令执行部署操作,改完代码直接就可以进行部署,当然还有个好处就是,有很多模板,可以不用写
关于项目代码托管
几点说明
- 目前只支持公开仓库的代码,不支持私有仓库的,未来可能会支持私有仓库来部署
- 需要手动修改远程分支,不能自动获取远程仓库分支
- 目前云函数还不支持环境变量,这也意味着你数据库信息会暴露出去
六、修改域名
-
1、前提是你有自己的有效域名,可以创建子域名可以参考我之前的文章
-
2、创建应用后系统会默认生成一个访问的
url
地址,这个一大坨的url
地址,我相信你也不喜欢 -
3、在腾讯云控制面板配置自己的域名
-
4、注意解析子域名的方式和上面博客写的有点区别,不是填写自己的
IP
是将腾讯云默认域名复制到里面去
-
5、用自己的域名访问项目
七、关于本人对目前云函数开发的反思
- 目前技术还不算成熟,适合自己去了解和玩玩,真正的企业项目有点不适合,主要存在以下几个点
- 厂商依赖太强,如果你现在选择了腾讯云的,未来切换阿里云,华为云的就很多不方便,有点选择一家这个项目一辈子就要这家公司的服务了
- 配套设施还不完善,比如你想要用
MySQL
你要自己去开通服务,要收取费用的,对于redis
和rabbitmq
等这类产品更加是没有做到按访问量收费,意味着你就要自己去购买对应的服务,随便买一个一年的费用也要3000多元,对于小型企业来说一台云服务器ECS
一年的费用也大概就是这个价格 - 可供选择的环境应用模板有限
- 项目中敏感信息比如数据库账号和密码,支付类的密钥,不能添加到环境中。文档上有介绍使用
.env
的那也是在云托管的时候使用 - 代码仓库是公开,不能使用私有仓库,私有仓库目前是云托管支持
- 虽然有很多的不足,但是我们可以尝试用下,对于不是企业级的项目,可以玩玩无所谓,暴露出去的东西可以重置,特别是对于学生党来说是一个很好的选择,自己做作业,或者毕业设计来说,不需要买服务器直接使用云函数就提供接口,还可以使用静态页面托管静态文件
- 未来我相信云函数会越来越完善,周边配套设施也会更加完善,开发人员只负责业务开发,不需要关系如何部署,企业也不需要专业的运维人员。