Serverless部署应用并使用Cloudflare加速和支持HTTPS

小霞
• 阅读 2214

Serverless

Serverless 是一种云计算模型,它使开发人员能够构建和运行应用程序,而无需关心底层的服务器基础设施。在传统的应用程序开发中,开发人员需要管理服务器的配置、扩展和维护等任务。而在 Serverless 模型中,这些任务都由云服务提供商来处理,开发人员只需专注于编写应用程序的业务逻辑。

Serverless 模型适用于许多应用场景,如 Web 应用程序、移动后端、数据处理和物联网等。常见的 Serverless 平台包括:
国外:AWS Lambda、Azure Functions 和 Google Cloud Functions等
国内:阿里云的函数计算 FC,腾讯云的云函数

本文以阿里云的函数计算FC为例(阿里云每个月有免费的额度)

Cloudflare

Cloudflare 是一家提供云计算和网络安全服务的公司。它提供了一系列的网络基础设施和安全功能,帮助网站和应用程序提供更快的加载速度、增强的安全性和高可靠性。

Cloudflare 的核心服务包括:CDN(内容分发网络),DDOS 保护,Web 应用程序防火墙(WAF),DNS服务,TLS 加密和边缘计算等。

本文需要使用到其中的DNS服务TLS加密服务

应用准备

首先要准备好应用的部署文件,云服务厂商一般支持通过文件上传和容器镜像的方式进行部署。
如果是文件上传的方式部署,还需要选择运行环境,不同厂商支持的运行环境有所不同,需要提前了解好。
而镜像的方式就比较简单,只需要提供打包好的镜像即可。
所以个人推荐使用镜像的方式,这样可以拥有对运行环境完整的控制权,也方便版本管理。

本文接下来也将以镜像方式部署举例,其中镜像为已开源的一个微信聊天机器人项目

上传镜像到服务商平台

一般情况下需要把镜像文件上传到服务商平台以后才能进行版本管理和部署,或者通过服务商平台关联源码进行镜像打包,不同厂商可能有不同的策略,我这里选择的是在本地打包以后上传到平台的方式。

阿里云需要先在【容器镜像服务】里面开通个人版,然后【创建镜像仓库】以后根据操作指南执行即可
Serverless部署应用并使用Cloudflare加速和支持HTTPS

上传完以后可以点击左侧的【镜像版本】查看镜像版本列表
Serverless部署应用并使用Cloudflare加速和支持HTTPS

创建云函数

阿里云的云函数是挂在服务下的,所以需要先创建服务,然后再创建函数。
创建函数的时候选择【使用容器镜像创建】,请求处理程序类型选择【处理 HTTP 请求】,容器镜像泽点击下面的【选择 ACR 中的镜像】找到选择自己上传的仓库版本即可
Serverless部署应用并使用Cloudflare加速和支持HTTPS

后面还有【监听端口】不要忘记配置,接下来就是一些资源和环境变量相关的配置,可以根据自己的需要选择配置
Serverless部署应用并使用Cloudflare加速和支持HTTPS

最后是触发器配置,特别是请求方法记得要把应用内所声明过的类型都配上
Serverless部署应用并使用Cloudflare加速和支持HTTPS

最后点击【创建】即可完成函数的创建

验证云函数

云函数创建成功以后,回到函数列表,点击函数名称即可查看详情
Serverless部署应用并使用Cloudflare加速和支持HTTPS

切换到【测试函数】功能项,通过配置请求方式和路径即可向函数发起请求,如果函数能够如预期内响应,则表示函数已经部署成功

Serverless部署应用并使用Cloudflare加速和支持HTTPS

再切换到【触发器管理(URL)】功能项,可以看到该函数已经拥有了一个外网可以访问的域名,通过该域名也可以验证函数部署是否成功,需要注意的是,该域名如果通过浏览器访问,则所有返回内容都会通过下载的方式响应,这主要是因为国内提供网页服务是需要备案的。
Serverless部署应用并使用Cloudflare加速和支持HTTPS

自定义域名

完成上面的步骤以后,你就得到了一个可以通过后台提供服务的云函数了,像我这个微信机器人项目就是一个纯后台项目,所以是可以直接使用云函数提供的域名配置到微信公众号后台使用的。但是如果部署的是一个前台服务,那就必须要配置一个自定义的域名才能正常使用,下面就分别介绍一下自定义域名的两种情况。

使用阿里云已经备案的域名

如果你已经有一个在阿里云备案过的域名,那么可以在【函数计算 FC】功能首页找到【域名管理】功能
Serverless部署应用并使用Cloudflare加速和支持HTTPS

通过点击【添加自定义域名】,进入配置页面
设置好自定义的域名并在域名解析控制台配置好相应的CNAME
HTTPS需要购买证书,或者手动上传(有的话可以选择)
CDN加速是要单独收费的,所以这里选择禁用
最后设置路由配置到部署好的服务函数即可
Serverless部署应用并使用Cloudflare加速和支持HTTPS

没有已备案的域名

如果没有在阿里云已经备案的域名,则可以考虑把函数部署在海外服务节点,细心的读者可能已经发现了,我就是用的这种方式,上面的服务函数其实是部署在新加坡的,通过海外的节点提供服务就不需要提供的域名是备案过的,添加步骤跟上面备案的域名是一样的,只是在创建的时候少了域名备案校验这一步

配置完成以后,可以通过自定义域名访问验证函数资源

CDN加速和HTTPS

前面我们在配置自定义域名的时候就发现CDN加速HTTPS这两个都被设计为单独的收费项目了,但是我们可以使用Cloudflare免费使用这两项功能。

登录Cloudflare,选择【添加站点】,输入自己的域名添加
Serverless部署应用并使用Cloudflare加速和支持HTTPS

计划选择最下面的Free
Serverless部署应用并使用Cloudflare加速和支持HTTPS

继续按照步骤,登录到域名的服务商,把对应的DNS服务器改为Cloudflare的DNS服务器地址
还是以阿里云为例,在域名管理里面的【DNS管理】->【DNS修改】界面选择修改DNS服务器,两个都要改成Cloudflare的
Serverless部署应用并使用Cloudflare加速和支持HTTPS

完成以后在首页能看到添加的域名为有效即为设置成功
Serverless部署应用并使用Cloudflare加速和支持HTTPS

点击域名进入配置页面,选择左侧的【DNS】,把之前配置的云函数的CNAME在这里重新配置一遍

Serverless部署应用并使用Cloudflare加速和支持HTTPS

再点击左侧的【SSL/TLS】,勾选【完全】

Serverless部署应用并使用Cloudflare加速和支持HTTPS

至此,再次通过自定义域名访问验证,能够通过https访问并正常显示资源即表示成功

Serverless部署应用并使用Cloudflare加速和支持HTTPS

PS:Cloudflare自带免费的CDN加速功能,还有其他免费的功能可以自行研究

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Wesley13 Wesley13
3年前
FLV文件格式
1.        FLV文件对齐方式FLV文件以大端对齐方式存放多字节整型。如存放数字无符号16位的数字300(0x012C),那么在FLV文件中存放的顺序是:|0x01|0x2C|。如果是无符号32位数字300(0x0000012C),那么在FLV文件中的存放顺序是:|0x00|0x00|0x00|0x01|0x2C。2.  
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这