华为云用户手册

  • 示例一:防护同一端口的不同源站IP的标准端口业务 在“防护端口”下拉框中,选择“标准端口”。 “对外协议”统一选择“HTTP”或者“HTTPS”。HTTP标准端口防护配置如图1所示,HTTPS标准端口防护配置如图2所示。 图1 80端口业务 图2 443端口业务 “对外协议”选择“HTTPS”时,需要配置证书。 访问网站时, 域名 后可以不加端口号进行访问。例如,在浏览器中直接输入“http://www.example.com”访问网站。
  • 为什么误报处理不能使用了? 误报处理不能使用时,请先确认登录管理控制台账号是否授予了使用WAF的权限,有关WAF权限的详细介绍,请参见WAF权限管理。 如果您已开通企业项目,处理误报事件时请在“企业项目”下拉列表中选择您所在的企业项目。 基于自定义规则(CC攻击防护规则、精准访问防护规则、黑白名单规则、地理位置访问控制规则等)拦截或记录的攻击事件,无法执行“误报处理”操作,如果您确认该攻击事件为误报,可在自定义规则页面,将该攻击事件对应的防护规则删除或关闭。 防护网站接入WAF后,当WAF检测到访问请求的以下参数超过512个时,WAF将判定该访问请求为非法请求并拦截该访问请求,且误报处理按钮置灰不能使用: POST/PUT使用“form-data”时,表单的参数个数多于8192个。 URI的参数个数多于2048个。 Header个数超过512个。 图1 非法请求被WAF拦截 有关非法请求的处理建议,请参见WAF误拦截了“非法请求”访问请求,如何处理?。 父主题: 误拦截正常请求排查
  • 购买内容安全检测服务后,什么时候扣费? 购买内容安全检测服务后,系统立即执行检测并扣费,且检测过程中,不支持修改检测域名、暂停任务、退费等操作。 内容安全检测服务支持三种检测类型:内容安全单次检测、文本安全监测(按月)、文本安全监测(按年)。选择“内容安全单次检测”时,内容安全检测服务一次性计费。同一个对象再次进行扫描时,需要重新收费。网站检测配额请参见购买内容安全检测服务时,如何确定网站检测配额?。 详细的计费说明请参见计费项。 父主题: 内容安全检测服务
  • 防护规则条数不够用时,如何处理? Web应用防火墙 云模式提供了入门版、标准版、专业版、铂金版四种服务版本。各服务版本针对各种规则的配置条数请参见服务版本差异。如果您所购买的云模式版本支持的规则条数不能满足您业务的需要,您可以升级服务版本,具体的操作请参见变更WAF云模式版本和规格(新版)。 如果您购买了标准版、专业版或铂金版,当前版本的IP黑白名单防护规则数不能满足要求时,您可以通过购买规则扩展包增加IP黑白名单防护规则数,以满足的防护配置需求。 一个规则扩展包包含10条IP黑白名单防护规则。有关购买扩展包的详细操作,请参见如何购买域名扩展包/QPS扩展包/规则扩展包?。 父主题: 购买和变更规格
  • 如何处理418错误码问题? 如果请求本身含有恶意负载被WAF拦截,此时访问WAF防护的域名时会出现418的错误。您可以通过查看WAF的防护日志,查看拦截原因。有关查看防护日志的详细操作,请参见查看防护日志。 如果您判断该请求为业务正常请求调用,可以通过误报处理操作对该路径的对应规则进行放行处理,避免同样问题再次发生。 有关处理误报事件的详细操作,请参见处理误报事件。 如果确认有问题,说明您的网站受到了攻击,并被WAF拦截。 父主题: 流量转发异常排查
  • 云数据库 RDS for PostgreSQL PostgreSQL是一个开源对象云数据库管理系统,并侧重于可扩展性和标准的符合性,被业界誉为“最先进的开源数据库”。云数据库 RDS for PostgreSQL面向企业复杂SQL处理的OLTP在线事务处理场景,支持NoSQL数据类型(JSON/XML/hstore),支持GIS地理信息处理,在可靠性、数据完整性方面有良好声誉,适用于互联网网站、位置应用系统、复杂数据对象处理等应用场景。 支持postgis插件,空间应用卓越。 适用场景丰富,费用低,随时可以根据业务情况弹性伸缩所需的资源,按需开支,量身订做。 当前RDS for PostgreSQL支持版本请参见数据库引擎和版本。 更多详细信息,请参见官方文档:https://www.postgresql.org/docs/。
  • 云数据库 RDS for MariaDB MariaDB是由MySQL创始人Monty创立的,并且是目前流行的开源数据库之一。 云数据库 RDS for MariaDB与MySQL高度兼容,是一个功能强大、性能优越、安全可靠的数据库管理系统,适用于各种规模的应用程序,具有以下优势: 应用无需改造,无缝迁移,开箱即用。 管理控制台提供全面的监控信息,简单易用,灵活管理,可视又可控。 随时根据业务情况弹性伸缩所需资源,按需开支。 当前RDS for MariaDB支持版本请参见数据库引擎和版本。 更多详细信息,请参见官方文档:https://mariadb.org/。
  • 云数据库 RDS for MySQL MySQL是目前最受欢迎的开源数据库之一,其性能卓越,搭配LAMP(Linux + Apache + MySQL + Perl/PHP/Python),成为WEB开发的高效解决方案。 云数据库 RDS for MySQL拥有稳定可靠、安全运行、弹性伸缩、轻松管理、经济实用等特点。 架构成熟稳定,支持流行应用程序,适用于多领域多行业;支持各种WEB应用,成本低,中小企业首选。 管理控制台提供全面的监控信息,简单易用,灵活管理,可视又可控。 随时根据业务情况弹性伸缩所需资源,按需开支,量身订做。 当前RDS for MySQL支持版本请参见数据库引擎和版本。 更多详细信息,请参见官方文档:https://dev.mysql.com/doc/。
  • 云数据库 RDS for SQL Server Microsoft SQL Server是老牌商用级数据库,成熟的企业级架构,轻松应对各种复杂环境。一站式部署、保障关键运维服务,大量降低人力成本。根据华为国际化安全标准,打造安全稳定的数据库运行环境。被广泛应用于政府、金融、医疗、教育和游戏等领域。 云数据库 RDS for SQL Server具有稳定可靠、安全运行、弹性伸缩、轻松管理和经济实用等特点。拥有高可用架构、数据安全保障和故障秒级恢复功能,提供了灵活的备份方案。 当前RDS for SQL Server支持版本请参见数据库引擎和版本。 更多详细信息,请参见官方文档:https://learn.microsoft.com/zh-cn/sql/?view=sql-server-ver16。
  • 查看运行记录 登录新版ROMA Connect控制台。 在左侧导航栏选择“组合应用”,在组合应用页面单击要查看运行记录的组合应用。 在组合应用详情页面,选择“运行记录”页签,可查看该组合应用下流任务运行过程的相关记录信息。 表1 运行记录字段说明 字段 说明 开始时间 流任务的开始时间。 结束时间 流任务的结束时间。 运行ID 流任务的运行ID。 运行时间 流任务的运行时间。 状态 流任务的运行状态。 (可选)配置访问日志,实现异常监控日志的存储。 如果组合应用未启动,请单击“启动并配置运行记录”,选择一个实例启动此组合应用。 如果组合应用已启动,单击“点击开启”弹出“运行记录配置”窗口,然后配置日志接入信息。 表2 配置访问日志 参数 说明 日志组 选择日志流所在的日志组。 如果没有可选的日志组,单击“查看日志组”,跳转到 云日志 服务管理控制台,并创建一个日志组,具体操作请参考创建日志组。 日志流 选择运行监控日志要存储的日志流。 如果没有可选的日志流,单击“查看日志流”,跳转到云日志服务管理控制台,并创建一个日志流,具体操作请参考创建日志流。 完成后单击“确认”。
  • 映射模式 自动配置Mapping 若源端信息与目标端信息中都定义了元数据,可使用“自动Mapping”方式配置Mapping信息。 单击“自动Mapping”,源端和目标端数据字段间的映射规则自动建立。 源端或目标端数据类型为API时,数据字段不支持自动Mapping,需要手动配置Mapping。 图1 自动Mapping 手动配置Mapping 如果两端的数据表字段不一致,可单击下方的“添加mapping映射”,配置源端数据字段到目标端数据字段的映射关系。 用户可以手动添加源端数据字段与目标端数据字段的映射规则,该方式适用于所有数据类型的集成场景。可以通过键值对输入或文本框输入两种方式配置Mapping映射规则。
  • 脚本模式 可通过编辑JavaScript脚本来配置源端数据(sourceObj指源表的字段集合对象)和目标端数据(targetObj指目标表的字段集合对象)的Mapping映射关系信息,增强复杂对象的Mapping处理能力。 脚本映射样例: 样例模板。 function excute(sourceObj){ //请在此处编写脚本内容, 注意大小写敏感。 //定义目标端数据对象 targetObj = {}; //支持普通的加减乘除运算 targetObj.a= (sourceObj.id * 3 + 1) % 5; //支持js的Math函数 targetObj.b= Math.sqrt(100); //支持类型转换 targetObj.c = Number("3.14"); //支持调用系统的时间函数 targetObj.date = new Date().toLocaleString(); //支持正则表达式 targetObj.fdi = sourceObj.name.replace(/world/i,"fdi"); //支持json转换 var json = JSON.parse(sourceObj.infoJson); targetObj.address = json.address; targetObj.age = json.age; targetObj.sex = json.other.sex; targetObj.hobby = json.other.hobby; //支持条件语句 if(targetObj.hobby == "rap"){ targetObj.ikun = true; }else{ targetObj.ikun = false; } return targetObj; } 仅字段映射。 function excute(sourceObject) {//sourceObject即源端传送的数据对象 //请在此处编写脚本内容; var targetObject = {}; targetObject.mqs_id = sourceObject.id;//映射源端数据表中的id字段至目标端字段mqs_id targetObject.mqs_name = sourceObject.name; targetObject.mqs_date = sourceObject.date; targetObject.mqs_date = sourceObject['customized-outdutydate'];//属性带中划线的字段,需要使用中括号进行引用 return targetObject; //targetObject即返回给目标端的数据对象 } 目标端数据源类型为API。 API数据类型的目标端需要分别使用三个对象进行传递,对象包含params、headers和body。 function excute(sourceObj) { print("execute js"); print(sourceObj); var targetObj = {}; targetObj.params = {}; targetObj.params.id = sourceObj.uid targetObj.headers = {}; targetObj.headers['X-HW-ID'] = "应用ID"; targetObj.headers['X-HW-APPKEY'] = "应用密钥"; targetObj.body = {}; return obj; } 如果转换的数据存在时间类型。则JS脚本中需参考以下加黑字段修改: 编排模式下,目标端数据源类型为API,且使用JS脚本进行数据转换时,会自动先将源端类型为Date的数据类型转换为yyyy-MM-dd HH:mm:ss的字符串类型。例如,源端时间数据为19:55:20,通过JS脚本转换后会变为1970-01-01 19:55:20,而不是预期的19:55:20。其中1970-01-01为系统统一添加的默认值。 如果要目标端要获得指定格式的数据,需要参考下述示例在JS脚本中对时间数据进行转换。 function excute(sourceObj) { /** * 自定义时间格式函数 * @param {format} 时间显示格式 */ Date.prototype.format = function (format) { var date = { "M+": this.getMonth() + 1, "d+": this.getDate(), "h+": this.getHours(), "m+": this.getMinutes(), "s+": this.getSeconds(), "q+": Math.floor((this.getMonth() + 3) / 3), "S": this.getMilliseconds() }; if (/(y+)/i.test(format)) { format = format.replace(RegExp.$1, (this.getFullYear() + '').substr(4 - RegExp.$1.length)); } for (var k in date) { if (new RegExp("(" + k + ")").test(format)) { format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? date[k] : ("00" + date[k]).substr(("" + date[k]).length)); } } return format; }; print("execute js"); print(sourceObj); var targetObj = {}; targetObj.params = {}; targetObj.params.id = sourceObj.uid //对时间格式的数据进行转换时,调用上述自定义的函数进行处理, 抽取时、分、秒部分的数据给目标字段。 //其中下述代码中的HH:mm:ss为时分秒时间的显示格式。如果写为hhmmss,则返回给目标字段的格式不带冒号。 targetObj.params.time = (new Date(sourceObj.time)).format("hh:mm:ss"); targetObj.headers = {}; targetObj.headers['X-HW-ID'] = "应用ID"; targetObj.headers['X-HW-APPKEY'] = "应用密钥"; targetObj.body = {}; return obj; } 数据库字段涉及多层json解析。 如果源端数据对象包含的字段涉及多层json对象嵌套,则需要对每一个解析出来的字段使用“[]”引用。 例如如下脚本表示root字段包含id、name、double等多层对象嵌套,则每一个解析的字段需要单独引用。 function excute(sourceObject) { //请在此处编写脚本内容; var targetObject = {}; targetObject.mqs_id = sourceObject["root.id"]; targetObject.mqs_name = sourceObject["root.name"]; targetObject.mqs_double = sourceObject["root.double"]; targetObject.mqs_date = sourceObject["root.date"]; targetObject.mqs_boolean = sourceObject["root.boolean"]; targetObject.mqs_timestamp = sourceObject["root.timestamp"]; targetObject.mqs_time = sourceObject["root.time"]; targetObject.mqs_long = sourceObject["root.long"]; return targetObject; }
  • 新建/配置模板 进入流水线模板列表。 单击模板列表“新建流水线模板”,进入“任务编排”页面。 根据需要配置模板基本信息、模板阶段/任务、模板参数等。 基本信息:可以编辑模板的名称(必填)、语言(可选择Java、Python、Node.js、Go、.Net、C++、PHP等语言,默认选择“无”)、描述(非必填)。 流水线源:无需配置。 准入设置:模板编排暂不支持配置阶段准入。 任务编排:流水线模板目前可以添加流水线阶段及部分插件,将构建、代码检查、部署、接口测试等任务配置在模板中后,通过模板创建流水线的时候会同步创建相应类型的任务。 参数设置:切换至“参数设置”页签,可根据需要为模板添加参数,流水线模板参数包括自定义参数和系统预定义参数两种,其中,自定义参数类型包括:字符串类型、枚举类型、自增长类型,配置方法请参见配置流水线参数。 配置完所有信息,单击“保存”即可。
  • 使用限制 单账号跟踪的事件可以通过 云审计 控制台查询。多账号的事件只能在账号自己的事件列表页面去查看,或者到组织追踪器配置的OBS桶中查看,也可以到组织追踪器配置的 CTS /system日志流下面去查看。 用户通过云审计控制台只能查询最近7天的操作记录。如果需要查询超过7天的操作记录,您必须配置转储到 对象存储服务 (OBS)或云日志服务(LTS),才可在OBS桶或LTS日志组里面查看历史事件信息。否则,您将无法追溯7天以前的操作记录。 云上操作后,1分钟内可以通过云审计控制台查询管理类事件操作记录,5分钟后才可通过云审计控制台查询数据类事件操作记录。
  • 实现原理 如图1所示, 视频直播 服务主要通过以下几方面保障直播资源的安全。 图1 直播安全架构图 推流鉴权: Key防盗链:主播使用租户提供的带加密串的鉴权推流地址向CDN请求直播推流,CDN会根据推流地址中携带的鉴权信息校验请求的合法性,仅校验通过的请求会被允许。 IP黑白名单:配置IP黑名单或白名单后,CDN会根据名单对推流请求者的IP进行识别和过滤,允许或拒绝推流请求。 播放鉴权: Referer防盗链:配置Referer黑名单或白名单后,CDN会根据名单对播放请求中携带的Referer字段进行识别,允许或拒绝播放请求。 Key防盗链:观众使用租户提供的带加密串的鉴权播放地址向CDN请求直播播放,CDN会根据请求地址中携带的鉴权信息进行检验,判断地址是否在有效期内,只有通过校验的请求才会被允许,从而保障直播资源的安全。 IP黑白名单:配置IP黑名单或白名单后,CDN会根据名单对播放请求者的IP进行识别和过滤,允许或拒绝播放请求。 直播流管理:在直播过程中,发现直播流内容不合法或推流地址被非法盗用,将直播控制台上将此直播流加入禁推名单,对直播流进行封禁,在执行恢复推流前将无法进行推流活动。
  • 修订记录 表1 修订记录 发布日期 修订记录 2023-06-30 第五次正式发布。 本次更新说明如下: 新增“视频监控类业务如何接入Live?”章节。 2022-08-30 第四次正式发布。 本次更新说明如下: 更新“如何保障直播资源的安全?”章节的Key防盗链内容。 2021-10-30 第三次正式发布。 本次更新说明如下: 更新“如何降低直播延时?”章节的直播时延。 2020-07-30 第二次正式发布。 本次更新说明如下: 新增“直播事件回调”章节。 2019-03-30 第一次正式发布。
  • 鉴权原理 华为云SparkRTC系统使用数字签名作为接入鉴权方式,需要在SDK加入房间时设置“signature”和“ctime”。“signature”为标识签名,由租户使用华为云SparkRTC提供的“app_key”,“app_id”以及当前的“room_id”,“user_id”,“ctime”,按照华为SparkRTC的签名生成样例自行生成。具体参数说明请参见表1。 //认证用的app_key和app_id硬编码至代码中或以明文形式存储会有极大风险。建议密文形式配置存储在文件或者环境变量中,使用时解密,以确保安全。本例以app_key和app_id存放至环境变量为例,运行前请先在本地环境中设置完成环境变量APP_KEY和APP_ID。 app_key = System.getenv("APP_KEY"); app_id = System.getenv("APP_ID"); signature = hmacSha256(app_key,(app_id + room_id + user_id + ctime)) 表1 参数说明 参数 说明 app_key 华为云SparkRTC针对每个app生成的鉴权密钥,需要安全保存,谨防泄漏。 app_key的获取方法请参见如何获取密钥?。 app_id 华为云SparkRTC生成的应用ID。 app_id请在 实时音视频 控制台的“应用管理”中获取。 room_id 租户自行创建的房间ID。 user_id 租户接入华为云SparkRTC系统的用户ID。 ctime 签名鉴权的过期时间。是系统当前UTC时间(unix时间戳)加上鉴权过期时间(推荐2小时,最长需要小于12小时)。单位为秒。 说明: ctime为创建时间+过期时间,例如,当前时间为9点,鉴权过期时间为30分钟,则ctime为9点30分。即超过9点30分后,signature签名将失效。 建议租户构建自己的应用签名分发服务器,以防止“app_key”下沉到终端APP的过程中造成不必要的泄漏,鉴权原理如图1所示。 图1 鉴权原理
  • 环境要求 OHOS SDK需要集成到APP工程中,建议您在如下推荐环境中进行集成开发。 准备DevEco,推荐使用4.0.0(10) SDK及以上。 准备Android运行环境:API 21、Android 5.0以上设备。 支持的终端CPU架构:armeabi-v7a、arm64-v8a。 手机的CPU架构可通过以下方式查询。 手机开启USB调试,连接上电脑,然后打开Windows操作系统中的cmd程序,输入如下命令: adb shell getprop ro.product.cpu.abi
  • SDK使用 创建引擎。 AppId获取方法请参见创建应用。 1 2 3 4 5 6 7 8 9 10 11 HRTCEngineConfig config = new HRTCEngineConfig(); config.setAppId(appId); // AppId需在控制台中创建应用后获取 config.setCountryCode(countryCode); // 可以根据Grs国家码对照表传值,建议传"CN" config.setContext(getApplicationContext()); // 上下文,请传入Application Context config.setDomain(webSocketFalvor); // 该字段已废弃,不需要再传值 config.setMuteAudioRoute(isMuteAudioRoute); config.setLogEnable(true); config.setLogSize(logSize); config.setLogLevel(logLevel); config.setLogPath(logPath); // logPath为目录,非文件 mHwRtcEngine = HRTCEngine.create(config, mHwHandler); // mHwHandler继承自IHRTCEngineEventHandler,用于监听各种回调事件 设置本地窗口。 1 2 SurfaceView surface = mHwRtcEngine.createRenderer(getApplicationContext()); // 不可使用new SurfaceView(context)创建 mHwRtcEngine.setupLocalView(surface, HRTCEnums.HRTCVideoDisplayMode.HRTC_VIDEO_DISPLAY_MODE_HIDDEN); 加入房间。 1 2 3 4 5 6 7 8 9 10 11 12 HRTCJoinParam joinParam = new HRTCJoinParam(); joinParam.setUserId(mUserId); // userId用于标识同一房间的不同用户 joinParam.setUserName(mUserName); // 用户昵称,如无特殊需求,保持和userId一致即可 joinParam.setRole( HRTCJoinParam.HRTCRoleType.HRTC_ROLE_TYPE_JOINER); joinParam.setRoomId(roomid); joinParam.setScenario(1); joinParam.setOptionalInfo(optionInfo); joinParam.setAuthorization(signature); joinParam.setCtime(ctime); joinParam.setAutoSubscribeVideo(false); joinParam.setAutoSubscribeAudio(true); mHwRtcEngine.joinRoom(joinParam ); joinParam:入会参数,包含用户ID、用户名、房间号、认证信息、ctime、是否自动订阅音频和视频、SFU类型、场景和用户角色,具体请参见HRTCJoinParam。 监听远端用户加入房间,并设置远端窗口。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @Override public void onRemoteUserOnline(String roomId, final String userId, String nickname) { if (userId.equals(mUserId)||mRole == HRTC_ROLE_TYPE_JOINER.ordinal()) { return; } Log.e(TAG, "onRemoteUserOnline userId: " + userId); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(LiveActivity.this, userId + "加入了房间", Toast.LENGTH_SHORT).show(); SurfaceView surface = mHwRtcEngine.createRenderer(getApplicationContext()); mHwRtcEngine.startRemoteStreamView(userId,surface, HRTCEnums.HR TCS treamType.HRTC_STREAM_TYPE_HD); mHwRtcEngine.updateRemoteRenderMode(userId,HRTCEnums.HRTCVideoDisplayMode.HRTC_VIDEO_DISPLAY_MODE_Fit); // 将userId对应surface添加到布局中 } }); } 监听远端用户离开房间,并删除远端窗口。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 @Override public void onRemoteUserOffline(String roomId, final String userId, int reason) { Log.i(TAG, "HwRtcDemo onRemoteUserOffline roomId:" + roomId + ", userId:" + userId + ", reason:" + reason); runOnUiThread(new Runnable() { @Override public void run() { Log.e(TAG, "HwRtcDemo run removeRemoteUser! "); Toast.makeText(LiveActivity.this, userId + "离开了房间", Toast.LENGTH_SHORT).show(); mHwRtcEngine.stopRemoteStreamView(userId); // 将userId对应的surface从布局中移除 } }); } 离开房间。 1 2 mHwRtcEngine.leaveRoom(); finish(); 销毁引擎 1 HRTCEngine.destroy(); 父主题: Android SDK
  • 环境要求 OHOS SDK需要集成到APP工程中,建议您在如下推荐环境中进行集成开发。 准备DevEco,推荐使用4.0.0(10) SDK及以上。 准备Android运行环境:API 21、Android 5.0以上设备。 支持的终端CPU架构:armeabi-v7a、arm64-v8a。 手机的CPU架构可通过以下方式查询。 手机开启USB调试,连接上电脑,然后打开Windows操作系统中的cmd程序,输入如下命令: adb shell getprop ro.product.cpu.abi
  • SDK使用 创建引擎并初始化。 域名不需要设置,由SDK自动获取。appId获取方法请参见创建应用。 1 2 3 4 5 6 7 8 9 10 11 12 _rtcEngine = [HWRtcEngine sharedEngine]; HWRtcEngineConfig * cfg = [[HWRtcEngineConfig alloc]init]; cfg.appId = appid;// appId需在控制台中创建应用后获取 cfg.domain = domain;// 该字段已废弃,不需要再传值 cfg.countryCode = rtcCountryCode;// 可以根据Grs国家码对照表传值,建议传"CN" cfg.enableHaTrace = YES; cfg.logLevel = HWRtcLogLevelDebug;//输出DEBUG级别日志 cfg.logPath = [NSString stringWithFormat:@"%@/",logFilePath];//日志存储路径 cfg.enableLog = YES;//开启日志 cfg.logSize = 10*1024; cfg.muteAudioRoute = NO;//远端音频路由 [_rtcEngine initWithConfig:cfg]; 设置本地窗口。 1 2 3 4 5 HWRtcVideoCanvas *canvas = [[HWRtcVideoCanvas alloc] init]; canvas.view = [[UIView alloc] initWithFrame:CGRectMacke(0, 0, 90, 160)];//iOS //canvas.view = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 90, 160)];//macOS canvas.uid = @"HW"; [_rtcEngine setupLocalVideo:canvas viewMode:HWRtcVideoDisplayModeFit]; 加入房间。 1 2 3 4 5 6 7 8 9 10 11 12 HWRtcJoinParam *joinParam = [[HWRtcJoinParam alloc]init]; NSString *authorization = @"";// 鉴权信息 joinParam.role = HWRtcRoleJoiner; joinParam.userId = @"HW"; // userId用于标识同一房间的不同用户 joinParam.userName = @"HW";// 用户昵称,如无特殊需求,保持和userId一致即可 joinParam.scenario = 1; joinParam.authorization = authorization; joinParam.ctime = time; joinParam.roomId = roomid; joinParam.autoSubscribeAudio = YES;//是否主动订阅音频 joinParam.autoSubscribeVideo = NO ;//默认-关闭 BOOL result = [self.rtcEngine joinRoom:joinParam ]; joinParam:入会参数,包含用户ID、用户名、房间号、认证信息、ctime、是否自动订阅音频和视频、SFU类型、场景和用户角色,具体请参见HWRtcJoinParam。 监听远端用户加入房间,并设置远端窗口。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 -(void)onRemoteUserOnline:(NSString*)roomId userId:(NSString*)userId userName:(NSString*)userName{ if([userId isEqualToString:localUid]){ return; } dispatch_async(dispatch_get_main_queue(), { UIView *videoView = [[UIVIew alloc] initWithFrame:CGRectMake(0, 0, 90, 160)];//iOS //NSView *videoView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 90, 160)];//macOS [self.view addSubview:videoView]; HWRtcVideoCanvas *canvas = [[HWRtcVideoCanvas alloc] init]; canvas.uid = userId; canvas.view = videoView; int result = [self.rtcEngine startRemoteStreamView:canvas treamType:self.streamType]; if (result == 0) { [self.rtcEngine updateRemoteRenderMode:userId displayMode:HWRtcVideoDisplayModeFit mirrorMode:HWRtcVideoMirrorTypeDisable ]; } [self.viewsArray addObject:canvas]; }); } 监听远端用户离开房间,并删除远端窗口。 1 2 3 4 5 6 7 8 9 10 11 - (void)onRemoteUserOffline:(NSString *)roomId userId:(NSString *)userId reason:(NSInteger)reason { dispatch_async(dispatch_get_main_queue(), ^{ for (HWRtcVideoCanvas * canvas in self.viewsArray) { if ([userId isEqualToString:canvas.uid]) { [self.viewsArray removeObject:canvas]; } } }); } 离开房间。 [_rtcEngine leaveRoom]; 父主题: iOS/macOS SDK
  • 服务公告 ASM使用istio-system、istio-operator命名空间承载网格运行所需的系统组件和系统运行配置,对于其下的资源对象: istio-system命名空间中的Deployment、DaemonSet、Service、ConfigMap、Secret、Role、RoleBinding、ServiceAccount资源对象; istio-operator命名空间下的Deployment、IstioOperator、ConfigMap、Secret、Role、RoleBinding、ServiceAccount资源对象; 建议您谨慎根据应用服务网格官网资料文档或在相关技术支持的指导下进行修改操作,以避免对您的业务产生影响。若用户有特定需求,也可通过提交工单进行咨询。
  • 修订记录 发布日期 修订记录 2024-06-21 第七次正式发布。 新增内建质量 修改如下章节: 进入开发中心 版本基线化 配置服务扩展信息 2024-05-08 第六次正式发布。 新增版本基线化 修改如下章节: AppStage开发中心使用流程 账号信息管理 创建版本 规划交付件 管理交付件 测试评估 标准发布 调测发布 流水线管理 删除如下章节: 规划版本需求(基线类型的版本) 2024-03-30 第五次正式发布。 新增如下章节: 测试 发布配置 修改如下章节: 添加开发中心用户 申请成为开发中心用户 审批成为开发中心用户的申请 团队空间概览 查看需求详情(仅支持基线类型的版本) 需求管理 代码仓管理 缺陷管理 配置服务扩展信息 2024-02-29 第四次正式发布。 新增调测发布 修改如下章节: AppStage开发中心使用流程 标准发布 2024-01-31 第三次正式发布。 申请成为开发中心用户 审批成为开发中心用户的申请 配置服务扩展信息 2023-12-31 第二次正式发布。 新增如下章节: 账号信息管理 添加开发中心用户 2023-11-25 第一次正式发布。
  • 操作步骤 新用户(未被组织管理员添加至开发中心用户)首次登录开发中心工作台,在工作台首页根据界面提示,单击“申请成为开发中心用户”。 在“申请成为开发中心用户”页面,在“申请原因”处填写申请原因,在“审批人”下拉列表中选择审批人员(组织管理员)。 单击“确定”,界面提示“提交成功”,该申请将生成一条待办信息至组织管理员的业务控制台界面的“我的待办”中,由其单击待办链接跳转至审批页面完成申请的审批,具体操作请参见审批成为开发中心用户的申请。
  • 更多操作 添加自定义交付件完成后,还可以执行如下表2所示的操作。 表2 更多操作 操作 说明 编辑交付件 说明: 不同类型的交付件只能其相应的处理角色才可编辑。 在交付件列表中,单击“操作”列的“编辑”。 在“编辑自定义交付件”页面,可编辑交付件描述、版本类型、产能、版本开始时间和版本发布发布时间。 单击“提交”。 删除交付件 说明: 不同类型的交付件只能其相应的处理角色才可删除。 在交付件列表中,单击“操作”列的“删除”。 单击“确认”。
  • 操作指导 需求管理功能操作的详细介绍如表1所示。 表1 需求管理功能说明 项目类型 需求管理功能导航 说明 参考文档的链接 IPD系统设备类项目 IPD系统设备类项目功能介绍 IPD系统设备类项目是面向系统设备类产品开发场景的IPD需求管理方法,通过结构化流程、强大的跨项目协作能力来对大型产品开发进行高质高效的管理,主要包含原始需求、系统特性、研发需求、任务、缺陷等内容,任务和缺陷是在需求实现过程中产生的活动和发现的问题。 IPD系统设备类项目功能介绍。 原始需求(RR) 原始需求生命周期共有提交、分析、规划、实现、交付、验收、关闭七个状态,通过新建/分析/规划/交付/验收原始需求等完成生命周期的状态流转。 请参见原始需求(RR)。 特性(FE) 特性全生命周期共有初始、研发、完成三个状态,通过新建/初始/研发特性等完成生命周期的状态流转。 请参见特性(FE)。 研发需求(IR/SR/AR) 研发需求生命周期共有初始、分析、开发、测试、完成五个状态,通过新建/分解/处理研发需求等完成生命周期的状态流转。 请参见研发需求(IR/SR/AR)。 任务(Task) 任务全生命周期共有初始、处理中、完成三个状态,通过新建/处理/编辑任务等完成生命周期的状态流转。 请参见任务(Task)。 缺陷(Bug) 缺陷的全生命周期共有分析、修复、测试、验收、关闭五个状态,通过新建、处理、编辑缺陷等完成生命周期的状态流转。 请参见缺陷(Bug)。 评审 评审类型分为三种:变更评审(CR)、基线评审(BR)、通用评审(GR)。 请参见评审。 统计 按照PI和时间两个维度对项目所有数据展示统计报表,包括项目概览、缺陷度量。 请参见统计。 计划管理 新建PI和迭代、设置PI和迭代基线、查看历史记录、删除PI和迭代等。 请参见计划管理。 工作配置 项目的工作设置主要包括:项目的基础配置、工作项相关设置、标签和工时类型的自定义设置、添加协同下游项目、通知设置及导入导出记录的查询和下载。 请参见工作配置。 IPD独立软件类项目 IPD独立软件类项目功能介绍 IPD独立软件类项目是面向独立软件类开发场景的IPD需求管理方法,通过结构化流程、强大的跨项目协作能力来对大型软件开发进行高质高效的管理,主要包含原始需求、系统特性、研发需求、任务、缺陷等内容,任务和缺陷是在需求实现过程中产生的活动和发现的问题。 请参见IPD独立软件类项目功能介绍。 原始需求(RR) 原始需求生命周期共有提交、分析、规划、实现、交付、验收、关闭七个状态,通过新建/分析/规划/交付/验收原始需求等完成生命周期的状态流转。 请参见原始需求(RR)。 特性(FE) 特性全生命周期共有初始、研发、完成三个状态,通过新建/初始/研发特性等完成生命周期的状态流转。 请参见特性(FE)。 研发需求(IR/US) 研发需求生命周期共有初始、分析、开发、测试、完成五个状态,通过新建/分解/处理研发需求等完成生命周期的状态流转。 请参见研发需求(IR/US)。 任务(Task) 任务全生命周期共有初始、处理中、完成三个状态,通过新建/处理/编辑任务等完成生命周期的状态流转。 请参见任务(Task)。 缺陷(Bug) 缺陷的全生命周期共有分析、修复、测试、验收、关闭五个状态,通过新建、处理、编辑缺陷等完成生命周期的状态流转。 请参见缺陷(Bug)。 评审 评审类型分为三种:变更评审(CR)、基线评审(BR)、通用评审(GR)。 请参见评审。 统计 按照PI和时间两个维度对项目所有数据展示统计报表,包括项目概览、缺陷度量。 请参见统计。 计划管理 新建PI和迭代、设置PI和迭代基线、查看历史记录、删除PI和迭代等。 请参见计划管理。 工作配置 项目的工作设置主要包括项目的基础配置、工作项相关设置、标签和工时类型的自定义设置、添加协同下游项目、通知设置及导入导出记录的查询和下载。 请参见工作配置。 Scrum项目 Scrum项目开发流程 在使用Scrum项目前,请先了解Scrum项目的开发流程。具体流程如下: 通过需求的分层和分解,多角色协作,确保需求范围可调整 按迭代持续交付,实现闭环反馈 Scrum项目典型迭代操作流程 请参见Scrum项目开发流程。 需求规划 根据项目分解需求,进行思维导图或甘特规划。 请参见需求规划。 新建需求 以客户视角描述的原始问题或者原始诉求放在原始需求中管理,通过新建原始需求功能,可以设置需求的背景、价值、详情、优先级等信息。 请参见新建工作项(Epic/Feature/Story/Task或Bug)中的“Story”。 管理需求 新建完需求后,可以查看需求详情,新建子需求,复制子需求,对需求批量导入导出、进行修改或删除,进行批量复制、批量编辑和批量删除操作等。 请参见管理工作项中的“Story”。 需求详情 在需求详情页面,除了可以修改需求的处理人、状态等,还可以查看关联需求、查看工作代码提交记录、查看需求操作历史、添加需求附件等。 请参见工作项详情中的“Story”。 自定义工作流(可选) 自定义配置不同需求的状态,以及自定义调整状态的前后顺序,包括根据项目需求定制需求字段与模板、状态与流转以及公共字段设置和公共状态设置。 请参见自定义工作流。
  • 初始化Matomo 首次登录应用镜像管理页面需要初始化,后续在“镜像信息”区域中,单击“管理”可直接登录管理页面。 在服务器“概览”页“镜像信息”中,单击“管理”登录管理页面。 单击“下一步”。 Matomo进行系统检查,单击“下一步”。 Matomo自动检查云服务器是否满足Matomo的安装条件,在每一项后显示检查结果。 设置MySQL数据库,单击“下一步”。 Matomo已经预置了MySQL,并已经配置一个默认的数据库帐号,初始化界面会自动获取此默认的数据库帐号信息,请勿改动界面信息,直接进行下一步。 Matomo自动创建数据表,单击“下一步”。 在“超级用户”页面,设置Matomo管理员用户名、密码和电子邮件,单击“下一步”。 超级用户是您在安装 Matomo 时创建的用户。每个Matomo只有一个超级用户,该用户拥有最高权限。请妥善保管此超级用户的用户名及密码。 在“设置网站”页面,添加第一个您想用Matomo追踪、分析的网站名称和URL。单击“下一步”。 安装Matomo后,您可以添加更多网站。 了解JavaScript跟踪代码,单击“下一步”。 要用Matomo追踪您网站的流量,您需要确认在您网站的每个页面都增加了一些额外的代码,即JavaScript跟踪代码。Matomo会自动生成一个JavaScript跟踪代码,安装结束后,您可以在管理页面“追踪代码”选项下查看跟踪代码。 完成初始化向导,单击“继续使用MATOMO”进入登录页面。 输入超级用户的用户名密码,单击“登录”,进入Matomo管理页面。 至此,您已获得一台完备的Matomo应用Flexus应用服务器 L实例 。您可以开始使用Matomo,也可以按照使用Matomo监控网站中的步骤监控网站。 父主题: 使用Matomo应用镜像进行网站数据分析
  • 步骤三:登录宝塔面板。 在浏览器地址栏中输入上述步骤2记录的宝塔面板地址。 地址格式为:http://弹性公网IP:随机端口号/随机字符串。本例为:http://1.95.xx.xx:28796/0ed54a3b。 显示如下界面: 图2 登录宝塔面板 输入上述步骤2记录的账户和密码登录宝塔面板,根据提示阅读并勾选《用户协议》。 登录后如果出现如下提示,请单击“未有账号,免费注册”在宝塔官网注册。 在宝塔官网注册后,在此输入注册的手机号和密码绑定宝塔官网账号。 根据业务需要安装基础组合软件。 请选择LNMP(推荐)或者LAMP基础组合软件,单击“一键安装”,等待安装直至结束。 后续也可以在“软件商店”中自行选择并安装其他软件。 至此,您已成功安装并登录宝塔面板。您现在可以开始通过宝塔面板部署网站,更多关于宝塔面板的信息请参见宝塔面板官网。
  • 步骤一:安装宝塔面板 购买并登录X实例。 购买X实例的步骤详见购买Flexus云服务器X实例。 登录X实例的步骤详见登录Flexus云服务器X实例。 执行以下命令,下载并安装宝塔面板。 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 当出现以下提示信息时,输入“y”: ... Do you want to install Bt-Panel to the /www directory now?(y/n): y ... 安装完成后,回显如下类似信息: 图1 宝塔面板安装成功 首行为宝塔面板的登录地址,请记录并妥善保存。 地址格式为:http://弹性公网IP:随机端口号/随机字符串。本例为:http://1.95.xx.xx:28796/0ed54a3b。为确保能正常访问宝塔面板,须在云服务器安全组放通随机端口号(本例为28796)。 username/password:登录宝塔面板的用户名及密码。
  • 资源和成本规划 本实践以如下资源规划为例,您可根据实际需要进行调整。 资源 配置 说明 Flexus云服务器X实例 CPU:2核 内存:4GB 本例以此配置为例,您也可以根据店铺需求选择合适的X实例规格。 镜像 Huawei Cloud EulerOS 2.0 标准版 64位 选择Huawei Cloud EulerOS 2.0 标准版 64位公共镜像。 弹性公网IP 创建X实例时同时关联一个弹性公网IP。 本例需从官网下载宝塔面板安装包,因此需要服务器关联弹性公网IP。
共100000条