本文主要演示腾讯云无服务器部署Web功能管理Web功能的运行原理如下图所示:用户发送的HTTP请求经过API网关,网关端直接传输原始请求,同时在请求头中添加网关触发函数时需要的函数名、函数域等内容,一起传给函数环境触发执行的后端功能。在功能环境中,通过内置的Proxy实现Nginx转发,去除Header中不规范的请求信息,将原始HTTP请求通过指定端口发送到用户的WebServer服务。用户的WebServer配置指定的监听端口9000和服务启动文件后,部署到云端,通过该端口获取并处理HTTP请求。Web函数请求限制只能通过API网关调用Web函数,不支持通过函数API接口触发。Responseheaders中有如下限制:所有key和value的大小不能超过4KB。正文的大小不应超过6MB。部署web服务时,必须监听指定的9000端口,不能监听内部环回地址127.0.0.1。目前HTTP请求头中的Connection字段不支持自定义配置。启动文件scf_bootstrap的作用是WebServer的启动文件,保证你的Web服务正常启动和监听请求。此外,您还可以根据需要在scf_bootstrap中自定义实现更多个性化操作:设置运行时依赖库的路径和环境变量等加载自定义语言和版本依赖库文件和扩展等如果有还有需要实时拉取的依赖文件,可以下载到/tmp目录下。解析函数文件,执行函数调用前所需的全局操作或初始化程序(如开发包客户端HTTPCLIENT的初始化、数据库连接池的创建等),方便在通话阶段。启动安全、监控等插件。使用前需要可执行权限。请确保你的scf_bootstrap文件有777或755权限,否则会因权限不足而无法执行。能够运行在SCF系统环境(CentOS7.6)。如果启动命令文件是shell脚本,第一行需要#!/bin/bash。启动命令必须是绝对路径/var/lang/${specific_lang}${version}/bin/${specific_lang},否则无法正常调用。有关详细信息,请参阅标准语言环境中的绝对路径。建议使用监听地址为0.0.0.0,不允许使用内部环回地址127.0.0.1。标准语言环境绝对路径很常见。WebServer启动命令模板serverlessfromework和控制台部署serverless文档https://www.serverless.com/cn...1.控制台部署部署koa2管理界面官方demohttps://github.com/tencentyun...仓库关联GitHub,自动更新git代码2.命令行部署-ServerlessFramework云函数和serverless的区别ServerlessFramework是serverless公司推出的一款开源的serverless应用开发框架。ServerlessFramework由ServerlessFrameworkPlugin和ServerlessFrameworkComponents组成。ServerlessFrameworkPlugin其实是一个功能管理工具。使用此工具,您可以轻松部署函数、删除函数、触发函数、查看函数信息、查看函数日志、回滚函数、查看函数数据。一个简单的总结就是serverless其实就是云函数的集合。使用serverless之后,我们创建的云函数不需要手动创建触发器等操作。官方地址serverless官网地址serverless中文官网github地址ServerlessFramework应用场景在哪些场景下我们需要使用serverless代替云函数。其实在实际的开发过程中,我们使用的是serverless,而不是cloudfunctions。毕竟云函数的使用场景是有限的,还是比较基础的。打个简单的比方,在写js操作dom的时候,你会选择使用原生js还是使用jquery一样的比喻。基于云函数的命令行开发工具通过ServerlessFramework,开发者可以在命令行上完成函数的开发、部署和调试。也可以与前端服务、API网关、数据库等其他云资源结合,实现全栈应用的快速部署。传统应用框架的快速迁移ServerlessFramework提供了一套通用的框架迁移解决方案。通过使用ServerlessFramework提供的框架组件(Egg/Koa/Express等,更多框架支持可以参考),原来的应用只需要几行代码,只需简单的修改就可以快速迁移到功能平台。支持命令行和控制台两种开发方式。使用serverless命令创建第一个应用全局安装命令npminstall-gserverlessserverless-v创建项目在电脑空目录下运行命令serverless根据提示选择你要创建的模板在控制台输入serverless选择对应的模板部署上线serverlessdeployserverless.yml配置详情https://github.com/serverless...部署上线后,可以在这里查看你的项目测试部署的项目删除部署的项目3.配置插件-insinvscode开发serverless在vscode上安装插件vscode安装完成后,插件登录拉取应用。关于登录账号和密钥,查看远程拉取代码的地址。如果要上传下载的代码,也可以直接上传。创建一个云函数来练习无服务器部署。对于前端项目,推荐使用ServerlessFrameworkCLI。快速部署本地云功能使用命令生成vue项目文件,将代码直接推送到云端也许你会好奇,我们正常的vue项目部署必须先npmrunbuild,然后将打包好的dist目录传到服务器上的nginx中静态目录,以便您可以访问它。注意前端项目部署存放在oss中。serverless生成的项目默认是vue2版本。如果要部署vue3项目,需要手动构建#serverless.yml文件component:websitename:vue-starterapp:vue-demo-70a4c710inputs:src:src:./src#配置这个hook时,会每次发布都要先构建hook:npmrunbuilddist:./distbucketName:my-vue-starterprotocol:httpsmanual构建vue3项目参考文档使用脚手架创建vue3项目初始化一个serverless.yml文件serverlessinitwebsite-starter--nameexample把这个serverless.yml文件复制到vue3项目中,简单修改component:websitename:websiteDemoapp:vue3-demo-6cb9842ainputs:src:src:./srchook:npmrunbuilddist:./distregion:ap-guangzhoubucketName:my-website-starterprotocol:httpsdeployonlineserverlessdeploymanuallydeployreactproject手动创建一个reactprojectnpxcreate-react-appreact-demo--templatetypescript在react组件根目录下创建serverless.yml文件:website#此处修改名称:react-starter#此处修改app:reactDemoinputs:src:src:./srchook:npmrunbuild#这个根据你打包的目录dist:./build#这个定义bucketName:my-react-starter协议:https推送到云端serverlessdeploy使用静态文件托管来部署前端项目首先本地化项目命令被打包。在云产品中选择静态文件托管,直接上传你打包好的代码。准备在serverless中连接mysql数据库。使用serverless开发不同于我们自己的云服务器服务器ECS,因为我们不能在serverless上安装软件(不能安装第三方的mysql、docker、redis)等软件,所以我们在使用serverless开发的时候,如果使用这样的东西如:我们项目中的mysql、redis、rabbitMQ、RocketMQ,需要自己解决。有几种方法可以获得备用的云服务器ECS。我们在上面安装了需要的软件,对外提供了IP或者域名,在安全组中开放了端口号,供我们在serverless中使用。事实上,如果你有自己的云服务器ECS,你可能不会考虑使用serverless开发一个使用第三方支付或者按量付费的数据库。例如:阿里云的云数据库RDSMySQL腾讯云的数据库云数据库使用腾讯云官方自有NoSQL数据库参考文档,有免费额度。本次训练营会介绍如何使用,但不会在项目中使用。我在自己的服务器上使用docker搭建了一个mysql8版本的数据库供大家学习使用,并根据自己的名字在上面创建了自己的数据库。您自己保存地址。如果你有服务器,你可以在自己的服务器上构建它。你不需要使用我的#ip地址8.129.234.99#用户名root#密码123456在serverless中连接mysql。本案例只是为了测试官方案例连接数据库。不涉及任何知识点,可以根据自己的情况选择是否跳过函数服务中选择mysql数据库模板创建数据库云函数应用。注意选择的语音和地区在自己的数据库中创建数据库和数据表--创建数据表sqlCREATETABLE`account`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'主键id',`username`varchar(50)NOTNULLCOMMENT'username',`password`varchar(100)NOTNULLCOMMENT'password',`created_at`timestamp(6)NOTNULLDEFAULTCURRENT_TIMESTAMP(6)COMMENT'createdtime',`updated_at`timestamp(6)NOTNULLDEFAULTCURRENT_TIMESTAMP(6)ONUPDATECURRENT_TIMESTAMP(6)COMMENT'updatedtime',`deleted_at`timestamp(6)NULLDEFAULTNULLCOMMENT'软删除时间',PRIMARYKEY(`id`))ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;--插入几条数据sqinsertintoaccount(username,password)values('admin','123456');insertintoaccount(username,password)values('张三','123456');打开云函数代码管理修改数据库的连接配置进入代码编辑界面的函数代码编辑代码functionwrapPromise(connection,sql){returnnewPromise((res,rej)=>{connection.query(sql,function(error,results,fields){if(error){rej(error)}res(results)})})}出口。main_handler=异步(事件,上下文,callback)=>{constmysql=require('mysql');constconnection=mysql.createConnection({host:'8.129.234.99',//云数据库实例ip地址user:'root',//云数据库用户名,如rootpassword:'123456',//云数据库密码database:'serverless_nest'//数据库名称});连接.connect();//需要查询的sql文件constquerySql=`SELECT*fromaccount`//查询结果letqueryResult=awaitwrapPromise(connection,querySql)connection.end();returnqueryResult}修改后,点击deployandtest,出现如下界面,说明你已经成功连接到云函数中的mysql。测试访问,可以点击触发管理云开发与serverless的区别ServerlessFramework是一种serverless应用框架,它提供了一个结合了云函数SCF、API网关、对象存储COS、云数据库DB等资源的业务框架。开发者可以直接基于框架编写业务逻辑,无需关注底层资源的配置和管理。云开发(TencentCloudBase,TCB)是腾讯云提供的云原生集成开发环境和工具平台,为开发者提供高可用、自动弹性伸缩的后端云服务,包括计算、存储、托管等Serverless能力,可用于云端各种端应用(小程序、公众号、Web应用、Flutter客户端等)的集成开发,帮助开发者统一构建和管理后端服务和云资源,避免繁琐的服务器应用开发过程中的构建和运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。两者最大的区别在于对开发者的平台支持不同。云开发支持web、QQ、微信小程序级静态网站托管等平台服务。使用云开发创建嵌套项目。在产品中选择云开发产品创建项目。注意:这里需要选择好区域。下次创建项目时,区域不同,项目可能不可见。使用模板创建应用程序以供自己查看。并访问脚手架包官方地址创建全局安装使用脚手架npmi-g@cloudbase/cli测试是否安装成功cloudbase-vlogincloudbaselogincreateaprojectlocallytcbnew
