版本
预览、发布与上架版的区别 更新时间:2023-11-15 09:27:04预览版、发布版和上架版的区别详解
在这一节中,我们将详细介绍一下预览、测试发布与上架版本的区别。
首先,用一句话来概括:一个应用的预览版和发布版,存在代码层面与运行环境层面的区别,两者只是看起来一样但并不是同一个应用。因此,我们需要使用测试发布版,来最终确定对外的投放版本。而测试发布版和正式上架版,则在各个层面上完全一致,只是URL不一致而已。测试发布和上架,仅是一个URL绑定的过程,这个过程,我们在上一节中已经详细介绍了。因此,除了测试发布版的地址多了一个?version=N的参数,其他和正式上架版是完全一致的。
接下来,我们来介绍一下预览版和发布版的区别(这里我们就用发布版来统一指代测试发布与正式上架版本了)。
1、前端代码的区别
iVX预览版,前端代码使用解析模式,即我们有一个统一的代码解析器,将我们编辑的应用的逻辑文件,进行实时的解析。这样做的好处是我们可以实时的预览我们的项目,不需要改一点点东西,都要每都等大几十秒去编译。但由于每次都要实时解析,在运行效率上来说会有一些消耗,且代码解析器,由于要支持平台的各种组件功能,本身的js文件大小也会比较大,造成不必要的加载时长与CDN流量消耗。
因此,在iVX中,我们在应用发布时,会对预览版进行编译,将我们在编辑器里设置的所有逻辑,编译成原生的基于react框架的代码。这样,我们最终发布的应用在运行时,和程序员用JS直接写的代码,编译之后是完全一致的。这样就保证了我们的应用在前端运行的效率。
相反,在iH5中,预览和发布版,是完全一致的,都是使用的解析模式,发布只是将预览版复制了一份而已。因此,从前端代码的运行效率上来说,iVX相比iH5会有一个明显的提升。同时,由于全平台的代码解析器,都是实时从后台获取的,因此,在iH5中,如果由于编辑器的更新导致某个功能出现问题,那发布版的案例,也会同样出现问题。但iVX中,不存在这个隐患,即使平台更新把某个功能改坏了,或者某些逻辑改了,由于我们发布版的前端代码是编译好的版本,不依赖于平台的通用解析器,因此解析器的更新不会影响到线上的发布版版本。
2、后台运行环境/数据库的区别
iVX中,我们进一步按企业级开发的需求,将应用的开发环境(即预览环境)与生产环境(即发布环境)严格分离。这样做主要保证线上发布应用的安全,不会由于预览环境中的问题而影响到投放中的应用。同时,由于发布环境中的应用有更多的访问,我们的后台系统在发布环境也有更高的配置,以及更严格的运行环境检查。
同时,除了服务器运行环境,iVX中的数据库,也是严格分离预览版与发布版。简单来说,我们在编辑器里看到的预览版与发布版数据库,其物理上是部署在两套数据库系统中的,他们完全是两个相互独立的表。每次发布时,我们都会将预览版的数据结构(即我们的字段的定义)同步到发布版,但不会将数据进行同步。这样,我们可以任意修改预览版的数据,用于进行各种测试,而不会影响到我们线上发布版本的行为。
当我们新建一个数据库时,系统只会新建预览表,因此,当我们点击发布版数据表时,会提示表不存在。一旦发布,发布版的表就会自动创建了。但除非我们手动同步预览版数据,发布版的表刚刚创建时,里面是没有任何数据的。因此,如果我们在前端请求数据库输出的话,预览版有数据,发布版就经常会没有数据。这个不是bug,而是因为我们的发布版表当时就是没有数据而已。
注意,预览版和发布版数据库的区别,除了体现在表的字段定义,以及数据上以外,还体现在数据库的配置。即我们在数据库属性面板里设置的各种信息:包括数据库提交限制,安全保护等等:
所有这些配置,我们设置的时候,也是仅对预览表有效,需要发布之后,才会对发布表有效。
3、后台其他配置区别
除了数据库,我们的应用可能还涉及一些其他的配置:
这些配置和数据库的配置一样,也区分预览和发布版。举个例子,我们在配置界面中设置了: 仅允许在微信中打开。那这个时候,pc预览案例,就无法打开了。但案例保存之后,之前已经发布的版本,依然可以在微信中打开,必须重新发布,才会将这个配置更新到发布版后台。
4、其他区别
除了以上两点前端后台的区别,预览和发布版由于其场景不同,还有以下区别:
- 预览版所有的后台请求,都是不加密的,我们可以直接在控制台network里面看到我们传的参数,以及后台返回的参数,而发布版,为了安全起见,所有请求是加密的,因此我们无法直接在控制台进行服务的调试;
- 发布版会嵌入统计服务,预览版没有;
数据
web应用发布上架流程详解 更新时间:2023-11-15 09:27:13概述
在这一篇中,我们来详细介绍一下一个web类应用发布上架的详细流程。包括发布界面的操作,发布时后台的的流程,以及各种发布的注意事项。通过这边文档,我们希望大家可以深入了解ivx中将应用发布为web的底层原理,以更好的对线上的项目进行运维,并节省不必要的上架审核的等待时间与费用。
发布的界面操作流程
无论我们创建的是哪一种应用类型,在发布的选项中,都有一个“发布为web”的选项:
点击发布之后,会出现发布配置界面,我们在下一篇文档中会详细介绍配置界面的详情,在这里,我们暂且使用默认配置,直接点击下一步,确认发布之后,经过后台的发布流程,会出现这个成功提示:
点击“确定”,会直接打开测试发布版本的播放地址:
注意,以上的测试发布地址,有一个URL参数,”?version=1”, 即版本号1, 每次发布,这个版本号会自增,比如,我们再次发布一下之前的案例,这个测试发布的地址会变成:
每个测试发布的版本访问时按云服务收费标准根据实际使用量扣费,不限制播放次数,但不建议作为正式分享/投放的地址使用。
应用上架原理
测试发布完成后,我们可以去工作台进行上架。在介绍工作台界面操作之前,我们先来了解一下上架的原理。
上架的过程,本质上就是将应用正式的地址,“绑定”至某个测试发布地址的过程。假设,我们的案例曾经测试发布过3次,因此一共产生了3个测试版本,他们的地址分别是:
- 版本1:https://xxxxx/J6ZMJfKY?version =1
- 版本2:https://xxxxx/J6ZMJfKY?version =2
- 版本3:https://xxxxx/J6ZMJfKY?version =3
现在,我们希望正式上架这个应用,让其他所有人都可以访问到版本3,那上架的过程,其实就是把我们案例的正式地址(即不带version)的地址,绑定至版本3:
完成这个绑定过程之后,我们打开正式地址的效果,和打开版本3地址的效果,就是完全一样了,因为他们本质上都是版本3。正式地址作为生产地址,访问按云服务收费标准根据实际使用量扣费。
假设我们不作任何绑定,(即不上架),直接访问不带version的地址,会出现这个提示:
原因是因为此时正式地址,没有绑定任何版本,因此其本质上是一个“空地址”。同样道理,当我们将某个已经上架的应用,进行“下架”操作,那同样会取消正式地址和任何发布版本的绑定,导致应用无法访问。
应用上架流程
接下来,我们来介绍一下工作台上应用上架的流程:
无论是个人账号还是企业账号,都需要在工作台进行上架:
点击上架之后,登记应用信息确认后,即可上架。针对已经上架的应用,如果我们再次修改案例,并发布,此时,并不会改变正式地址的内容,因为正式地址,依然绑定之前上架的版本号。因此,如果我们要更新正式版本,则需要更新版本。比如,针对一个已经上架的应用,工作台的“上架”按钮,会变成“更新上架版本”
针对个人账号,点击这个“更新上架版本”后,会自动将最新的发布版本,更新为正式版本。针对企业账号,还额外增加了一个版本管理的列表:
我们可以选择历史列表中任意一个版本进行上架。这样,即使我们不小心改坏了某个功能,也可以随时回退至之前正常的版本。
如何保障已上线应用的安全运行
以上,我们已经基本了解了iVX中web类应用发布流程和原理。在这一节中,我们将根据各种用户的反馈,总结前人“血泪史”,来介绍一下在发布时可能踩到的“坑”,确保我们正在线上运行的项目不会由于我们的误操作而突然产生问题。
1、坑一:在投放时修改数据库结构
我们碰到过的最常见也是最麻烦的坑就是数据库结构的修改,比如,针对已经投放的案例,删掉了某个字段,或者修改了某个字段名称、类型等等。此时,如果我们不对案例进行发布,那是无论如何都不会影响到线上的案例的。但一旦我们发布了案例,即使没有上架,我们修改的数据库结构,依然会同步到线上版。原因是:尽管我们针对每个测试发布版本是相对独立的,他们依旧共享了数据库。因为数据库是一个实体的表,iVX平台无法为每个测试发布版,提供独立的数据库,这样做除了消耗巨大的资源以外,也导致我们的数据无法连续。即每次测试发布,数据都会清空,这种情况是不能接受的。
一句话来说,我们的每个应用,只有两个数据库,一个是预览版,一个是发布版,所有测试发布版与正式上架版,都共享一个数据。因此如果我们修改了数据库结构,并发布了,那这个结构,在上架版中也会同时修改。此时,就存在修改风险了。举个例子,我们删掉了一个字段,但线上版有某个地方依赖了这个字段,此时可能就会导致线上版报错了。
在常见的企业应用开发规范中,我们应该尽量避免修改特别是删除已投放应用中的字段。通常,添加字段是相对安全的,如果由于业务需要,要添加一个字段,这个我们可以放心的去做,因为添加的新字段,在已上架的旧版本中,是没有使用到的,因此也不会影响到它的逻辑。但修改字段,甚至是修改字段的顺序,这些行为都请尽量避免,除非你特别自信想玩一把心跳。
2、坑二:在投放时修改数据库或应用配置(特别是域名)
和以上数据库的结构类似,所有测试发布版与正式发布版的应用,都共享数据库以及其他后台配置,比如,我们修改了案例的自定义域名,并发布了。举个例子,我们之前的自定义域名是 www.abc.com/firstPage, 然后,这个域名已经在线投放了。然后,由于某种不知名的原因,我们把域名修改成了www.abc.com/secondPage,那这个时候,一旦发布,这个案例的访问域名就会改了,即使我们没有上架,之前的域名也无法访问到我们的案例了。这个一定要注意。
同样道理,所有微信相关的配置,邮件相关的配置,都是在所有发布版中共享,因此,建议已投放的应用,都不要去修改这些配置。
3、坑三:在投放时升级数据库级别
这里有一个隐藏的坑,就是数据库的升级。
这个数据库的级别,其实也是数据库的配置项之一。但可能不如其他属性那样明显。针对已投放的应用,建议不要去升级数据库,否则,会导致数据库名称改变,而导致很多其他的不兼容问题。如果你要升级一个数据库,请尽量在正式上线之前。
如果,我们必须要使用某个已上线应用的私有数据库中的数据,完全可以使用公开服务的方法,提供一个接口来实现。
4、坑四:使用账号/企业数据库,被其他小伙伴改了
这又是一个被好多血泪填满的坑。有时候我们为了未来数据共享方便,将某个重要的数据库设置成了账号库。此时,如果我们只是一个人使用这个账号,通常问题不大,因为我们能够了解这个库的重要性。但如果是一个团队,或者我们直接把账号给到了客户,对方可能不了解这个账号数据库的重要性,添加了之后,看着预览版也没啥数据,修改字段,然后发布了,此时,我们线上的应用就彻底悲剧了。删除字段,还会导致数据丢失。
因此,请大家千万管理好自己的数据库,非必要的情况下,尽量使用私有数据库。如果必须要共享数据,也尽量使用公开服务的方法,在案例之间共享,而不是直接共享数据库。
5、挽回失误的方法
万一我们出现了以上错误,iVX平台还是提供了一些挽回的方法,在一定时间范围内(1-2周),我们可以恢复发布版本数据库中被误删的数据,由于涉及到后台研发操作,可能会涉及到一定的费用。
另外,针对企业账号,我们有前后台版本列表,万一我们更新了上架版本,发现了运行错误,可以立即回退至上一个版本,保证线上版本不要翻车。当然,这个版本回退仅限于前端代码逻辑和后台代码逻辑,不包括后台配置,如果要回退后台配置,还需要手动修改到之前的配置然后再次发布。
域名
域名的设置 更新时间:2023-11-15 09:27:19域名到底是什么
任何一个互联网上的设备,包括服务器或我们的个人电脑设备,都有一个对应的地址,即IP地址,(比如,192.168.1.1)。所有设备,都通过这个独立唯一的IP地址来互相访问。由于IP地址不容易被记忆,人们发明了域名系统,即将某个IP地址与某个域名对应起来,比如,www.google.com, www.baidu.com。 当我们在浏览器里输入一个域名的时候,浏览器会通过“域名解析系统” (DNS)来查询到这个域名当前对应的IP地址,然后访问该IP地址对应的服务器。
注意,域名并非我们平常所说的“URL地址”,而只是URL地址中的一部分。比如,以我们的文档中心为例:
https://www.ivx.cn/docview?lang=zh&page=r9136l173l194&type=doc
其中,只有“www.ivx.cn” 才是域名,而其余则是URL的剩余组成部分:
在ivx平台发布的任何一个web应用,协议都为“https://”,即加密的http访问;域名和访问路径,需要我们在发布时指定(在下一节中我们将详细说明指定方法),URL参数,是一个额外的URL组成部分,如果有必要,我们可以在应用内部来定义不同URL参数的处理逻辑。
域名的申请
我们可以向各大域名服务商购买一个域名,域名的价格根据域名的珍稀程度而异,通常为几十-几千元人民币/年。各家的注册流程基本一致,以国内的阿里云为例,搜索并选择想要购买的域名,然后结算并支付即可,该域名就已经属于你了。
我们申请域名时唯一需要考虑的即为选择则一家优质的域名注册服务商:
- 同一个域名在不同服务商的平台上价格会有所差异,这个价格会与域名解析服务器相关,稳定的域名解析服务可以保障域名正常稳定的运行。
- 选择国内或国外的域名注册服务商,国内或国外购买域名有较大差异,一般而言国内的注册商在价格上会更低,但是购买时会要求实名认证,相对来说流程上更加麻烦。
- 域名的注册与服务器地址无关,域名的购买不会影响服务器的使用,我们只需按照上述两点并根据自身情况进行选择即可。
下面为一些常用的域名注册服务商:
国内域名注册服务商
阿里云和腾讯云,由于是国内比较大的服务商,中文界面,操作简单,注册方便,域名价格非常良心,不多做介绍。
国外域名注册服务商
国外的域名注册往往价格会更贵,但无需实名:
Namesilo,可以算是国外价格最低的域名注册服务商,.com域名便宜,续费价格不变且支持支付宝支付;
GoDaddy,全球最大的域名注册商,价格方面第一年都还比较便宜,但续费价格可能浮动较多,网站支持中文和支付宝;
最后,如果您的应用是在国内投放,域名还需要进行工信部备案,否则域名在一定时间后(通常不超过一周)将不能被访问。关于域名的备案,我们在下一节中来详细介绍。
域名的备案
如上一节所述,任何需要在国内被访问的域名,都需要进行工信部备案。域名备案必须通过某个云服务商,由于ivx平台的应用使用亚马逊(aws)的服务,因此我们推荐您的域名也在aws上备案:
如果您也想要使用宁夏区的资源,您需要也在宁夏区完成ICP备案,即联系西云数据,联系方式如下所示:
邮件联系方式:icp@nwcdcloud.cn
电话联系方式:10100966-4
自助网站备案平台: https://icp.nwcdcloud.cn
公司网址: http://www.nwcdcloud.cn 注意,域名备案通常需要2-3周的时间,因此请务必在应用正式投放前做好备案工作。
如果网站域名已存在备案号,但之前不是在西云数据备案的(例如:腾讯云,阿里云等),请您将备案信息通过西云数据自助平台申请”新增接入”,管理局审核通过,账号端口开通即可在宁夏区域服务器上线网站。备案本身对其他云服务器使用无影响。
最后,ivx也在阿里云和腾讯云提供了代理服务器,如果您的应用着急投放,也可以临时使用已在阿里云或腾讯云备案的域名,通过代理服务器访问应用。
但是,由于代理服务器使网络访问增加了一个中间层,即用户需要先“绕道”阿里/腾讯云的代理服务器,然后再访问到亚马逊的服务器,因此会有以下弊端:
- 应用访问速度相对较慢
- 无法支持大规模的高并发应用
- 安全防护措施不如主服务集群强大,易暴露在ddos攻击的风险中
因此我们还是强烈建议您在亚马逊备案域名,代理服务只能作为一个临时的测试方案。
自定义域名VS平台公共域名
发布任何一个web应用,都需要一个对应的域名,我们可以在ivx的发布设置中对域名进行设置。如果您暂时没有自己的域名,可以选择使用平台公共域名。当前的平台公共域名为 xxxx.v4.h5sys.cn, 其中,”xxxx.v4”为子域名,每个用户拥有一个独立的子域名,“h5sys.cn”为平台统一的公共域名。
由于平台所有用户都共用平台公共域名,因此其具有一定的风险。特别是当我们的应用需要在微信浏览器中发布,或者发布为webview嵌入在小程序中,微信平台会对其上发布的内容进行审核,如有用户使用平台公共域名发布了违规的内容,可能会导致根域名(当前为h5sys.cn)被封。根域名被封后,所有平台公共域名发布的案例都无法在微信平台打开。当然,通过申诉,通常会在半个工作日左右后解封,但依然会对我们发布中的应用造成严重的影响。
为了保证平台公共域名的安全性(同时也为了保证整个平台服务合规),我们将对所有在ivx平台上发布的应用进行审核,但由于ivx应用的复杂性以及内容的动态性(比如,一个支持聊天或评论的应用,有用户在应用上发布的不当言论而被投诉),我们无法100%保证平台公共域名发布的所有应用都不违反微信的规定,因此针对需要在微信平台上发布的应用,我们建议大家使用自定义域名来确保应用的安全访问。
设置应用的发布域名
我们可以在应用的配置界面预先设置好发布域名和路径:
或在应用发布时,修改域名和路径:
其中,域名输入框中,我们需要输入自己的自定义域名,比如 h5.abc.com, 路径输入框中,系统已经默认给了一个路径,但我们可以根据自己的需要来任意修改,比如,我们可以填为“123” 或 “doc/view/path” 等等。只要确保同一个域名下,没有两个应用使用同一个路径即可(如果有重复,则一个路径只能访问第一个绑定的应用)
配置域名解析
如我们在第一节中所述,当用户输入一个域名之后,浏览器会请求DNS(域名解析系统)来获取这个域名所对应的IP地址,然后通过这个IP地址,来访问相应的web应用。因此,当我们购买一个域名之后,需要在域名解析系统中进行登记,告知域名解析系统我们这个域名所指向的IP是什么。这个过程,我们需要通过DNS配置来完成。
所有域名服务商,都配有自己的域名配置界面。以阿里云为例:
step1:
选择自己购买的域名,然后选择添加记录:
step2:
添加一条记录指向ivx平台的发布域名:
选择“CNAME”这种记录类型,直接指向一个平台默认域名;
填写应用子域名,比如“www”,或“h5”,我们可以为每一个应用独立设置一个子域名,或者所有应用共享一个子域名,而通过不同的访问路径来区 分。我们建议使用后一种方式,因为许多第三方接口平台,比如微信平台,需要填写合法业务域名,此业务域名包含子域名和根域名部分,如果每个应用都设置不同的子域名,则需要多次配置。
填写 “v4rel.h5sys.cn”,即平台的系统发布域名。
step3(可选):
除了应用发布域名,我们还可以定义应用的预览域名,方便我们在预览时使用自定义域名(在部分限制域名的场景中,比如微信公众号配置,商户号配置等,必须使用特定的域名才能正常使用)。
配置自定义预览域名,我们首先需要在域名服务商平台配置预览域名解析,其方法和step2完全相同,只是我们需要设置一个不同的子域名,将其指向“v4pre.h5sys.cn”。
然后,在应用配置界面,填写上相应的预览域名即可(预览路径不需要在域名解析中配置,直接在ivx配置中心设置即可)
step4(可选):
最后,如果我们的应用需要在微信浏览器中投放,并获取微信用户的ID或头像/昵称,我们还需要一个自己的微信公众号,并在公众号中配置域名。
在阿里云/腾讯云备案域名的临时测试方案
如果您的域名尚未在亚马逊备案,但已经在阿里云或腾讯云上备案,iVX也提供一个临时的测试方案,可以测试发布之后的自定义域名。
您可以参考上一节的方法,暂时将发布域名的cname配置到iVX在阿里云与腾讯云的代理服务器上:
阿里云:
发布域名cname至:alirel.h5sys.cn
腾讯云:
发布域名cname至:tenrel.h5sys.cn
注意,此方法仅供测试使用,其缺陷在于:
- 代理通道,类似是一个vpn,vpn的稳定性受诸多因素影响,不能保证一直可用;
- 代理服务器安全性不如主服务器,容器受到ddos攻击;
- 代理服务器方案下,所有请求需要先走代理服务器,将导致案例打开、数据后台请求相对缓慢。
因此,以上方案仅供开发测试使用,正式投放,请务必在亚马逊平台备案。
公众号
微信公众号平台配置 更新时间:2023-11-15 09:27:23使用场景
当H5在微信中发布,且需要获取用户昵称和头像时,我们需要在配置界面为微信公众号的栏目勾选上“开启授权”,并将初始获取头像昵称的属性值改为“是”,此时微信才会弹出授权提示框,如下图所示:
如果我们有自己的公众号,可以使用自己的公众号替换系统默认的公众号。为案例配置自定义的公众号,只需要在配置界面,填入自己公众号的appID和appSecret,以及自定义授权域名填上v4rel.h5sys.cn即可:
配置完成之后,此时我们预览或发布案例,在微信中打开,会出现如下错误:
出现该问题,是由于微信公众号后台的域名配置尚未设置,按以下方法可以进行配置。
配置合法域名
步骤 1:访问微信公众平台
进入公众号,选择 设置-公众号设置-功能设置(注:仅企业版公众号可配置)
接下来,我们分两种情况来展示如何配置功能设置中的三个域名许可:
- 未使用自定义域名,仅自定义公众号
- 发布版本与预览版本均使用自定义域名(这里建议预览版本也使用自定义域名,避免预览是公共平台的域名,发布却是自定义域名,以免造成混乱)
1、未使用自定义域名的情况
如下图,直接填写平台默认的通用域名即可:
2、同时定义自定义发布域名与自定义预览域名
以下截图是假设ivx.cn是用户自有的域名
如上图的填写方法,第一次保存业务域名和js接口安全域名,会报错:
此时,需要去dns后台,临时将此域名的根域名指向 v4rel.h5sys.cn:
可以临时添加一条CNAME记录:
或临时添加一条A记录:
添加完成后,即可顺利保存了。保存完成,即已通过了微信文件验证阶段,可以将之前的根域名记录删除,用于其他用途。
最后回到接口配置填写好APP ID 和APP Secret,以及自定义授权域名后,即可成功
自定义授权域名
在配置中心中,有一个自定义授权域名功能:
这个功能的目的是节省公众号网页授权域名的空间,如果您有自定义域名,或者有其他应用也是用了这个公众号,可以自定义一个授权域名,那无论是预览还是发布,都可以使用这个授权域名而不需要占用公众号下的两个授权回调的空间。
由于单个微信公众号下的网页授权域名只能存在三个,不使用自定义授权域名则需要将编辑器预览及发布的地址填入公众号的授权域名,相较于自定义授权域名会占用过多的授权空间;同时默认所有发布的作品都使用平台提供的授权域名,如果某些用户存在未被iVX拦截的违规操作(平台会对发布作品进行审核,但难以100%规避),那么该授权域名下的所有作品可能都会被污染而导致无法访问,因而建议在发布内容到自定义公众号下时都能使用自定义授权域名。
授权域名可以与应用发布的域名不一致(比如,发布域名为aaa.123.com, 授权域名为 bbb.456.com),但需要在dns后台将此授权域名指向 v4rel.h5sys.cn。
白名单设置
如果不设置白名单,您的案例可能无法打开,或无法调用任何微信接口服务。
选择基本配置,然后配置 ip 白名单:
将以下两个地址加入白名单:
52.83.157.21
52.83.192.50
完成以上配置后重新发布案例,即可使用自定义公众号或自定义域名发布H5案例。