
阿里云ping https://ping.gaomeluo.com/aliyun/
随着近两年知识产权的普及,很多行业(包括个人)对商标版权的意识越来越看重,开始着手注册一个属于自己的商标。 本人亲自注册过商标,也曾经写过关于阿里云商标注册的流程,但是注册商标真的不是那么简单的事。申请一个商标快则10个来月,慢则需要一年多的时间。这不是最主要的,最气人的是商标注册成功率非常低,商标申请过了5、6个月的时间,又给你退回来了,要么复查(复查费用得2000多块钱),要么放弃,放弃的话,那么你申请的费用就打水漂了,退不回来了。 好在阿里云推出【商标担保注册申请】服务,有兴趣的可以去了解( 传送门 )。但是这种注册商标时间长、下证书慢,好在阿里云又推出商标交易平台——商标优选。 商标优选官网:https://tm.aliyun.com/trans “商标优选服务”是为阿里云用户提供的,在线挑选闲置商标,发起商标资源受让需求,完成商标专用权转移的全流程服务。小编看了下,平台内有海量的商标供用户选择。 阿里云商标优选平台最大的好处就是量多、价格透明。如果你着急注册商标的话,不妨在这个平台上购买。从购买商标到转让成功拿到注册证书仅需6-7个月,是您商标申请流程周期的一半时间(商标局注册商标周期约为10-12个月)。所购买的商标均为注册商标,不会被商标局驳回,省事省心。 废话不多说了,下面是商标优选交易流程。 1. 挑选商标根据您经营使用及承受能力等方面的需求,挑选满意、适合的商标 2. 下单并支付预付款点击“立即购买”按钮下单,按照提示填写联系信息并支付预付款完成下单。 3. 交易确认您可以在下单的24小时内取消订单,已支付的款项将原路返还。同时专业人员将与商标权利人确认商标可否交易。 4. 文件签署交易确认后,专业人员将与您联系,确认受让人信息并收集办理转让声明公证所需的材料。 专业人员将协助卖家办理《自愿转让声明》公证,并协助您与卖家完成商标转让文件的签署。 5. 转让申请递交专业人员在收集商标转让文件后,将商标转让申请递交商标局,等待商标局审查。 6. 交易完成经商标局审查后核发商标转让核准证明,商标优选服务完成。 所以,如果你需要快速拥有一个属于自己的商标,不妨考虑一下阿里云商标优选平台,平台上的商标明码标价,也不用担心被代理商宰人。
什么是商标优选? “商标优选服务”是为阿里云用户提供的,在线挑选闲置商标,发起商标资源受让需求,完成商标专用权转移的全流程服务。 阿里云对商标进行了初步审查,确保商标为闲置可转让的商标,同时在商标转让过程中,引入公证处提供在线商标转让声明公证服务,提高商标转让的效率和成功率。 商标优选官网:https://tm.aliyun.com/trans 为什么购买已注册商标? 即买即可用购买商标成功后,经转让方授权即可将授权的方式使用注册商标;而普通注册商标自申请全程时间约为12个月。 授权时间短从购买商标到转让成功拿到注册证书仅需6-7个月,是您商标申请流程周期的一半时间。 无驳回风险所购买的商标均为注册商标,不会被商标局驳回,安全保障,让您省心。 为什么选择阿里云的商标优选? 官方自营阿里云官方自营商标交易,保证优选商标的来源真实可靠。 流程省心标准化流程,专业化服务,全程信息记录确保交易顺利。 资金安全先预付款,交易确认无误后再付尾款;交易失败退款,确保资金无损失。 在线公证公证机关出具文件,为商标交易提供法律保证。 小编最近刚好要做一个线上平台,试着购买了一个商标,确实很方便,不至于我商标刚下来,平台就黄了的尴尬局面。最主要是比自己注册商标的时间要短,再有一段时间商标就该到手了。最近有需要购买商标的老铁,不妨去阿里云商标优选官网上去看看,也许会有意想不到的收获。
目标人群 具有商标注册申请经验的域名需求者、云产品购买者,包括大、中、小企业、IP资源拥有者。 自助注册申请商标的好处 阿里云商标注册网站的体验非常好的,都是流程化的操作,很简单。这里的报价是透明的,不会像一些代理商那样,注册一个商标,动辄上千。 但是,【自助注册申请】商标的成功率实在是太低了,毕竟咱不是专业做这个的。 这是我自己选的自助申请注册的,结果过了5、6个月之后,全被驳回了,而且注册费用也打水漂了。 如果你非常着急注册商标的话,我强烈建议选择阿里云的【专家辅助申请】或【担保注册申请】服务。价格相对贵一些,但是如果注册不成功的话,会退钱。相对于耗去的时间来说,几百块钱不算贵,你总不希望注册过了6个月,然后回复你一句“商标局驳回”。 详细参考这里《【教程】阿里云商标担保注册申请快速入门》、《【教程】阿里云商标专家辅助申请快速入门》 申请流程 1. 检索申请商标 商标检索并非商标注册申请的必经程序。我国商标有效注册商标量约1500万件,建议在注册申请之前进行检索,避免与在先商标产生冲突。 2. 填写商标基本信息 单击自助注册申请进入“商标注册”页,根据您需要注册的商标情况,填写信息、生成或上传商标图样。 3. 根据《商标分类》选择指定商品 根据需要保护的商品或服务范围,选择指定的商品或服务项目,或单击“选择推荐方案”下拉菜单,选择与您经营范围相近的领域,系统会推荐注册类别和项目,供您参考使用。单击“立即下单”并确认您已知晓“商标注册申请递交后,在审查阶段存在被商标审查机构驳回的可能,且驳回后不予退费”进入下一步。 4. 创建申请人或选择申请人 根据提示,填写申请人信息创建申请人,上传主体证明、委托书模板等材料,或选择已经通过审核的认证主体。此步骤可跳过,待支付后在商标控制台中找到订单选择“补齐材料”进行创建申请人或选择申请人。 5. 下单支付 确认订单内容及金额,勾选《阿里云商标服务条款》并按照页面提示支付订单,选择您方便的支付方式进行支付。 6. 文件材料初步审核 您选择的主体为认证主体,阿里云会直接递交订单,不再对商标订单进行审核。若您选择新建主体,阿里云会对商标注册申请订单中的信息及材料进行初步审核,如果初审通过,则通过系统进行商标注册申请递交。如果存在问题,订单状态会变更为“审核不通过”并提示原因。注:若订单提交在非工作时间内,会顺延至工作时间内进行。审核时间一般为2小时,若待审订单量较大,时间会有所延迟。 7. 阿里云递交商标注册申请 通过初步审核的商标注册申请订单,在递交时间内,阿里云会通过系统在3个工作日内向商标局递交注册申请,最快在1分钟内完成递交。 超过18:00之后审核通过的商标申请,将在第2日8:00后递交。 国庆、春节假期为商标局服务器固定维护时间,商标申请将在假期结束后的第1个工作日递交。 商标局服务器临时维护,商标申请将在维护结束后网报系统开放后递交。 其他特殊情况。 8. 商标局审查 商标局在接到阿里云递交的商标注册申请会进行以下审查程序:形式审查、实质审查和初步审定公告。形式审查:审查递交的文件是否存在形式上的缺陷和问题。实质审查:商标局根据《商标法》《商标法实施条例》《商标审查标准》对商标标志本身的合法性、显著性及是否与在先商标冲突进行审查。初步审定公告:通过形式审查和实质审查后,商标局会将申请商标刊登在《商标公告》上,若有在先权利人或利害关系人认为申请商标不应注册,可以在3个月内提出“商标异议申请”。 核发注册证书在初步审定公告期结束后,无人提出异议,则商标局会先核发《商标注册证书》电子版并发送给阿里云,阿里云会同步到订单中。2个月左右,商标局会核发纸质《商标注册证书》给阿里云,阿里云将通过快递到付的方式将原件发送给您的申请人联系人的联系地址处,收件人为您填写的联系人。
目标人群 对商标注册申请不了解或者需要有专业顾问提供咨询、注册等服务的域名需求者、云产品购买者,包括大型企业用户、中小企业用户、IP资源拥有者。 专家辅助申请注册商标的好处 阿里云商标注册网站的体验非常好的,相对于自助申请商标,【专家辅助申请】服务能够大大提高商标注册的成功率。【专家辅助申请】服务是付费的,但是这个价格相对那些代理商简直是太便宜了,你可以去对比一下其他小代理商,不要看那些小代理商的价格低,会有很多附加费用的,但是阿里云这里是明码标价的。 【专家辅助申请】服务并不能保证商标一定能注册成功,不过你可以关注一下阿里云商标【担保注册申请】服务,这个价格相对更贵一些,但是如果注册不成功的话,会退钱。相对于耗去的时间来说,几百块钱不算贵,你总不希望注册过了6个月,然后回复你一句“商标局驳回”。详细参考这里《【教程】阿里云商标担保注册申请快速入门》 申请流程 1. 商标信息填写 在阿里云商标服务首页单击“专家辅助申请”进入“商标申请需求”页,填写您要注册商标的需求内容及联系方式,等待专业顾问与您联系。专业顾问会在1小时内与您联系,非工作时间会在下一个工作日与您联系。注意:请确保您的手机未屏蔽阿里云外呼电话,以免服务商工作人员无法联系到您。 2.专业顾问沟通并制定注册方案 阿里云会安排专业代理人与您进行联系,并就商标注册申请事项为您提供以下服务: 申请商标检索及成功率分析 制定商标注册方案 计算申请费用 商标使用建议 商标注册申请的提交 商标申请过程中官方文件的处理 3. 确认方案并支付费用 确认申请方案后确认订单,当您对专业顾问提供的注册方案满意后,由专业顾问对您的服务订单进行必要的信息填写、材料整理完成注册方案,您可以在“阿里云控制台-需求列表”中查看方案、确认价格及核对资料,确认无误后,您可以根据提示进行支付。如您对方案有疑问,可以进行材料反馈,服务商将会与您联系重新确认方案。 4. 递交商标申请 当您确认申请方案后,阿里云将通过系统向商标局递交商标申请。注:因商标局系统开放有规定时间,故此,阿里云每日下午18时之前将审核通过的商标递交到商标局,18时后审核通过的订单在第二日递交。如遇国家法定节日(十一假期或春节假期)或商标局系统维护时间则顺延到下一个工作日递交。 5. 商标局审查 商标局在接到阿里云递交的商标注册申请会进行以下审查程序:形式审查、实质审查和初步审定公告。形式审查:审查递交的文件是否存在形式上的缺陷和问题。实质审查:商标局根据《商标法》《商标法实施条例》《商标审查标准》对商标标志本身的合法性、显著性及是否与在先商标冲突进行审查。初步审定公告:通过形式审查和实质审查后,商标局会将申请商标刊登在《商标公告》上,若有在先权利人或利害关系人认为申请商标不应注册,可以在三个月内提出“商标异议申请”。 6. 申请完成 在初步审定公告期结束后,无人提出异议,则商标局会核发《商标注册证》,阿里云收到商标注册证后,会将证书交由专业顾问转交给您。若商标注册申请被商标局驳回,阿里云会将驳回文件发给专业顾问,由专业顾问提供驳回建议并协助您办理复审事宜。
目标人群 对商标有急迫需求或特定商标有需求的申请人,包括大型企业用户、中小企业用户、IP资源拥有者。 担保注册商标的好处 我们在注册商标时,商标驳回率极高,如果你怕注册费用打水漂了,那么强烈建议你使用阿里云商标注册的【担保注册申请】服务,价格相对专家服务申请贵一些,但是这个是担保注册,也就是说商标注册失败了,会退你钱的,贵是贵了一些,但是相对于耗去的时间来说,几百块钱不算贵,你总不希望注册过了6个月,然后回复你一句“商标局驳回”。 具体可参考这里《阿里云商标注册服务靠谱吗?——失败可退款》 申请流程 1. 商标信息填写 在阿里云商标服务首页单击“担保注册申请”进入“商标信息”页,填写您要注册的商标信息及联系方式,等待专业顾问与您联系。专业顾问会在2小时内与您联系,非工作时间会在下一个工作日与您联系。注意:请确保您的手机未屏蔽阿里云外呼电话,以免服务商工作人员无法联系到您。 2.专业顾问沟通并制定注册方案 阿里云会选择专业顾问与您进行联系,并就商标注册申请事项为您提供以下服务: 申请商标检索及成功率分析 判定申请商标能否购买“担保注册产品” 制定商标注册方案 计算申请费用 商标使用建议 注:因担保注册申请服务在申请不成功后会退还申请人缴纳的所有费用,包括商标局已经收取的官费,故此专业顾问会对商标的注册风险进行评估,若商标明显不能通过审查或风险极大的情况,可以不接受您的购买需求。 3. 确认方案并支付费用 确认申请方案后确认订单,当您对专业顾问提供的注册方案满意后,由专业顾问对您的服务订单进行必要的信息填写并记录注册方案后生成商标注册申请报价单,您根据提示进行支付。 4. 顾问上传申请信息 专业顾问根据注册方案完成商标注册申请的信息填写及材料上传等工作。 5. 递交商标申请 阿里云接到专业顾问提交的商标注册申请后,通过系统向商标局递交。注:因商标局系统开放有规定时间,故此,阿里云每日下午18时之前将审核通过的商标递交到商标局,18时后审核通过的订单在第二日递交。如遇国家法定节日(十一假期或春节假期)或商标局系统维护时间则顺延到下一个工作日递交。 6. 商标局审查 商标局在接到阿里云递交的商标注册申请会进行以下审查程序:形式审查、实质审查和初步审定公告。形式审查:审查递交的文件是否存在形式上的缺陷和问题。实质审查:商标局根据《商标法》《商标法实施条例》《商标审查标准》对商标标志本身的合法性、显著性及是否与在先商标冲突进行审查。初步审定公告:通过形式审查和实质审查后,商标局会将申请商标刊登在《商标公告》上,若有在先权利人或利害关系人认为申请商标不应注册,可以在三个月内提出“商标异议申请”。 7. 申请完成 在初步审定公告期结束后,无人提出异议,则商标局会核发《商标注册证》,阿里云收到商标注册证后,会将证书交由专业顾问转交给您。若商标注册申请被商标局驳回,阿里云会将驳回文件发给专业顾问,由专业顾问提供驳回建议并协助您办理退款。
商标检索使用限制 商标检索结果仅供您参考,不具备法律效力,不作为商标注册成功与否的依据。您也可以参考阿里云商标注册的查询结果。 2018年1-9月,商标注册申请550.7万件,实质审查538.5万件,初步审定320.8万件,占比58.6%。部分驳回85.9万件,占比15.95%;驳回131.7万件,占比24.45%。所以,您要充分了解商标注册申请存在被商标局驳回的风险,且注册申请驳回后,除“专家担保注册”产品外,其余产品均不予退费。 根据近期商标审查实务,商标驳回率极高,故此,您要了解商标注册申请存在驳回的可能,同时申请商标时要制定备用方案。 详细参考《如何提高阿里云商标注册的成功率?》 商标注册申请产品使用限制 因商标注册申请存在驳回的风险,且近两年驳回率较高,故此“自助注册申请”建议具有商标申请经验的用户使用。 “专家辅助申请”“担保注册申请”服务的专业顾问是服务商提供,相关权利义务由服务商承担,阿里云对服务商的服务标准和质量进行监控。 注册商标续展申请产品使用限制 中国大陆注册商标 商标不存在注销、撤销等失效的情况 续展申请人名义与商标局登记的商标注册人名义一致 续展申请日期在法律规定的可续展期限内 商标监控产品的使用限制 商标监控数据是通过现有公开数据分析得出的,可能与商标局的商标数据存在差异或延迟。阿里云商标监控数据仅供您参考,不具有法律效力。
近期,阿里云推出了最新的第六代云服务器s6实例,该实例为共享标准型实例。较比上一代的共享标准型实例,在性能上大幅提升,但是价格下降了42%。废话不多说了,先来看看本次推出的ECS实例S6. 阿里云共享标准型s6实例介绍 1、处理器采用Intel Xeon Platinum 8269CY(Cascade Lake),主频2.5Ghz。睿频3.2Ghz。共享型实例居然含睿频,挺良心的。2、总体性能对比上一代共享型实例规格族(xn4、n4、mn4和e4)大幅提升 。3、使用DDR4内存。4、含1:1、1:2、1:4多种处理器与内存配比,可以适应计算要求,通用要求和大内存缓存要求。5、IO优化实例,可支持硬盘为ESSD云盘、SSD云盘和高效云盘。6、只支持专有网络VPC,支持IPv4和IPv6。7、主要适用于中小型网站服务器前后端,开发环境、构建服务器、代码存储库、微服务、测试和暂存环境等,轻量级数据库,轻量级缓存服务器,小程序服务器,其他轻量级企业应用。 阿里云共享标准型s6实例规格配置 共享标准型s6实例参数指标 s6实例阉割了部分内网宽带、网络收发包能力、队列、可挂载IP。CPU为100%虚拟化性能。口说无凭,请详看下面的性能测试结果: 实例可选地域节点 大陆地域:华北1(青岛)、华北2(北京)、华北3(张家口)、华北5(呼和浩特)、华东1(杭州)、华东2(上海)、华南1(深圳)、华南2(河源); 其他国家和地区:中国香港、亚太东南1(新加坡)、亚太东南2(悉尼)、亚太东南3(吉隆坡)、亚太东南5(雅加达)、亚太南部1(孟买)、亚太东北1(东京)、美国西部1(硅谷)、美国东部1(弗吉尼亚)、欧洲中部1(法兰克福)、英国(伦敦)、中东东部1(迪拜)。 价格方面 目前,阿里云刚推出2款S6型ECS实例,分别为1核1G1M 142.8元/年和2核4G1M 1601.4元/年。(仅限新用户购买,老用户暂时无法购买) 活动页面:传动门 最后说一句,很多人一看到“共享”二字就对此有所偏解,以为这样的服务器性能不好。小编一直用的就是XN4的共享服务器,已经稳定允许了5、6年了,基本上没怎么重新重启服务器。 大家可以测试一下:https://ping.gaomeluo.com/aliyun/ 而最新的推出的共享标准型实例S6,肯定比XN4型的服务器差不了,目前S6服务器已上线,有需要采购和了解的网友可以直接去活动看看,还可以领取官方折扣券。
近期,阿里云公布了最新的云服务器ECS服务等级协议SLA,单实例的可用性从99.95%提升至99.975%,多可用区多实例可用性从99.99%提升至99.995%,均为全球最高水准。 什么是SLA? SLA就是服务等级协议,指的是服务提供商与客户之间就服务质量所达成的双方共同认可的协议,它表明了公有云提供服务的等级以及质量。 举个例子: 以前是多可用多实例的可用性是99.99%,如果这个月也是30天,意味着每个月服务不可用时间是4.32分钟,如果提升到99.995%,每个月服务不可用时间是2.16分钟,不可用时间缩短了一半,也就是说,虽然阿里云把SLA只是往小数点后增加了一位,但是意味着阿里云ECS服务器的稳定性提升一倍。 各大云服务提供商对公开承诺提升SLA都非常谨慎,因为涉及到赔偿,过度承诺往往意味着公司的大量资损。一起来看下国际上其他云厂商的服务等级协议标准。 阿里云向客户提供的云服务器 ECS(简称“ECS”)的服务可用性等级指标及赔偿方案。 1、服务可用性计算方式 ECS的服务可用性将根据服务周期,按如下两种维度分别统计每台ECS实例的可用性: (1)单实例维度: 服务可用性=(单实例服务周期总分钟数 - 单实例服务不可用分钟数)/单实例服务周期总分钟数×100% (2)单地域多可用区维度: 服务可用性=(单实例服务周期总分钟数 - 单实例单地域多可用区服务不可用分钟数)/单实例服务周期总分钟数×100% 2、服务可用性承诺 (1)对于单实例维度, 阿里云承诺一个服务周期内ECS的服务可用性不低于99.975%; (2)对于单地域多可用区维度,阿里云承诺一个服务周期内ECS的服务可用性不低于99.995%。 3、如ECS未达到上述可用性承诺,客户可以根据本协议第3条约定获得赔偿。赔偿范围不包括以下原因所导致的服务不可用: (1)任何阿里云所属设备以外的网络、设备故障或配置调整引起的; (2)客户的应用程序受到黑客攻击而引起的; (3)客户维护不当或保密不当致使数据、口令、密码等丢失或泄漏所引起的; (4)客户的疏忽或由客户授权的操作所引起的; (5)客户未遵循阿里云产品使用文档或使用建议引起的,如客户在控制台、API或者CLI等控制方式对ECS实例进行停机、重启、卸载云盘等操作引起的不可用; (6)本地盘出现宕机数据会被擦除,依赖本地盘及本地盘中数据作为启动依赖项而导致的不可用; (7)由于客户所安装软件或者其他非阿里云直接运营的第三方软件或者配置引起的ECS实例出现错误; (8)由于客户违反《云服务器(ECS)服务条款》导致的服务被暂停或终止,包括但竞价实例因为客户的出价低于交割价格而被释放;由于欠费导致ECS实例被暂停服务或被释放等; (9)《云服务器服务(ECS)服务条款》中所描述的阿里云对ECS正常维护、升级所引起的短时服务中断; (10)不可抗力引起的。 4、赔偿标准 (1)对于单ECS实例,如服务可用性低于99.975%,可按照下表中的标准获得赔偿,赔偿方式仅限于用于购买ECS产品的代金券,且赔偿总额不超过未达到服务可用性承诺当月客户就该ECS实例支付的单实例月度服务费(不含用代金券抵扣的费用)。 (2)对于以单地域多可用区部署的ECS,如服务可用性低于99.995%,可按照下表中的标准获得赔偿,赔偿方式仅限于用于购买ECS产品的代金券,且赔偿总额不超过未达到服务可用性承诺当月,用户就该ECS实例支付的月度服务费(不含用代金券抵扣的费用)。 (3)如某ECS 实例同时满足上面2个的赔偿标准,则以其中赔偿额较高者为准计算赔偿金额。 5、赔偿申请时限 客户可以在每月第五(5)个工作日后对上个月没有达到可用性的ECS实例提出赔偿申请。赔偿申请必须限于在ECS没有达到服务可用性的相关月份结束后两(2)个月内提出。超出申请时限的赔偿申请将不被受理。 我们看到的是仅仅小数点后增加了一位数,其实这背后,是中国的云计算技术在走向成熟,并超越国外的技术实力与自信。 有需要用到阿里云的,可以去阿里云官网去看看,现在正在做活动(活动传送门)
所需材料: 域名1个。 虚拟机或者云服务器1台。 ssl证书1个。 前提准备: 域名最好要备案,在国内使用比较方便。 推荐使用阿里云服务器。(阿里云哪个地域节点的服务器好、速度快,参考这里:https://ping.gaomeluo.com/aliyun/ ) ECS为Linux系统,安装的是宝塔控制面板(如何安装宝塔控制面板) 阿里云可以免费申请ssl证书。 操作步骤: 1、申请免费1年的ssl证书(传送门)。 免费证书,只能使用一个域名,不支持主域名下的二级域名,请悉知。不过1个阿里云帐号可以申请20个免费证书,对于普通账户足够了。 2、购买完成后,需要补全信息。这里填写你要做https的域名仔细填写,我的域名和ecs都是阿里云的,直接就选择了DNS。邮箱要填仔细了,后面需要认证忘了截图,借的一张图,我是选择系统生成CSR接下来,系统会给你发一封邮件,如下图按照邮件的提示,对于名进行解析操作。接下来就是等待,上述红框内是待审核状态,我的已经签发了。这个审核时间不会太长的。点击下载,跳转到如下界面我的ECS装的是宝塔控制面板nginx环境,所以下载的是nginx证书下载的是一个安装包,解压即可 之前已经教大家如何安装宝塔控制面板(不会的点这里:https://aliyun.gaomeluo.com/398.html ),现在可以派上用场了,安装超简单,步骤如下: 3、登录宝塔控制面板,点击“添加”,跳出一个弹窗,输入你申请了ssl证书的那个域名,并顺带创建FTP、数据库等信息。4、提交之后,点击左侧“网站”,进入网站管理页面,选择你刚才的输入域名的网站,点击右边的“设置”。5、出现一个弹窗,点击左侧的“SSL”,这时上一个申请阿里云盾ssl证书的教程,最后一步让大家下载的证书派上用途了(我的环境是Nginx,所以下载的Nginx证书),解压下载的证书,用txt打开,复制内容分别填到上图的框框里。记住,右上角的“强制HTTPS”一定要选上,然后“保存”。(强制HTTPS打开是为了防止http和https同时存在,打开之后,输入http就会跳转到https上)。在浏览器网址栏里输入你的网址,会自动跳转到 https://www.xxx.com ,如下图:6、出现了“恭喜,站点创建成功!”,说明一个https的网站已经搭建成功了,已经实现了全站https。现在你可以登录FTP,然后删除FTP根目录下的index.html,然后再上传你的网站源码,安装网站。 用宝塔控制面板操作就是这么简单,这也是我为什么推荐网友或新手站长用宝塔建站的原因。 推荐使用阿里云的ECS,我的网站就是搭建在阿里云的ecs上,稳定。(购买阿里云服务器,可以领取一个代金券) 下一个教程分享一下,如何优化WordPress站点的打开速度 。
所需材料: 域名1个。 虚拟机或者云服务器1台。 ssl证书1个。 前提准备: 域名最好要备案,在国内使用比较方便。 推荐使用阿里云服务器。(阿里云哪个地域节点的服务器好、速度快,参考这里:https://ping.gaomeluo.com/aliyun/ ) ECS为Linux系统,安装的是宝塔控制面板(如何安装宝塔控制面板) 阿里云可以免费申请ssl证书。 操作步骤: 1、申请免费1年的ssl证书(传送门:https://common-buy.aliyun.com/?spm=5176.2020520163.cas.29.N0xOPM&commodityCode=cas#/buy )。 免费证书,只能使用一个域名,不支持主域名下的二级域名,请悉知。不过1个阿里云帐号可以申请20个免费证书,对于普通账户足够了。 2、购买完成后,需要补全信息。这里填写你要做https的域名仔细填写,我的域名和ecs都是阿里云的,直接就选择了DNS。邮箱要填仔细了,后面需要认证忘了截图,借的一张图,我是选择系统生成CSR接下来,系统会给你发一封邮件,如下图按照邮件的提示,对于名进行解析操作。接下来就是等待,上述红框内是待审核状态,我的已经签发了。这个审核时间不会太长的。点击下载,跳转到如下界面我的ECS装的是宝塔控制面板nginx环境,所以下载的是nginx证书下载的是一个安装包,解压即可 之前已经教大家如何安装宝塔控制面板(不会的点这里:https://aliyun.gaomeluo.com/398.html ),现在可以派上用场了,安装超简单,步骤如下: 3、登录宝塔控制面板,点击“添加”,跳出一个弹窗,输入你申请了ssl证书的那个域名,并顺带创建FTP、数据库等信息。4、提交之后,点击左侧“网站”,进入网站管理页面,选择你刚才的输入域名的网站,点击右边的“设置”。5、出现一个弹窗,点击左侧的“SSL”,这时上一个申请阿里云盾ssl证书的教程,最后一步让大家下载的证书派上用途了(我的环境是Nginx,所以下载的Nginx证书),解压下载的证书,用txt打开,复制内容分别填到上图的框框里。记住,右上角的“强制HTTPS”一定要选上,然后“保存”。(强制HTTPS打开是为了防止http和https同时存在,打开之后,输入http就会跳转到https上)。在浏览器网址栏里输入你的网址,会自动跳转到 https://www.xxx.com ,如下图:6、出现了“恭喜,站点创建成功!”,说明一个https的网站已经搭建成功了,已经实现了全站https。现在你可以登录FTP,然后删除FTP根目录下的index.html,然后再上传你的网站源码,安装网站。 用宝塔控制面板操作就是这么简单,这也是我为什么推荐网友或新手站长用宝塔建站的原因。 推荐使用阿里云的ECS,我的网站就是搭建在阿里云的ecs上,稳定。(购买阿里云服务器,可以领取一个代金券) 下一个教程分享一下,如何优化WordPress站点的打开速度 。
教程目的: 帮助小白用户,快速学会安装宝塔控制面板,并通过宝塔控制面板快速搭建建站环境。 所需材料: 云服务器一台,系统要选用Linux的,Linux相比win系统省配置:建议使用阿里云服务器,稳定(阿里云全球19个地域节点,哪个节点的服务器好,速度快?参考这里:https://ping.gaomeluo.com/aliyun/) 远程工具:XShell 宝塔控制面板:里面有插件、提交工单啥的会用到。传送门 宝塔控制面板安装步骤如下: 1、使用远程工具XShell,链接你的Linux服务器。信息填写如下: 上面这个图,点击左上角的“+”,出现此图,你可以服务器的公网ip及端口填写,协议选SSH,顺便写个名称,标记一下。下完之后点击“用户身份验证”,如下图。 上图,填写你服务器的用户名和密码,并点击确认,最后点击左上角箭头,再点击你保存设置的那个服务器名称,既可以进入安装环境。 2、输入如下代码, yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh 建议复制粘贴到对话框,然后回车键enter 它会自动下载并运行install.sh 这里询问你是否安装面板,输入 y。 这个面板应该是一直在完善当中,就例如这块,其实应该加入一个默认安装敲击回车确认安装的过程。 好了,我们开始进入安装程序,因为是一键安装,1核2G的服务器时间大约5分钟左右安装完成。 安装的过程中会有红色提醒 DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6 百度翻译了一下大意是,Python2.6 官方已经不支持了,慎用。不过不是什么大事,可以忽略。 面板安装的速度挺快,最后会给你一个ip加默认8888端口号的面板账号密码,密码是自动生成的。 登录地址:js http://xxx.xx.xxx.xxx:8888/ (xxx.xx.xxx.xxx是你服务器的公网ip。一般是这个格式的,不过第一次进去之后,可以设置绑定域名登录) 注意:阿里云安全组的规则一定要允许8888端口,很多人无法使用IP:8888登录就是因为没有开放8888端口。 出现如下界面,说明你的linux宝塔面板已经安装完毕。 好了,下面我来教大家,如何通过宝塔控制面板创建一个https的网站
教程目的:帮助小白用户,快速学会安装宝塔控制面板,并通过宝塔控制面板快速搭建建站环境。所需材料:云服务器一台,系统要选用Linux的,Linux相比win系统省配置:建议使用阿里云服务器,稳定(阿里云全球19个地域节点,哪个节点的服务器好,速度快?参考这里:https://ping.gaomeluo.com/aliyun/)远程工具:XShell宝塔控制面板:里面有插件、提交工单啥的会用到。传送门宝塔控制面板安装步骤如下:1、使用远程工具XShell,链接你的Linux服务器。信息填写如下:上面这个图,点击左上角的“+”,出现此图,你可以服务器的公网ip及端口填写,协议选SSH,顺便写个名称,标记一下。下完之后点击“用户身份验证”,如下图。上图,填写你服务器的用户名和密码,并点击确认,最后点击左上角箭头,再点击你保存设置的那个服务器名称,既可以进入安装环境。2、输入如下代码,yum install -y wget && wget -O install.sh http://download.bt.cn/install/install.sh && sh install.sh建议复制粘贴到对话框,然后回车键enter它会自动下载并运行install.sh这里询问你是否安装面板,输入 y。 这个面板应该是一直在完善当中,就例如这块,其实应该加入一个默认安装敲击回车确认安装的过程。好了,我们开始进入安装程序,因为是一键安装,1核2G的服务器时间大约5分钟左右安装完成。安装的过程中会有红色提醒DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6百度翻译了一下大意是,Python2.6 官方已经不支持了,慎用。不过不是什么大事,可以忽略。面板安装的速度挺快,最后会给你一个ip加默认8888端口号的面板账号密码,密码是自动生成的。登录地址:js http://xxx.xx.xxx.xxx:8888/ (xxx.xx.xxx.xxx是你服务器的公网ip。一般是这个格式的,不过第一次进去之后,可以设置绑定域名登录)注意:阿里云安全组的规则一定要允许8888端口,很多人无法使用IP:8888登录就是因为没有开放8888端口。出现如下界面,说明你的linux宝塔面板已经安装完毕。好了,下面我来教大家,如何通过宝塔控制面板创建一个https的网站
随着国内版权意识普及率越来越高,很多人对商标有了新的认识。都想着如何通过商标来保护自己的利益。 如何提高阿里云商标注册的成功率? 但是,申请商标却不是那么容易的事。申请一个商标快则10个来月,慢则需要一年多的时间。这不是最主要的,最气人的是商标申请过了5、6个月的时间,又给你退回来了,要么复查(复查费用得2000多块钱),要么放弃,放弃的话,那么你申请的费用就打水漂了,退不回来了。 网上有很多所谓的商标注册砖家,说什么商标包注册下证书,这都是骗人的,没有哪个人能保证一定能下证书。这只是概率问题。 找代理机构注册商标,商标成功率高一些,但是价格贵啊。其实商标还可以自助申请注册,比较自助申请注册只需要官费就行了。 受够了商标局的那个网站系统卡、慢、崩溃,估计你注册商标的兴趣一下子就没有了,这里我推荐你使用阿里云的商标注册服务,只需付商标局的官费即可,不需要额外费用。不用担心被那些商标代理商宰割了。 阿里云商标注册网址:https://tm.aliyun.com/ 阿里云商标注册网站的体验非常好的,如果你要提高商标注册的成功率,那么推荐你使用阿里云商注册的【专家辅助申请】服务,这个价格相对那些代理商简直是太便宜了,你可以去对比一下。 如果你害怕说注册的商标不成功,又怕注册费用打水漂了,那么强烈建议你使用阿里云商标注册的【担保注册申请】服务,价格相对专家服务申请贵一些,但是这个是担保注册,也就是说商标注册失败了,会退你钱的,贵是贵了一些,但是相对于耗去的时间来说,几百块钱不算贵,你总不希望注册过了6个月,然后回复你一句“商标局驳回”。 小编也是偶尔看到这个阿里云这个平台,试着自己自助提交了一些商标。结果很不理想,如下图: 可惜我的这些商标申请费用都打水漂了,退不回来了。我对一些争议比较大的商标申请的是【担保注册申请】服务,这种注册成功率就大了很多,基本上都是【商标局审核通过】状态。如下图,已经公示快下证书了。 所以,如果你是小白,想注册商标,那么建议你使用阿里云商标注册的【专家辅助申请】和【担保注册申请】服务,成功率真的大了很多,而且明码标价,不宰人。注册完成后,后台管理也是比较方便的。 如果你想通过商标注册来合法保护自身权益,那么赶快行动吧。阿里云这么大的平台,还是非常靠谱的。 申请之前,你还可以领取一个阿里云代金券,注册商标有优惠!
删库跑路这种说法其实也是程序员枯燥生活一种自我解压的方式,真要这么玩基本上这个程序员在软件行业也就不用混了,不仅仅是职业素质的问题,还涉及到人品问题了,曾经听过删库的程序员,基本上外包性质的公司比较多,尾款迟迟不到位,矛盾激化到一定程度直接把数据库给干掉,这种事情也存在先例。真要删库肯定要承担刑事责任的。 这就是让程序猿删库跑路的命令,使用须谨慎顺便给大家推荐个超级好用的工具, Linux命令查询工具:https://linux.gaomeluo.com/ “删库跑路”虽然是个梗,但是我们还是要了解一下删库跑路的命令:rm 命令 rm:用于删除给定的文件和目录 补充说明 rm 命令 可以删除一个目录中的一个或多个文件或目录,也可以将某个目录及其下属的所有文件及其子目录均删除掉。对于链接文件,只是删除整个链接文件,而原有文件保持不变。 注意:使用rm命令要格外小心。因为一旦删除了一个文件,就无法再恢复它。所以,在删除文件之前,最好再看一下文件的内容,确定是否真要删除。rm命令可以用-i选项,这个选项在使用文件扩展名字符删除多个文件时特别有用。使用这个选项,系统会要求你逐一确定是否要删除。这时,必须输入y并按Enter键,才能删除文件。如果仅按Enter键或其他字符,文件不会被删除。 语法 rm (选项)(参数) 选项 -d:直接把欲删除的目录的硬连接数据删除成0,删除该目录; -f:强制删除文件或目录; -i:删除已有文件或目录之前先询问用户; -r或-R:递归处理,将指定目录下的所有文件与子目录一并处理; --preserve-root:不对根目录进行递归操作; -v:显示指令的详细执行过程。 参数 文件:指定被删除的文件列表,如果参数中含有目录,则必须加上-r或者-R选项。 实例 交互式删除当前目录下的文件test和example rm -i test example Remove test ?n(不删除文件test) Remove example ?y(删除文件example) 删除当前目录下除隐含文件外的所有文件和子目录 # rm -r * 应注意,这样做是非常危险的! rm 命令删除文件 # rm 文件1 文件2 ... rm testfile.txt rm 命令删除目录 rm -r [目录名称] -r 表示递归地删除目录下的所有文件和目录。 -f 表示强制删除 rm -rf testdir rm -r testdir 删除操作前有确认提示 rm -i [文件/目录] rm -r -i testdir rm 忽略不存在的文件或目录 -f 选项(LCTT 译注:即 “force”)让此次操作强制执行,忽略错误提示 rm -f [文件...] 仅在某些场景下确认删除 选项 -I,可保证在删除超过 3 个文件时或递归删除时(LCTT 译注: 如删除目录)仅提示一次确认。 rm -I file1 file2 file3 删除根目录 当然,删除根目录(/)是 Linux 用户最不想要的操作,这也就是为什么默认 rm 命令不支持在根目录上执行递归删除操作。 然而,如果你非得完成这个操作,你需要使用 --no-preserve-root 选项。当提供此选项,rm 就不会特殊处理根目录(/)了。 不给实例了,操作系统都被你删除了,你太坏了 rm 显示当前删除操作的详情 rm -v [文件/目录] 好了,“删库跑路”布道完毕。详情页参考:https://linux.gaomeluo.com/c/rm.html
随着版权意识在国内越来越强,这两年从视频到歌曲,再到如今的微信微博等媒体强烈追求原创;无论是设计师还是新媒体运营者,都对版权问题越来越重视。 近几年软著市场非常混乱,各大代理商要价不一,一不小心就被宰了。近期,阿里云推出了计算机软件著作权服务,帮助从事互联网行业的人士快速申请自己的软著。 废话不多说了,下面是详细的登记注册教程。 准备材料:阿里云账户、办理资料如下 第一步:注册阿里云账户 阿里云注册地址:https://account.aliyun.com/register/register.htm 注册完之后,需要对阿里云账户进行实名认证,参考认证教程:https://help.aliyun.com/knowledge_list/37170.html 第二步:软件著作权申请 这里以正常加急算,也就是35个工作日的为教程。 阿里云软件著作权申请入口:https://www.aliyun.com/acts/domain/copyright 如上图,选择正常加急自助35个工作日,立即购买。(当然,你要是着急的话,也可以选择10个工作日、20个工作日审查时间,基本上都是很准时下证书,这一点阿里云的实力还是可以保证的。) 如上图,确认购买。(这里的399元相对来讲,价格透明,还是很便宜的,不过你还可以领取阿里云代金券,支付的时候选上优惠券,可以省下一部分钱.) 购买完成之后,如上图,需要填写你要申请软著的相关信息和资料。然后按照提示下一步、下一步,直至提交。 如上图,阿里云会对你申请的软著进行初审,初审通过之后,就会提交给版权保护中心。 版权保护中心审核通过之后就会发放《软件著作权登记证书》,在阿里云后台是可以下载电子版的。当然,也会给你回寄纸质版的证书。 是不是很简单?赶快下单吧,祝你尽快申请下自己的软件著作书。别忘了领取阿里云代金券 。 原文:https://aliyun.gaomeluo.com/548.html
import Vue form 'vue’的意思 1、import Vue form ‘vue’ 写全的话是import Vue from ‘…/nodemouls/vue/list/vue.js’; 此时在webpack.base.conf.js中进行了定义,内置了一些选项,extenions:[’.js’,’.vue’,’.json’],意思是省略后面的后缀,由webpack来自动为我们加上。 2、如果名字比较长,还可以起个别名。 alias:{ ‘@’:resolve(‘src’)}, 它的意思是在vue项目中,引入路径的时候使用@即代表src文件夹,省去了…/…/…/的操作,这样写比较十分方便。 3、当我们在模板中写img的时候有时也需要翻着找,那么能用@代替吗?答案是当然可以的,比如在assets文件夹中有张图片,logo.png。以往写可能是: <img src="../../src/assets/logo.png"> 现在知道怎么回事以后可以直接这样写: <img src="@/assets/logo.png"> 4、试验发现这是能成功的,但是lssue提出的方案是在@前面加上~。两者均能成功 更多请参考《Vue常用经典开源项目汇总参考》
一、配置文件的语法格式: 先来看一个简单的nginx 配置 worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } location /nginx_status { stub_status on; access_log off; } } } 上述配置中的events、http、server、location、upstream等属于配置项块。而worker_processes 、worker_connections、include、listen 属于配置项块中的属性。 /nginx_status 属于配置块的特定参数参数。其中server块嵌套于http块,其可以直接继承访问Http块当中的参数。 配置块 名称开头用大括号包裹其对应属性 属性 基于空格切分属性名与属性值,属性值可能有多个项 都以空格进行切分 参数 其配置在 块名称与大括号间,其值如果有多个也是通过空格进行拆 二、配置第一个静态WEB服务 1.创建站点目录 mkdir -p /usr/www/snowman 2.编写静态文件 echo 'the first static site' > first.html 3.配置 nginx.conf 配置server和location在nginx.conf中原本就存在server,可以重新配置一个同级别的server,多个同端口的server保证server_name不相同就行了,这里就直接演示原本配置的server就好了 在这里情境下 “location /”匹配输入改虚拟机ip的请求; “root /usr/www/snowman”表示到/usr/www/snowman路径下去找文件; “index first.html”表示如果请求没有制定文件就用改默认文件。 (注:如果local /后面还加路径,会被加到root后面,例:local /aaa,那么在找的时候就找/usr/www/snowman/aaa) 保存退出,./sbin/nginx -s reload重载输入虚拟机IP进行访问就能访问到刚刚建立的那个html 三、基本配置介绍说明 1.监听端口 语法:listen address:默认:listen 80;配置块:server 2.主机名称 语法:server_name name[……];默认:server_name “”;配置块:serverserver_name后可以跟多个主机名称,如server_name www.aaa.com、bbb.aaa.com;。 支持通配符与正则 3.location 语法:location[=|~|~*|^~|@]/uri/{……} 配置块:server / 基于uri目录匹配 =表示把URI作为字符串,以便与参数中的uri做完全匹配。 ~表示正则匹配URI时是字母大小写敏感的。 ~*表示正则匹配URI时忽略字母大小写问题。 ~表示正则匹配URI时只需要其前半部分与uri参数匹配即可。 如需上云,可考虑如下阿里云服务器,活动有优惠。 阿里云服务器:活动地址 购买可领取:阿里云代金券 购买前可以测一下阿里云哪个节点的云服务器速度快:https://ping.gaomeluo.com/aliyun/ 原文:https://blog.gaomeluo.com/archives/nginxpeizhiweb/
以下方式基于 @vue/cli 快速搭建的交互式项目脚手架 1. 路由懒加载 当打包构建应用时,JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。 结合 Vue 的异步组件和 Webpack 的代码分割功能,轻松实现路由组件的懒加载。 1 import Vue from 'vue' 2 import Router from 'vue-router' 3 import store from './store' 4 import Home from './views/Home.vue' 5 6 Vue.use(Router) 7 8 const router = new Router({ 9 routes: [ 10 { 11 path: '/', 12 name: 'home', 13 component: Home, 14 }, 15 { 16 path: '/make', 17 name: 'make', 18 component: () => import(/* webpackChunkName: "make" */ './views/Make.vue'), 19 } 20 ], 21 }) 2. webpack动态导入 将statically import(静态导入) 改为 dynamic import(动态导入)进行代码拆分 1 import(/* webpackChunkName: "html2canvas" */ 'html2canvas').then( 2 ({ default: html2canvas }) => { 3 html2canvas(document.querySelector('.container'), { 4 scale: window.devicePixelRatio, 5 allowTaint: false, 6 useCORS: true, 7 }).then(canvas => { 8 console.log(canvas.toDataURL('image/jpeg', 0.9)) 9 }) 10 } 11 ) 3. 预取/预加载模块(prefetch/preload module) 在声明 import 时,使用下面这些内置指令,可以让 webpack 输出 "resource hint(资源提示)",来告知浏览器: prefetch(预取):将来某些导航下可能需要的资源 preload(预加载):当前导航下可能需要资源 import(/* webpackPrefetch: true */ 'LoginModal'); import(/* webpackPreload: true */ 'ChartingLibrary'); 这会生成 <link rel="prefetch" href="login-modal-chunk.js"> 并追加到页面头部,指示着浏览器在闲置时间预取 login-modal-chunk.js 文件。 只要父 chunk 完成加载,webpack 就会添加 prefetch hint(预取提示)。 与 prefetch 指令相比,preload 指令有许多不同之处: preload chunk 会在父 chunk 加载时,以并行方式开始加载。prefetch chunk 会在父 chunk 加载结束后开始加载。 preload chunk 具有中等优先级,并立即下载。prefetch chunk 在浏览器闲置时下载。 preload chunk 会在父 chunk 中立即请求,用于当下时刻。prefetch chunk 会用于未来的某个时刻。 浏览器支持程度不同。 vue默认开启,可在vue.config.js中全局禁用prefetch,再针对指定模块开启。 chainWebpack: config => { config.plugins.delete('prefetch') }, 4. 添加Gzip打包配置(compression-webpack-plugin) yarn add compression-webpack-plugin -D configureWebpack: config => { const CompressionPlugin = require('compression-webpack-plugin') config.plugins.push(new CompressionPlugin()) } 5. 添加页面预渲染(prerender-spa-plugin) 在单页应用程序中预呈现静态HTML,可以极大的提高网页访问速度,而且配合一些meat插件,基本可以满足SEO需求。 预渲染基本上是在启动无头浏览器,加载应用程序的路由并将结果保存到静态HTML文件中。然后将其与以前使用的任何静态文件服务解决方案一起使用,是无需更改代码或添加服务器端渲染的解决方法。 不过,它仅适用于HTML5 history,因为每个预渲染的路由都会生成一个对应的HTML,在hash模式下使用只会有一个HTML。 yarn add prerender-spa-plugin -D 1 configureWebpack: config => { 2 const path = require('path') 3 const PrerenderSPAPlugin = require('prerender-spa-plugin') 4 config.plugins.push( 5 new PrerenderSPAPlugin({ 6 staticDir: path.join(__dirname, 'dist'), 7 routes: ['/'], 8 minify: { 9 collapseBooleanAttributes: true, 10 collapseWhitespace: true, 11 keepClosingSlash: true, 12 decodeEntities: true, 13 sortAttributes: true, 14 }, 15 renderer: new PrerenderSPAPlugin.PuppeteerRenderer({ 16 renderAfterDocumentEvent: 'render-event', 17 renderAfterTime: 5000, 18 // headless: false, 19 }), 20 }) 21 ) 22 } 23 24 new Vue({ 25 router, 26 store, 27 render: h => h(App), 28 mounted() { 29 // 预渲染 renderAfterDocumentEvent. 30 document.dispatchEvent(new Event('render-event')) 31 }, 32 }).$mount('#app') prerender-spa-plugin 利用了 Puppeteer 的爬取页面的功能。 Puppeteer 是一个 Chrome官方出品的 headlessChromenode 库。它提供了一系列的 API, 可以在无 UI 的情况下调用 Chrome 的功能, 适用于爬虫、自动化处理等各种场景。它很强大,所以很简单就能将运行时的 HTML 打包到文件中。原理是在 Webpack 构建阶段的最后,在本地启动一个 Puppeteer 的服务,访问配置了预渲染的路由,然后将 Puppeteer 中渲染的页面输出到 HTML 文件中,并建立路由对应的目录。 6. 压缩js,删除console(terser-webpack-plugin) yarn add terser-webpack-plugin -D 1 configureWebpack: config => { 2 const TerserPlugin = require('terser-webpack-plugin') 3 config.optimization.minimizer.push( 4 new TerserPlugin({ 5 extractComments: false, 6 terserOptions: { compress: { drop_console: true } }, 7 }) 8 ) 9 } 7. bundle 分析(webpack-bundle-analyzer) 将 bundle 内容展示为便捷的、交互式、可缩放的树状图形式。 yarn add -D webpack-bundle-analyzer 1 configureWebpack: config => { 2 const BundleAnalyzerPlugin = require('webpack-bundle-analyzer') 3 .BundleAnalyzerPlugin 4 config.plugins.push(new BundleAnalyzerPlugin()) 5 } 8. WebP WebP(发音 weppy),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8。根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这些 PNG 文件经过其他压缩工具压缩之后,WebP 还是可以减少 28% 的文件大小。 不过WebP目前在IOS上兼容性不好,可以使用JavaScript进行检测,对支持 WebP 的用户输出 WebP 图片。 1 created() { 2 const htmlClass = document.documentElement.classList 3 this.checkWebpSupport() ? htmlClass.add('webps') : htmlClass.remove('webps') 4 } 5 6 checkWebpSupport() { 7 try { 8 return ( 9 document 10 .createElement('canvas') 11 .toDataURL('image/webp') 12 .indexOf('data:image/webp') === 0 13 ) 14 } catch (err) { 15 return false 16 } 17 } 记一次BUG: 在默认情况下,页面加载完成执行 this.checkWebpSupport() && document.documentElement.classList.add('webps'),没有问题。 但使用了prerender-spa-plugin进行预渲染后,因为执行预渲染的浏览器是支持WebP的,所有会直接在页面中加上'webps'类,所以即使浏览器不支持WebP,不执行此方法也会有该类名。 9. 网页性能优化测试(googlespeed) 进行网页测试,根据优化建议针对性的修改,提高网页加载速度。 https://www.googlespeed.cn/ 如需上云,可考虑如下阿里云服务器,活动有优惠。 阿里云服务器:活动地址 购买前可测一下阿里云哪个节点的云服务器速度快:https://ping.gaomeluo.com/aliyun/ 原文:https://blog.gaomeluo.com/archives/vuexingnengyouhua/
以下方式基于 @vue/cli 快速搭建的交互式项目脚手架 1. 路由懒加载 当打包构建应用时,JavaScript 包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效了。 结合 Vue 的异步组件和 Webpack 的代码分割功能,轻松实现路由组件的懒加载。 1 import Vue from 'vue' 2 import Router from 'vue-router' 3 import store from './store' 4 import Home from './views/Home.vue' 5 6 Vue.use(Router) 7 8 const router = new Router({ 9 routes: [ 10 { 11 path: '/', 12 name: 'home', 13 component: Home, 14 }, 15 { 16 path: '/make', 17 name: 'make', 18 component: () => import(/* webpackChunkName: "make" */ './views/Make.vue'), 19 } 20 ], 21 }) 2. webpack动态导入 将statically import(静态导入) 改为 dynamic import(动态导入)进行代码拆分 1 import(/* webpackChunkName: "html2canvas" */ 'html2canvas').then( 2 ({ default: html2canvas }) => { 3 html2canvas(document.querySelector('.container'), { 4 scale: window.devicePixelRatio, 5 allowTaint: false, 6 useCORS: true, 7 }).then(canvas => { 8 console.log(canvas.toDataURL('image/jpeg', 0.9)) 9 }) 10 } 11 ) 3. 预取/预加载模块(prefetch/preload module) 在声明 import 时,使用下面这些内置指令,可以让 webpack 输出 "resource hint(资源提示)",来告知浏览器: prefetch(预取):将来某些导航下可能需要的资源 preload(预加载):当前导航下可能需要资源 import(/* webpackPrefetch: true */ 'LoginModal'); import(/* webpackPreload: true */ 'ChartingLibrary'); 这会生成 <link rel="prefetch" href="login-modal-chunk.js"> 并追加到页面头部,指示着浏览器在闲置时间预取 login-modal-chunk.js 文件。 只要父 chunk 完成加载,webpack 就会添加 prefetch hint(预取提示)。 与 prefetch 指令相比,preload 指令有许多不同之处: preload chunk 会在父 chunk 加载时,以并行方式开始加载。prefetch chunk 会在父 chunk 加载结束后开始加载。 preload chunk 具有中等优先级,并立即下载。prefetch chunk 在浏览器闲置时下载。 preload chunk 会在父 chunk 中立即请求,用于当下时刻。prefetch chunk 会用于未来的某个时刻。 浏览器支持程度不同。 vue默认开启,可在vue.config.js中全局禁用prefetch,再针对指定模块开启。 chainWebpack: config => { config.plugins.delete('prefetch') }, 4. 添加Gzip打包配置(compression-webpack-plugin) yarn add compression-webpack-plugin -D configureWebpack: config => { const CompressionPlugin = require('compression-webpack-plugin') config.plugins.push(new CompressionPlugin()) } 5. 添加页面预渲染(prerender-spa-plugin) 在单页应用程序中预呈现静态HTML,可以极大的提高网页访问速度,而且配合一些meat插件,基本可以满足SEO需求。 预渲染基本上是在启动无头浏览器,加载应用程序的路由并将结果保存到静态HTML文件中。然后将其与以前使用的任何静态文件服务解决方案一起使用,是无需更改代码或添加服务器端渲染的解决方法。 不过,它仅适用于HTML5 history,因为每个预渲染的路由都会生成一个对应的HTML,在hash模式下使用只会有一个HTML。 yarn add prerender-spa-plugin -D 1 configureWebpack: config => { 2 const path = require('path') 3 const PrerenderSPAPlugin = require('prerender-spa-plugin') 4 config.plugins.push( 5 new PrerenderSPAPlugin({ 6 staticDir: path.join(__dirname, 'dist'), 7 routes: ['/'], 8 minify: { 9 collapseBooleanAttributes: true, 10 collapseWhitespace: true, 11 keepClosingSlash: true, 12 decodeEntities: true, 13 sortAttributes: true, 14 }, 15 renderer: new PrerenderSPAPlugin.PuppeteerRenderer({ 16 renderAfterDocumentEvent: 'render-event', 17 renderAfterTime: 5000, 18 // headless: false, 19 }), 20 }) 21 ) 22 } 23 24 new Vue({ 25 router, 26 store, 27 render: h => h(App), 28 mounted() { 29 // 预渲染 renderAfterDocumentEvent. 30 document.dispatchEvent(new Event('render-event')) 31 }, 32 }).$mount('#app') prerender-spa-plugin 利用了 Puppeteer 的爬取页面的功能。 Puppeteer 是一个 Chrome官方出品的 headlessChromenode 库。它提供了一系列的 API, 可以在无 UI 的情况下调用 Chrome 的功能, 适用于爬虫、自动化处理等各种场景。它很强大,所以很简单就能将运行时的 HTML 打包到文件中。原理是在 Webpack 构建阶段的最后,在本地启动一个 Puppeteer 的服务,访问配置了预渲染的路由,然后将 Puppeteer 中渲染的页面输出到 HTML 文件中,并建立路由对应的目录。 6. 压缩js,删除console(terser-webpack-plugin) yarn add terser-webpack-plugin -D 1 configureWebpack: config => { 2 const TerserPlugin = require('terser-webpack-plugin') 3 config.optimization.minimizer.push( 4 new TerserPlugin({ 5 extractComments: false, 6 terserOptions: { compress: { drop_console: true } }, 7 }) 8 ) 9 } 7. bundle 分析(webpack-bundle-analyzer) 将 bundle 内容展示为便捷的、交互式、可缩放的树状图形式。 yarn add -D webpack-bundle-analyzer 1 configureWebpack: config => { 2 const BundleAnalyzerPlugin = require('webpack-bundle-analyzer') 3 .BundleAnalyzerPlugin 4 config.plugins.push(new BundleAnalyzerPlugin()) 5 } 8. WebP WebP(发音 weppy),是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8。根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这些 PNG 文件经过其他压缩工具压缩之后,WebP 还是可以减少 28% 的文件大小。 不过WebP目前在IOS上兼容性不好,可以使用JavaScript进行检测,对支持 WebP 的用户输出 WebP 图片。 1 created() { 2 const htmlClass = document.documentElement.classList 3 this.checkWebpSupport() ? htmlClass.add('webps') : htmlClass.remove('webps') 4 } 5 6 checkWebpSupport() { 7 try { 8 return ( 9 document 10 .createElement('canvas') 11 .toDataURL('image/webp') 12 .indexOf('data:image/webp') === 0 13 ) 14 } catch (err) { 15 return false 16 } 17 } 记一次BUG: 在默认情况下,页面加载完成执行 this.checkWebpSupport() && document.documentElement.classList.add('webps'),没有问题。 但使用了prerender-spa-plugin进行预渲染后,因为执行预渲染的浏览器是支持WebP的,所有会直接在页面中加上'webps'类,所以即使浏览器不支持WebP,不执行此方法也会有该类名。 9. 网页性能优化测试(googlespeed) 进行网页测试,根据优化建议针对性的修改,提高网页加载速度。 https://www.googlespeed.cn/ 如需上云,可考虑阿里云服务器,活动有优惠。 阿里云服务器:活动地址 购买前可以测一下阿里云哪个节点的云服务器速度快:https://ping.gaomeluo.com/aliyun/ 原文地址:https://blog.gaomeluo.com/archives/vuexingnengyouhua/
一,介绍 1.1,Dart Dart 是一种 易于学习、 易于扩展、并且可以部署到 任何地方 的 应用 编程 语言。并且同时借鉴了Java和JavaScript。Dart在静态语法方面和Java非常相似,如类型定义、函数声明、泛型等,而在动态特性方面又和JavaScript很像,如函数式特性、异步支持等。 1.2,Flutter Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。 Flutter提供了丰富的组件、接口,开发者可以很快地为 Flutter添加 native扩展。同时 Flutter还使用 Native引擎渲染视图。 二,开发环境配置 2.1,安装Flutter 第一步:配置镜像 由于在国内访问Flutter有时可能会受到限制,Flutter官方为中国开发者搭建了临时镜像,大家可以将如下环境变量加入到用户环境变量中: 1 export PUB_HOSTED_URL=https://pub.flutter-io.cn 2 export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn 如下图所示: 第二步:获取Flutter SDK 去flutter官网下载其最新可用的安装包,下载地址:https://flutter.dev/docs/development/tools/sdk/releases ,打开后如图所示: 1、将安装包zip解压到你想安装Flutter SDK的路径(如:D:flutter;注意,不要将flutter安装到需要一些高权限的路径如C:Program Files)。 2、在Flutter安装目录的flutter文件下找到flutter_console.bat,双击运行并启动flutter命令行,接下来,你就可以在Flutter命令行运行flutter命令了。 第三步:配置环境变量 如果不配置环境变量,在全局环境中是无法使用flutter命令的,转到 “控制面板>用户帐户>用户帐户>更改我的环境变量”,在Path下添加D:flutterbin条目,保存即可。 第四步:运行 flutter doctor命令 在Flutter命令行运行如下命令来查看是否还需要安装其它依赖,如果需要,安装它们: 1 flutter doctor 该命令检查你的环境并在命令行窗口中显示报告。Dart SDK已经在打包在Flutter SDK里了,没有必要单独安装Dart。安装完成后再运行flutter doctor命令来验证是否安装成功。 2.2,windows与mac本配置(模拟器) windows下sdk与jdk配置:https://help.aliyun.com/knowledge_detail/40814.html mac本下sdk与jdk配置:https://yq.aliyun.com/articles/250951 2.3,编辑器配置 常用编辑器是VS Code,故此这儿主要介绍VS Code的配置,VS Code支持Flutter运行和调试。 安装flutter插件 启动 VS Code。 调用 View>Command Palette…。 输入 ‘install’, 然后选择 Extensions: Install Extension action。 在搜索框输入 flutter ,在搜索结果列表中选择 ‘Flutter’, 然后点击 Install。 选择 ‘OK’ 重新启动 VS Code。 验证配置 调用 View>Command Palette… 输入 ‘doctor’, 然后选择 ‘Flutter: Run Flutter Doctor’ action。 查看“OUTPUT”窗口中的输出是否有问题 创建Flutter应用 启动 VS Code 调用 View>Command Palette… 输入 ‘flutter’, 然后选择 ‘Flutter: New Project’ action 输入 Project 名称 (如myapp), 然后按回车键 指定放置项目的位置,然后按蓝色的确定按钮 等待项目创建继续,并显示main.dart文件 VS Code格式化dart代码的快捷方式是shift+alt+f 三,项目搭建 第一步:创建Flutter应用 1 flutter create yingqi_flutter 第二步:底部tab Flutter中的路由管理和原生开发类似,无论是Android还是iOS,导航管理都会维护一个路由栈,路由入栈(push)操作对应打开一个新页面,路由出栈(pop)操作对应页面关闭操作,而路由管理主要是指如何来管理路由栈。 1 final result = 2 await Navigator.of(context).push(MaterialPageRoute(builder: (context) { 3 return LoginPage(); 4 })); 1 Navigator.pop(context, "refresh"); 1 class AppHomeState extends State<AppHome> { 2 final appBarTitles = ['首页', '资讯', '产品', '我的']; 3 4 ... 5 6 int _tabIndex = 0; 7 8 var tabImages; 9 var _body; 10 var pages; 11 12 Image getTabImage(path) { 13 return Image.asset(path, width: 20.0, height: 20.0); 14 } 15 16 @override 17 void initState() { 18 super.initState(); 19 20 ... 21 22 }); 23 pages = <Widget>[HomePage(), NewsPage(), ProductPage(), MyPage()]; 24 if (tabImages == null) { 25 tabImages = [ 26 [ 27 getTabImage('images/ic_nav_news_normal.png'), 28 getTabImage('images/ic_nav_news_actived.png') 29 ], 30 [ 31 getTabImage('images/ic_nav_tweet_normal.png'), 32 getTabImage('images/ic_nav_tweet_actived.png') 33 ], 34 [ 35 getTabImage('images/ic_nav_discover_normal.png'), 36 getTabImage('images/ic_nav_discover_actived.png') 37 ], 38 [ 39 getTabImage('images/ic_nav_my_normal.png'), 40 getTabImage('images/ic_nav_my_pressed.png') 41 ] 42 ]; 43 } 44 } 45 46 TextStyle getTabTextStyle(int curIndex) { 47 if (curIndex == _tabIndex) { 48 return tabTextStyleSelected; 49 } 50 return tabTextStyleNormal; 51 } 52 53 Image getTabIcon(int curIndex) { 54 if (curIndex == _tabIndex) { 55 return tabImages[curIndex][1]; 56 } 57 return tabImages[curIndex][0]; 58 } 59 60 Text getTabTitle(int curIndex) { 61 return Text(appBarTitles[curIndex], style: getTabTextStyle(curIndex)); 62 } 63 64 @override 65 Widget build(BuildContext context) { 66 _body = IndexedStack( 67 children: pages, 68 index: _tabIndex, 69 ); 70 return MaterialApp( 74 home: Scaffold( 80 body: _body, 81 bottomNavigationBar: CupertinoTabBar( 82 items: <BottomNavigationBarItem>[ 83 BottomNavigationBarItem( 84 icon: getTabIcon(0), 85 title: getTabTitle(0)), 86 BottomNavigationBarItem( 87 icon: getTabIcon(1), 88 title: getTabTitle(1)), 89 BottomNavigationBarItem( 90 icon: getTabIcon(2), 91 title: getTabTitle(2)), 92 BottomNavigationBarItem( 93 icon: getTabIcon(3), 94 title: getTabTitle(3)), 95 ], 96 currentIndex: _tabIndex, 97 onTap: (index) { 98 setState((){ 99 _tabIndex = index; 100 }); 101 }, 102 ), 103 ), 104 ); 105 } 106 } 第三步:包管理与资源配置 Flutter项目默认的配置文件是pubspec.yaml,包与资源配置,均修改此文件 包配置如下图所示: dependencies:应用或包依赖的其它包或插件。 flutter:flutter相关的配置选项。 http: ^0.12.0就是项目中需要使用外部包配置,使用如下命令即可下载: 1 flutter packages get 资源配置如下图所示: 需要使用什么资源,以图片中的格式在assets下继续添加即可。 第四步:数据缓存 1,在pubspec.yaml文件中,添加如下包: 1 shared_preferences: ^0.4.3 2,数据记录类 1 import 'package:shared_preferences/shared_preferences.dart'; 2 import 'dart:async'; 3 4 class DataUtils { 5 6 ... 7 8 } 3,用户登录信息操作 1 static const String SP_USER_NAME = "name"; 2 static const String SP_USER_ID = "userId"; 3 static const String SP_IS_LOGIN = "isLogin"; 4 5 // 保存用户登录信息,data中包含了token等信息 6 static saveLoginInfo(Map data) async { 7 if (data != null) { 8 SharedPreferences sp = await SharedPreferences.getInstance(); 9 String userId = data['UserId']; 10 await sp.setString(SP_USER_ID, userId); 11 String name = data['Name']; 12 await sp.setString(SP_USER_NAME, name); 13 await sp.setBool(SP_IS_LOGIN, true); 14 } 15 } 16 17 // 清除登录信息 18 static clearLoginInfo() async { 19 SharedPreferences sp = await SharedPreferences.getInstance(); 20 await sp.setString(SP_USER_ID, ""); 21 await sp.setString(SP_USER_NAME, ""); 22 await sp.setBool(SP_IS_LOGIN, false); 23 } 24 25 // 获取用户登录信息 26 static Future<LoginInfo> getLoginInfo() async { 27 SharedPreferences sp = await SharedPreferences.getInstance(); 28 bool isLogin = sp.getBool(SP_IS_LOGIN); 29 if (isLogin == null || !isLogin) { 30 return null; 31 } 32 LoginInfo loginInfo = LoginInfo(); 33 loginInfo.userId = sp.getString(SP_USER_ID); 34 loginInfo.name = sp.getString(SP_USER_NAME); 35 return loginInfo; 36 } 如需搭建Flutter之环境配置与项目,可采购阿里云服务器, 阿里云服务器正在做活动:活动地址
双十一是一个全民狂欢的购物节,对于我们程序圈也不例外。各大云厂商都举行了促销活动,然而对于一些技术小白,一直会有一个苦恼,到底该选哪一厂商的云服务器呢? 其实很简单,哪个厂商的份额大,你就选这哪个厂商的云服务器。然而,国内云市场的主要市场主要就是阿里云、华为云、腾讯这三家,所以你选择这三家厂商的准没错。千万不要相信一些小厂子的如何好、如何便宜,真要这么好,也不会有那么低的市场份额了。要买就买大厂子的云服务器,质量有保障,也避免日后迁移数据造成的不必要麻烦。 但是在这三家又该选择哪家的呢?无非就是价格、性能、稳定性这几项来衡量。 一、下面我们来说一说这三家厂商云服务器的活动价格。 太多比对没啥意思,咱们就选择这三家入门级(1核2G)的云服务做一下比较。新手购买价格 这里我只选择1核2G做对比,其他的暂不做对比(其他服务器的带宽、规格都有差异,不好对比),从价格来看,基本上都差不多。 这里有个小插曲,我看到某微信平台发的一篇文章,发现这篇评测简直就是纯属为了黑而黑,如下图:上图的两种规格的服务器他做的对比,我特意去3家平台对比了下,这里阿里云的价格比其他2家的要高,难道没看到他们这几款规格服务器的带宽吗?把另外2家的1M服务器跟阿里云同规格3M的服务器做对比,这样的价格对比有意义吗? 二、接下来我们来说一说这三家厂商云服务器的性能。 三家厂商的服务器型号如下。 阿里云:突发性能型t5,t5处理器,skylake,20%性能基线。(活动链接)华为云:S6云服务器。腾讯云:标准型S4,100%CPU性能。 不要被这些厂商的一些性能数据/数字所迷惑,我不懂你也不懂,那些数据针对特大型网站才能体现的出现,一般的中小型网站你根本察觉不出来。你就看CPU的性能就行,这里阿里云给出的是20%的性能基线,华为云没具体给出,腾讯云给出的是100%性能。 有人说阿里云这也太会玩了,我写过一篇文章《2019双十一阿里云最便宜的云服务器性能怎么样?》,你可以看一下,一般的网站用到的CPU能达到20%的时候,也该升级整体配置了,所以这个是完全够用的,你完全可以忽略。 三、我们再来说一说这三家厂商云服务器的稳定性。 针对这三家云服务器的稳定性,其实都大差不差,都有光缆被挖的事件。但是就在刚刚过去的双十一,天猫、淘宝全部上云完全能扛得住瞬间爆发的流量洪流来看,可以单独给阿里云加个分。考虑到前不久有爆料腾讯云的丢数据事件,所以该云需要减个分。 最后,我们再来看看中国公有云市场份额,如下图: (引用IDC《中国公有云服务市场2019上半年跟踪》报告制图) 从上图可以看出,阿里云的市场份额已经超过第2-5名总和了。 看到这里,相信你应该知道该选择哪个厂商的云服务器了。 不知道选哪个区域?可以来ping测试哪个区域服务器的响应速度。 阿里云:https://ping.gaomeluo.com/aliyun/ 原文:https://blog.gaomeluo.com/archives/shuang11yunzhujipingce/
准备材料: 1、注册微信开放平台2、域名1个。需要备案3、ssl证书1个。现在微信平台都要https了4、服务器1台。推荐:阿里云服务器。如果不会建站,可参考《如何用云服务器搭建一个https的网站?》 一、微信开放平台操作步骤 微信开放平台地址:https://open.weixin.qq.com 一定要注意,网站集成微信登录需要在微信开放平台操作,它和微信公众平台不一样,虽然双方最后的用户唯一标识都是openId,但是是不互通的。如果开发平台想和公众平台相互通,两个平台得互相绑定,然后获取唯一识别的unionId。 下面说下在开放平台上的操作步骤: 1.创建“网站应用” 由于到对接PC网站登录,所以创建“网站应用”,操作截图如下: 新建网站应用截图 2.获取AppID和AppSecret 等微信审核通过后,会分配对应的AppId,AppSecret需要管理员扫描生成,生成后截图如下: 查看AppId截图 二、开发指南 微信OAuth2.0授权登录让微信用户使用微信身份安全登录第三方应用或网站,在微信用户授权登录已接入微信OAuth2.0的第三方应用后,第三方可以获取到用户的接口调用凭证(access_token),通过access_token可以进行微信开放平台授权关系接口调用,从而可实现获取微信用户基本开放信息和帮助用户实现基础开放功能等,整体流程为: 1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第三方网站,并且带上授权临时票据code参数; 2. 通过code参数加上AppID和AppSecret等,通过API换取access_token; 3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。 三、开发实战 项目中使用了开源项目WxJava,WxJava源码地址(https://github.com/Wechat-Group/WxJava); 先新建要给Spring Boot项目,具体可以参考文章 https://mp.weixin.qq.com/s/YW9nWbtHAMHWQ--PgUmZRg 新建好项目后,继续按照下面步骤操作即可。 1、pom.xml引入jar包 <!-- 微信登录jar --> <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-mp</artifactId> <version>3.3.0</version> </dependency> 2、配置文件添加对应的配置 配置appId和appSecret,application.yml内如下: wx: mp: configs: - appid: wx1********* secret: *********** token: aesKey: msgDataFormat: 3、初始化配置 WxMpProperties.java代码如下: @Data @ConfigurationProperties(prefix = "wx.mp") public class WxMpProperties { private List<MpConfig> configs; @Data public static class MpConfig { /** * 设置微信公众号的appid */ private String appId; /** * 设置微信公众号的app secret */ private String secret; /** * 设置微信公众号的token */ private String token; /** * 设置微信公众号的EncodingAESKey */ private String aesKey; } } WxMpConfiguration.java代码如下: @Slf4j @Configuration @EnableConfigurationProperties(WxMpProperties.class) public class WxMpConfiguration { private static Map<String, WxMpService> mpServices = Maps.newHashMap(); public static Map<String, WxMpService> getMpServices() { return mpServices; } @Autowired private WxMpProperties properties; @Autowired private WxMpInRedisConfigStorageMy configStorage; @PostConstruct public void initServices() { // 代码里 getConfigs()处报错的同学,请注意仔细阅读项目说明,你的IDE需要引入lombok插件!!!! final List<WxMpProperties.MpConfig> configs = this.properties.getConfigs(); if (configs == null) { throw new RuntimeException("大哥,拜托先看下项目首页的说明(readme文件),添加下相关配置,注意别配错了!"); } mpServices = configs.stream().map(a -> { //redis configStorage.setAppId(a.getAppId()); configStorage.setSecret(a.getSecret()); configStorage.setToken(a.getToken()); configStorage.setAesKey(a.getAesKey()); WxMpService service = new WxMpServiceImpl(); service.setWxMpConfigStorage(configStorage); log.info("配置的appId={}",a.getAppId()); return service; }).collect(Collectors.toMap(s -> s.getWxMpConfigStorage().getAppId(), a -> a, (o, n) -> o)); } } 4、控制层核心代码 @Slf4j @Controller @RequestMapping("/redirect/{appid}") public class WxRedirectController { /** * 获取用户信息 * */ @RequestMapping("/getUserInfo") public void getBase(HttpServletRequest request, HttpServletResponse response, @PathVariable String appid, @RequestParam("code") String code) { WxMpService mpService = WxMpConfiguration.getMpServices().get(appid); try { WxMpOAuth2AccessToken accessToken = mpService.oauth2getAccessToken(code); log.info("accessToken={}", JSON.toJSONString(accessToken)); WxMpUser wxMpUser = mpService.oauth2getUserInfo(accessToken, null); log.info("wxMpUser={}", JSON.toJSONString(wxMpUser)); } catch (Exception e) { log.error("获取用户信息异常!", e); } } } 四、运行效果 1.构造pc端链接 https://open.weixin.qq.com/connect/qrconnect?appid=wx12345678redirect_uri=http%3a%2f%2fwww.test.com%2fredirect%2fwx12345678%2fgetUserInfo&response_type=code&scope=snsapi_login&state=STATE#wechat_redirect 打开上面链接后截图如下: 2.微信扫描生成的二维码 微信扫描后手机端截图如下: 微信用户使用微信扫描二维码并且确认登录后,PC端会跳转到 http://www.test.com/redirect/wx12345678/getUserInfo?code=CODE&state=STATE 3.获取微信用户信息 控制层代码可以接收到上code和state参数,根据这两个参数可以获取微信用户信息,请求过来后打印用户信息的日志如下: [http-nio-8104-exec-2] INFO c.t.m.s.c.WxRedirectController - accessToken={"accessToken":"24_vWnvRSV9vmR7qOqhJKRoER93bhsPg","expiresIn":7200,"openId":"oRXsdsUh6scaKof3D1I4d3c","refreshToken":"24_WmknxCn9ff2Pl2xhLFw-kY96p6zgiqFJy8LMIOP_CaMZOHEM","scope":"snsapi_login","unionId":"oJxUkwfFOSyu1oC6oF2h6pTI"} [http-nio-8104-exec-2] INFO c.t.m.s.c.WxRedirectController - wxMpUser={"city":"","country":"","headImgUrl":"https://thirdwx.qlogo.cn/mmopen/vi_32/Q3auHgzwzM4ibeAsuoVIf3qr4QxjnNWh4Q1WiawCFNfzkGMzVqubPOnr0hA3Micwsu1LtblQ7phImdYSC2nic6OUicQ/132","language":"","nickname":"阿白","openId":"oRXsdsUh6scaKof3D1I4d3c","privileges":[],"province":"","sex":0,"sexDesc":"未知","unionId":"oaDUkwVfCpMJOSyu1oC2oF2h6pTI"} 到此PC网站集成微信登录已经全部实现完成了
很多人都知道阿里云推出了学生机,因为学生机便宜,CPU性能又没有限制,所以深受编程专业的学生的青睐。下面就是阿里云学生机的官方网址。 云翼计划官方网址:https://promotion.aliyun.com/ntms/act/campus2018.html 那么阿里云学生机的性能怎么样呢? 阿里云翼计划推出的云服务器有两种类型:轻量应用服务器和云服务器ECS。轻量应用服务器:CPU1核,内存2G,峰值带宽5M,系统盘40G,1000G流量包,专有网络,系列三,优惠地域为华南1、华北2、华东2;云服务器ECS:CPU1核,内存2G,带宽1M,系统盘40G,专有网络,系列三,优惠地域为华北2、华东2; 这两个服务器的配置方面差不多,都是1H2G,就是宽带不太一样。轻量应用服务器是5M 10000G流量,而云服务器ECS则是1M的小水管子。如果是我选择的话,我会选择轻量应用服务器。但是从实际的购买热度来看,网友更倾向于云服务器ECS,而在我实际使用当中,感觉轻量应用服务器跟云服务器ECS没有区别,轻量应用服务器也可以ssh安装环境。 阿里云的学生机虽好,但是也有一些闲置,下面描述,希望搞编程的学生详细阅读,有帮助的。 阿里云的学生机只能买一次,对于要求,现在官方有所放宽,只要符合24周岁以下新客要求,均可参加此活动。 云翼计划推出的两款学生机价格一样,一月仅需9.5元,包年才114元,非常划算。 所以尽量整年购买,不要单月购买,另外也别退款,以免损失首够资格,就没有优惠了。 可以在这里看《阿里云学生机可以买几次?》
环境准备 一台服务器、预装CentOS7系统国内最大的云服务器就是阿里云,所以推荐使用阿里云的服务器。阿里云有个最新活动专题页:https://www.aliyun.com/activity,里面有阿里云服务器的最新活动,都是一些活动服务器,可以关注一下,非常划算。 可以ping一下阿里云哪个节点比较好:https://ping.gaomeluo.com/aliyun/ Docker 安装 如果已经安装Docker请忽略此步骤 Docker支持以下的CentOS版本: CentOS 7 (64-bit):要求系统为64位、系统内核版本为 3.10 以上。 CentOS 6.5(64-bit)或更高的版本:要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。 CentOS 仅发行版本中的内核支持 Docker。 yum安装 Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看上文的前提条件来验证你的CentOS 版本是否支持 Docker 。 # 查看内核版本 $ uname -a #安装 Docker $ yum -y install docker #启动 Docker 后台服务 $ service docker start # 由于本地没有hello-world这个镜像,所以会下载一个hello-world的镜像,并在容器内运行。 $ docker run hello-world 脚本安装 使用 sudo 或 root 权限登录 Centos。 确保 yum 包更新到最新。 $ sudo yum update 获取并执行 Docker 安装脚本。 $ curl -fsSL https://get.docker.com -o get-docker.sh # 执行这个脚本会添加 docker.repo 源并安装 Docker。 $ sudo sh get-docker.sh 启动Docker $ sudo systemctl start docker # 验证 docker 是否安装成功并在容器中执行一个测试的镜像。 $ sudo docker run hello-world $ docker ps 镜像加速 开始让我配置国内镜像源的时候我是拒绝的,但是使用之后发现那下载速度 duang~ 的一下就上去了。所以强烈建议大家配置国内镜像源。打开/创建 /etc/docker/daemon.json 文件,添加以下内容: { "registry-mirrors": ["http://hub-mirror.c.163.com"] } Zookeeper集群搭建 Zookeeper镜像:zookeeper:3.4 镜像准备 $ docker pull zookeeper:3.4 查找镜像可以去 https://hub.docker.com/docker pull images:TAG // 代表拉取 TAG 版本的 image 镜像 建立独立Zookeeper容器 我们首先用最简单的方式创建一个独立的Zookeeper节点,然后我们根据这个例子创建出其他的节点。 $ docker run --name zookeeper -p 2181:2181 -d zookeeper:3.4 默认的,容器内配置文件在, /conf/zoo.cfg,数据和日志目录默认在 /data 和 /datalog,需要的话可以将上述目录映射到宿主机。 参数解释 --name:指定容器名字 -p:为容器暴露出来的端口分配端口号 -d:在后台运行容器并打印容器ID 集群搭建 其它节点的Zookeeper容器创建方式与创建独立容器类似,需要注意的是,要分别指定节点的id和修改文件中多节点的配置,相应的创建命令如下: 新建docker网络 $ docker network create zoo_kafka $ docker network ls Zookeeper容器1 $ docker run -d \ --restart=always \ -v /opt/docker/zookeeper/zoo1/data:/data \ -v /opt/docker/zookeeper/zoo1/datalog:/datalog \ -e ZOO_MY_ID=1 \ -p 2181:2181 \ -e ZOO_SERVERS="server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \ --name=zoo1 \ --net=viemall-zookeeper \ --privileged \ zookeeper:3.4 Zookeeper容器2 $ docker run -d \ --restart=always \ -v /opt/docker/zookeeper/zoo2/data:/data \ -v /opt/docker/zookeeper/zoo2/datalog:/datalog \ -e ZOO_MY_ID=2 \ -p 2182:2181 \ -e ZOO_SERVERS="server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \ --name=zoo2 \ --net=viemall-zookeeper \ --privileged \ zookeeper:3.4 Zookeeper容器3 $ docker run -d \ --restart=always \ -v /opt/docker/zookeeper/zoo3/data:/data \ -v /opt/docker/zookeeper/zoo3/datalog:/datalog \ -e ZOO_MY_ID=3 \ -p 2183:2181 \ -e ZOO_SERVERS="server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888" \ --name=zoo3 \ --net=viemall-zookeeper \ --privileged \ zookeeper:3.4 这种方式虽然也实现了我们想要的,但是步骤过于繁琐,而且维护起来麻烦(懒癌晚期),所以我们使用 docker-compose 的方式来实现。 docker-compose 搭建zookeeper集群 新建docker网络 $ docker network create viemall-zookeeper $ docker network ls 编写 docker-compose.yml 脚本 使用方式: 安装 docker-compose # 获取脚本 $ curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose # 赋予执行权限 $chmod +x /usr/local/bin/docker-compose 任意目录下新建 docker-compose.yml 文件,复制以下内容执行命令 js docker-compose up -d 命令对照 |命令|解释| |-|-| |docker-compose up|启动所有容器| |docker-compose up -d|后台启动并运行所有容器| |docker-compose up --no-recreate -d|不重新创建已经停止的容器| |docker-compose up -d test2|只启动test2这个容器| |docker-compose stop|停止容器| |docker-compose start|启动容器| |docker-compose down|停止并销毁容器| docker-compose.yml下载地址:https://github.com/JacianLiu/docker-compose/tree/master/zookeeperdocker-compose.yml详情 version: '2' services: zoo1: image: zookeeper:3.4 # 镜像名称 restart: always # 当发生错误时自动重启 hostname: zoo1 container_name: zoo1 privileged: true ports: # 端口 - 2181:2181 volumes: # 挂载数据卷 - ./zoo1/data:/data - ./zoo1/datalog:/datalog environment: TZ: Asia/Shanghai ZOO_MY_ID: 1 # 节点ID ZOO_PORT: 2181 # zookeeper端口号 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 # zookeeper节点列表 networks: default: ipv4_address: 172.23.0.11 zoo2: image: zookeeper:3.4 restart: always hostname: zoo2 container_name: zoo2 privileged: true ports: - 2182:2181 volumes: - ./zoo2/data:/data - ./zoo2/datalog:/datalog environment: TZ: Asia/Shanghai ZOO_MY_ID: 2 ZOO_PORT: 2181 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 networks: default: ipv4_address: 172.23.0.12 zoo3: image: zookeeper:3.4 restart: always hostname: zoo3 container_name: zoo3 privileged: true ports: - 2183:2181 volumes: - ./zoo3/data:/data - ./zoo3/datalog:/datalog environment: TZ: Asia/Shanghai ZOO_MY_ID: 3 ZOO_PORT: 2181 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 networks: default: ipv4_address: 172.23.0.13 networks: default: external: name: zoo_kafka 验证 从图中我们可以看出,有一个Leader,两个Flower,至此我们的Zookeeper集群就已经搭建好了 Kafka集群搭建 有了上面的基础,再去搞Kafka集群还是问题吗?其实就是几个变量值不同而已。 有了上边的例子,就不费劲去搞单节点的Kafka了,直接使用docker-compose的方式,部署三个节点,其实方式大同小异,上边也说到,其实就是一些属性不同而已;这时候我们就不需要再去新建 Docker 网络了,直接使用前边搭建 Zookeeper 集群时创建的网络即可! 环境准备 Kafka镜像:wurstmeister/kafkaKafka-Manager镜像:sheepkiller/kafka-manager # 不指定版本默认拉取最新版本的镜像 docker pull wurstmeister/kafka docker pull sheepkiller/kafka-manager 编写 docker-compose.yml 脚本 使用方式: 安装 docker-compose # 获取脚本 $ curl -L https://github.com/docker/compose/releases/download/1.25.0-rc2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose # 赋予执行权限 $chmod +x /usr/local/bin/docker-compose 任意目录下新建 docker-compose.yml 文件,复制以下内容执行命令 docker-compose up -d 命令对照 |命令|解释| |-|-|-| |docker-compose up|启动所有容器| |docker-compose up -d|后台启动并运行所有容器| |docker-compose up --no-recreate -d|不重新创建已经停止的容器| |docker-compose up -d test2|只启动test2这个容器| |docker-compose stop|停止容器| |docker-compose start|启动容器| |docker-compose down|停止并销毁容器| docker-compose.yml下载地址:https://github.com/JacianLiu/docker-compose/tree/master/zookeeperdocker-compose.yml详细内容 version: '2' services: broker1: image: wurstmeister/kafka restart: always hostname: broker1 container_name: broker1 privileged: true ports: - "9091:9092" environment: KAFKA_BROKER_ID: 1 KAFKA_LISTENERS: PLAINTEXT://broker1:9092 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker1:9092 KAFKA_ADVERTISED_HOST_NAME: broker1 KAFKA_ADVERTISED_PORT: 9092 KAFKA_ZOOKEEPER_CONNECT: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1 JMX_PORT: 9988 volumes: - /var/run/docker.sock:/var/run/docker.sock - ./broker1:/kafka/kafka\-logs\-broker1 external_links: - zoo1 - zoo2 - zoo3 networks: default: ipv4_address: 172.23.0.14 broker2: image: wurstmeister/kafka restart: always hostname: broker2 container_name: broker2 privileged: true ports: - "9092:9092" environment: KAFKA_BROKER_ID: 2 KAFKA_LISTENERS: PLAINTEXT://broker2:9092 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker2:9092 KAFKA_ADVERTISED_HOST_NAME: broker2 KAFKA_ADVERTISED_PORT: 9092 KAFKA_ZOOKEEPER_CONNECT: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1 JMX_PORT: 9988 volumes: - /var/run/docker.sock:/var/run/docker.sock - ./broker2:/kafka/kafka\-logs\-broker2 external_links: # 连接本compose文件以外的container - zoo1 - zoo2 - zoo3 networks: default: ipv4_address: 172.23.0.15 broker3: image: wurstmeister/kafka restart: always hostname: broker3 container_name: broker3 privileged: true ports: - "9093:9092" environment: KAFKA_BROKER_ID: 3 KAFKA_LISTENERS: PLAINTEXT://broker3:9092 KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker3:9092 KAFKA_ADVERTISED_HOST_NAME: broker3 KAFKA_ADVERTISED_PORT: 9092 KAFKA_ZOOKEEPER_CONNECT: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1 JMX_PORT: 9988 volumes: - /var/run/docker.sock:/var/run/docker.sock - ./broker3:/kafka/kafka\-logs\-broker3 external_links: # 连接本compose文件以外的container - zoo1 - zoo2 - zoo3 networks: default: ipv4_address: 172.23.0.16 kafka-manager: image: sheepkiller/kafka-manager:latest restart: always container_name: kafka-manager hostname: kafka-manager ports: - "9000:9000" links: # 连接本compose文件创建的container - broker1 - broker2 - broker3 external_links: # 连接本compose文件以外的container - zoo1 - zoo2 - zoo3 environment: ZK_HOSTS: zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1 KAFKA_BROKERS: broker1:9092,broker2:9092,broker3:9092 APPLICATION_SECRET: letmein KM_ARGS: -Djava.net.preferIPv4Stack=true networks: default: ipv4_address: 172.23.0.10 networks: default: external: # 使用已创建的网络 name: zoo_kafka 验证 我们打开kafka-manager的管理页面,访问路径是,宿主机ip:9000;如果所示,填写上Zookeeper集群的地址,划到最下边点击save点击刚刚添加的集群,可以看到,集群中有三个节点 搭建过程中遇到的问题 1、挂载数据卷无限重启,查看log提示:chown: changing ownership of ‘/var/lib/mysql/....‘: Permission denied解决方式: 在docker run中加入 --privileged=true 给容器加上特定权限 临时关闭selinux: setenforce 0 添加selinux规则,改变要挂载的目录的安全性文本 2、kafka-manager报jmx相关错误,解决方法: 在每一个kafka节点加上环境变量 JMX_PORT=端口 加上之后发现连不上,又是网络连接的问题,于是又把每个jmx端口暴露出来,然后fire-wall放行, 解决问题。 KAFKA_ADVERTISED_HOST_NAME这个最好设置宿主机的ip,宿主机以外的代码或者工具来连接,后面的端口也需要设置暴露的端口。 [error] k.m.j.KafkaJMX$ - Failed to connect to service:jmx:rmi:///jndi/rmi://9.11.8.48:-1/jmxrmi java.lang.IllegalArgumentException: requirement failed: No jmx port but jmx polling enabled! 在容器中查看topic时报以下错误(不仅仅是topic的命令,好像所有的都会出错) $ bin/kafka-topics.sh --list --zookeeper zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1 # 以下是错误 Error: Exception thrown by the agent : java.rmi.server.ExportException: Port already in use: 7203; nested exception is: java.net.BindException: Address already in use 解决方法:在命令前加上unset JMX_PORT;指令,上边的命令改造为: $ unset JMX_PORT;bin/kafka-topics.sh --list --zookeeper zoo1:2181/kafka1,zoo2:2181/kafka1,zoo3:2181/kafka1 附:Docker常用指令 # 查看所有镜像 docker images # 查看所有运行中的容器 docker ps # 查看所有容器 docker ps -a # 获取所有容器ip $ docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq) # 查看容器内部日志 $ docker logs -f <容器ID> # 进入容器内部 $ docker exec -it <容器ID> /bin/basj # 创建容器 -d代表后台启动 docker run --name <容器名称> -e <参数> -v <挂载数据卷> <容器ID> # 重启容器 docker restart <容器ID> # 关闭容器 docker stop <容器id> # 运行容器 docker start <容器id>
1. 流程 开发好前端与后端程序。购买服务器与域名服务器上安装所需环境(本项目是 node 和 mongodb )服务器上开放端口与设置规则用 nginx、apache 或者tomcat 来提供HTTP服务或者设置代理上传项目代码 或者 用码云或者 gihub 来拉取你的代码到服务器上启动 express 服务器优化页面加载 2. 内容细节 2.1 开发好前端与后端程序 开发好前端与后端程序,这个没什么好说的,就是开发!开发!开发!再开发! 2.2 购买服务器与域名 本人一直觉得程序员应该有一个自己的个人网站,拥有自己的域名与服务器。学知识或者测试项目的时候可以用来测试。 国内最大的云服务器就是阿里云,所以推荐使用阿里云的服务器。阿里云有个最新活动专题页:https://www.aliyun.com/activity,里面有阿里云服务器的最新活动,都是一些活动服务器,可以关注一下,非常划算。 可以ping一下阿里云哪个节点比较好:https://ping.gaomeluo.com/aliyun/ 服务器预装环境可以选择 CentOS 或者 windows server,,为了体验和学习 linux 系统,我选择了CentOS。 再次是购买域名 阿里域名购买,本人也是在阿里云购买的。如果你买的服务器是海外的,则不需要备案,如果是国内主机则必须得备案才能使用。但是我还是建议你用国内主机,然后备案,要不然很多东西用不了,如何备案域名,请自己上网查找教程。 当然如果你的网站只用来自己用的话,可以不用买域名,因为可以通过服务器的公网 ip 来访问网站内容的。 域名解析,就不一一讲解,自行百度。 3. 服务器上安装所需环境(本项目是 node 和 mongodb ) 3.1 登录服务器 因本人用的是 MacBook Pro ,所以直接打开 mac 终端,通过下面的命令行连接到服务器。root 是阿里云服务器默认的账号名,连接时候会叫你输入密码,输入你购买时设置的或者后来设置的密码。 ssh root@47.106.20.666 //你的服务器公网 ip,比如 47.106.20.666 如图: window 系统的,请用 Putty 或 Xshell 来登录。 一般在新服务器创建后,建议先升级一下 CentOS: yum -y update 常用的 Linux 命令 cd 进入目录 cd .. 返回上一个目录 ls -a 查看当前目录 mkdir abc 创建abc文件夹 mv 移动或重命名 rm 删除一个文件或者目录 3.2 安装 node 升级常用库文件, 安装 node.js 需要通过 g++ 进行编译。 yum -y install gcc gcc-c++ autoconf 跳转到目录:/usr/local/src,这个文件夹通常用来存放软件源代码: cd /usr/local/src 下载 node.js 源码,也可以使用 scp 命令直接上传,因为下载实在太慢了:下载地址:https://nodejs.org/en/download/ ,请下载最新的相应版本的源码进行下载,本人下载了 v10.13.0 版本的。 https://nodejs.org/dist/v10.13.0/node-v10.13.0.tar.gz 下载完成后解压: tar -xzvf node-v10.13.0.tar.gz 进入解压后的文件夹: cd node-v10.13.0 执行配置脚本来进行预编译处理: ./configure 编译源代码,这个步骤花的时间会很长,大概需要 5 到 10 分钟: make 编译完成后,执行安装命令,使之在系统范围内可用: make install 安装 express 推荐 global 安装 npm -g install express 建立超级链接, 不然 sudo node 时会报 "command not found" sudo ln -s /usr/local/bin/node /usr/bin/node sudo ln -s /usr/local/lib/node /usr/lib/node sudo ln -s /usr/local/bin/npm /usr/bin/npm sudo ln -s /usr/local/bin/node-waf /usr/bin/node-waf 通过指令查看 node 及 npm 版本: node -v npm -v node.js 到这里就基本安装完成了。 3.2 安装 mongodb 下载地址:https://www.mongodb.com/download-center/community下载时,请选对相应的环境与版本,因为本人的服务器是 CentOS ,其实本质就是 linux 系统,所以选择了如下图环境与目前最新的版本。 mongodb : 软件安装位置:/usr/local/mongodb 数据存放位置:/home/mongodb/data 数据备份位置:/home/mongodb/bak 日志存放位置:/home/mongodb/logs 下载安装包 > cd /usr/local > wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.0.4.tgz 解压安装包,重命名文件夹为 mongodb tar zxvf mongodb-linux-x86_64-4.0.4.tgz mv mongodb-linux-x86_64-4.0.4 mongodb 在 var 文件夹里建立 mongodb 文件夹,并分别建立文件夹 data 用于存放数据,logs 用于存放日志 mkdir /var/mongodb mkdir /var/mongodb/data mkdir /var/mongodb/logs 打开 rc.local 文件,添加 CentOS 开机启动项: vim /etc/rc.d/rc.local // 不懂 vim 操作的请自行查看相应的文档教程,比如: vim 模式下,要 按了 i 才能插入内容,输入完之后,要按 shift 加 :wq 才能保存退出。 将 mongodb 启动命令追加到本文件中,让 mongodb 开机自启动: /usr/local/mongodb/bin/mongod --dbpath=/var/mongodb/data --logpath /var/mongodb/logs/log.log -fork 启动 mongodb /usr/local/mongodb/bin/mongod --dbpath=/var/mongodb/data --logpath /var/mongodb/logs/log.log -fork 看到如下信息说明已经安装完成并成功启动: forked process: 18394 all output going to: /var/mongodb/logs/log.log mongodb 默认的端口号是 27017。 如果你数据库的连接要账号和密码的,要创建数据库管理员,不然直接连接即可。在 mongo shell 中创建管理员及数据库。 切换到 admin 数据库,创建超级管理员帐号 use admin db.createUser({ user: "用户名", pwd:"登陆密码", roles:[{ role: "userAdminAnyDatabase", db: "admin" }] }) 切换到要使用的数据库,如 taodb 数据库,创建这个数据库的管理员帐号 use taodb db.createUser({ user: "用户名", pwd:"登陆密码", roles:[ { role: "readWrite", db: "taodb" }] //读写权限 }) 重复按两下 control+c ,退出 mongo shell。到这里 mongodb 基本已经安装设置完成了。 3.3 服务器上开放端口与设置安全组规则 安全组规则是什么鬼 授权安全组规则可以允许或者禁止与安全组相关联的 ECS 实例的公网和内网的入方向和出方向的访问。 阿里云安全组应用案例文档 80 端口是为 HTTP(HyperText Transport Protocol) 即超文本传输协议开放的,浏览器 HTTP 访问 IP 或域名的 80 端口时,可以省略 80 端口号 如果我们没有开放相应的端口, 比如我们的服务要用到 3000 ,就要开放 3000 的端口,不然是访问不了的;其他端口同理。 端口都配置对了,以为能用公网 IP 进行访问了么 ? 还有 防火墙 这一关呢,如果防火墙没有关闭或者相关的端口没有开放,也是不能用公网 IP 进行访问网站内容的。 和安全组端口同理,比如我们的服务要用到的是 3000 端口,就要开放 3000 的端口,不然是访问不了的;其他端口同理。 3.4 用 nginx、apache 或者 tomcat 来提供 HTTP 服务或者设置代理 我是用了 nginx 的,所以这里只介绍 nginx 。 开启 ngnx 代理 进入到目录位置 cd /usr/local/nginx 在 nginx 目录下有一个 sbin 目录,sbin 目录下有一个 nginx 可执行程序。 ./nginx 关闭 nginx ./nginx -s stop 重启 ./nginx -s reload 基本的使用就是这样子了。 如下给出我的 nginx 代理的设置: 我的两个项目是放在 /home/blog/blog-react/build/; 和 /home/blog/blog-react-admin/dist/; 下的,如果你们的路径不是这个,请修改成你们的路径。 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # 如果port_in_redirect为off时,那么始终按照默认的80端口;如果该指令打开,那么将会返回当前正在监听的端口。 port_in_redirect off; # 前台展示打开的服务代理 server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; #root /home/blog; location / { root /home/blog/blog-react/build/; index index.html; try_files $uri $uri/ @router; autoindex on; } location @router{ rewrite ^.*$ /index.html last; } location /api/ { proxy_set_header X-Real-IP $remote_addr; proxy_pass http://47.106.136.114:3000/ ; } gzip on; gzip_buffers 32 4k; gzip_comp_level 6; gzip_min_length 200; gzip_types text/css text/xml application/javascript; gzip_vary on; #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } # HTTPS server # 管理后台打开的服务代理 server { listen 4444; server_name localhost; # charset koi8-r; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; location / { root /home/blog/blog-react-admin/dist/; index index.html index.htm; try_files $uri $uri/ @router; autoindex on; } location @router{ rewrite ^.*$ /index.html last; } location /api/ { proxy_set_header X-Real-IP $remote_addr; proxy_pass http://47.106.136.114:3000/ ; } gzip on; gzip_buffers 32 4k; gzip_comp_level 6; gzip_min_length 200; gzip_types text/css text/xml application/javascript; gzip_vary on; error_page 500 502 503 504 /50x.html; } } 我是开了两个代理的:前台展示打开的服务代理和管理后台打开的服务代理,这个项目是分开端口访问的。比如:我的公网 ip 是 47.106.20.666,那么可以通过 http://47.106.20.666 即可访问前台展示,http://47.106.20.666:4444 即可访问管理后台的登录界面。 至于为什么要写这样的配置: try_files $uri $uri/ @router; location @router{ rewrite ^.*$ /index.html last; } 因为进入到文章详情时或者前端路由变化了,再刷新浏览器,发现浏览器出现 404 。刷新页面时访问的资源在服务端找不到,因为 react-router 设置的路径不是真实存在的路径。所以那样设置是为了可以刷新还可以打到对应的路径的。 3.5 上传项目代码,或者用码云、 gihub 来拉取你的代码到服务器上 我是创建了码云的账号来管理项目代码的,因为码云上可以创建免费的私有仓库,我在本地把码上传到 Gitee.com 上,再进入服务器用 git 把代码拉取下来就可以了,非常方便。 具体请看:码云(Gitee.com)帮助文档 V1.2 http://git.mydoc.io/?t=180676 git 的安装请看: CentOS 7.4 系统安装 git https://www.cnblogs.com/hglibin/p/8627975.html 如果不想用 git 进行代码管理,请用其他可以连接服务器上传文件的软件,比如 FileZilla。 3.6 启动 express 服务 启动 express 服务,我用了 pm2, 可以永久运行在服务器上,且不会一报错 express 服务就挂了,而且运行中还可以进行其他操作。 安装: npm install -g pm2 切换当前工作目录到 express 应用文件夹下,执行 pm2 命令启动 express 服务: pm2 start ./bin/www 比如我操作项目时的基本操作: cd /home/blog/blog-node pm2 start ./bin/www // 开启 pm2 stop ./bin/www // 关闭 pm2 list //查看所用已启动项目: 3.7 页面加载优化 再看刚刚的 nginx 的一些配置: server { gzip on; gzip_buffers 32 4k; gzip_comp_level 6; gzip_min_length 200; gzip_types text/css text/xml application/javascript; gzip_vary on; } 这个就是利用 ngonx 开启 gzip,亲测开启之后,压缩了接近 2/3 的文件大小,本来要 1M 多的文件,开启压缩之后,变成了 300k 左右。 做完一系列的优化处理之后,在网络正常的情况下,页面首屏渲染由本来是接近 5 秒,变成了 3 秒内,首屏渲染之前的 loading 在 1 秒内可见了。
2019年的云栖大会即将到来,有很多网友还在咨询2019年云栖大会具体日期,门票多少钱。 现在小编给大家整理出来了: 2019年云栖大会 时间:2019年9月25日——27日地点:杭州·云栖小镇 云栖大会官网:https://yunqi.aliyun.com(可以领取阿里云代金券) 门票:VIP票 ¥5288/张(已售罄)、单日票 ¥288/张、通票 ¥688/张(已售罄)、青年票 ¥98/张 由上图看出,VIP票、通票已售罄,只剩下单日票和青年票了。所以有需要的猿们要尽快下手啦。
安装前准备 服务器1台:推荐阿里云服务器 https://www.aliyun.com/product/ecs基础系统:CentOS 7 yum -y install gcc gcc-c++ autoconf automake make yum -y install zlib zlib-devel openssl openssl-devel pcre pcre-devel 1.下载keepalived 方法一: yum -y install keepalived 方法二: 下载二进制源码包:http://www.keepalived.org/download.html #下载安装文件 cd /usr/local wget http://www.keepalived.org/software/keepalived-2.0.18.tar.gz #解压文件 tar -zxvf keepalived-2.0.18.tar.gz #编译 cd keepalived-2.0.18/ #--prefix 指定安装地址 #/usr/local/keepalived/ 安装的目录,不要和自己安装文件一个目录,不然报错 ./configure --prefix=/usr/local/keepalived/ #编译并安装 make && make install 2.配置 复制文件: [root@localhost ~]# cp /usr/local/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/ [root@localhost ~]# mkdir /etc/keepalived [root@localhost ~]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ [root@localhost ~]# cp /usr/local/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ [root@localhost ~]# cp /usr/local/keepalived/sbin/keepalived /usr/sbin/ 编辑: vi /etc/keepalived/keepalived.conf js /etc/keepalived/keepalived.conf 内容如下 global_defs { notification_email { #mr@mruse.cn # 指定keepalived在发生切换时需要发送email到的对象,一行一个 #sysadmin@firewall.loc } notification_email_from xxx@163.com # 指定发件人 smtp_server smtp@163.com # smtp 服务器地址 smtp_connect_timeout 30 # smtp 服务器连接超时时间 router_id LVS_1 # 必填,标识本节点的字符串,通常为hostname,但不一定非得是hostname,故障发生时,邮件通知会用到 } vrrp_script chk_tomcat { #详细看下面 script "/etc/keepalived/tomcat_check.sh" #检测服务shell interval 2 #每个多长时间探测一次 weight -20 #每个多长时间探测一次 } _instance VI_1 { # 实例名称 state MASTER # 必填,可以是MASTER或BACKUP,不过当其他节点keepalived启动时会将priority比较大的节点选举为MASTER interface ens33 # 必填, 节点固有IP(非VIP)的网卡,用来发VRRP包做心跳检测 mcast_src_ip 192.168.2.89 #本机的ip,需要修改 virtual_router_id 101 # 必填,虚拟路由ID,取值在0-255之间,用来区分多个instance的VRRP组播,同一网段内ID不能重复;主备必须为一样; priority 100 # 必填,用来选举master的,要成为master那么这个选项的值最好高于其他机器50个点,该项取值范围是1-255(在此范围之外会被识别成默认值100) advert_int 1 # 必填,检查间隔默认为1秒,即1秒进行一次master选举(可以认为是健康查检时间间隔) authentication { # 必填,认证区域,认证类型有PASS和HA(IPSEC),推荐使用PASS(密码只识别前8位) auth_type PASS # 默认是PASS认证 auth_pass 1111 # PASS认证密码 } virtual_ipaddress { 192.168.2.90 # 必填,虚拟VIP地址,允许多个 } track_script { # 检测shell chk_tomcat } } vrrp_script 里的script返回值为0时认为检测成功,其它值都会当成检测失败; weight 为正时,脚本检测成功时此weight会加到priority上,检测失败时不加;A.主失败:主 priority < 从 priority + weight 时会切换。B.主成功:主 priority + weight > 从 priority + weight 时,主依然为主 weight 为负时,脚本检测成功时此weight不影响priority,检测失败时priority – abs(weight)A.主失败:主 priority – abs(weight) < 从priority 时会切换主从主成功:主 priority > 从priority 主依然为主 检测shell:/etc/keepalived/tomcat_check.sh 可以根据 tomcat 服务检测结果返回不同的值,成功执行 exit 0 返回 0,失败执行 exit 1 返回 1,vrrp_script 可以结合返回值来对当前keepalived优先级做处理 3.开启服务 设置 keepalived 服务开机启动 # chkconfig keepalived on # 启动keepalived 服务 # service keepalived start 查看keepalived进程,出现如下三个进程即为启动成功 [root@localhost ~]# ps -ef | grep keep root 7925 1 0 11:27 ? 00:00:00 /usr/local/keepalived/sbin/keepalived -D root 7926 1 0 11:27 ? 00:00:00 /usr/local/keepalived/sbin/keepalived -D root 7927 7926 0 11:27 ? 00:00:00 /usr/local/keepalived/sbin/keepalived -D root 7956 7888 0 12:02 pts/1 00:00:00 grep --color=auto keep 4.指定日志的输出文件修改 js /etc/sysconfig vim /etc/sysconfig #指定位置修改为如下内容 KEEPALIVED_OPTIONS="-D -d -S 0" 修改 js /etc/rsyslog.conf vim /etc/rsyslog.conf #在最后一行添加如下内容 local0.* /var/log/keepalived.log 重启服务测试 service rsyslog restart service rsyslog restart #如下命令有日志内容输出即为成功 tailf /var/log/keepalived.log #centos 基本可以成功,但是 debain 可能失败,失败上面 2 个文件可以改为如下内容,再重启服务测试 KEEPALIVED_OPTIONS="-D -d -S 1" local1.* /var/log/keepalived.log
一、加密方式 1、对称加密 所谓对称加密即:客户端使用一串固定的秘钥对传输内容进行加密,服务端使用相同的秘钥进行解密。 2、非对称加密 SSL证书(遵守 SSL协议,由受信任的数字证书颁发机构CA,在验证服务器身份后颁发,具有服务器身份验证和数据传输加密功能。是公钥+私钥一对秘钥串) 非对称加密即客户端使用公钥对传输内容进行加密,服务端使用私钥对传输内容进行解密 准备材料: 服务器1台:推荐 阿里云服务器(选择Linux系统)SSL证书1个:推荐 阿里云ssl证书(便于管理) 二、http与https http是数据在网络上进行明文传输,不安全,但解析效率高(不用加解密);https是加密传输,如果使用对称加密,客户端与服务端秘钥固定,加解密效率不会有很大开销,但存在秘钥泄露风险,不够安全;如果使用非对称加密,客户端使用公钥,服务端使用私钥,加解密算法开销大,性能成本高,效率较对称加密要低,但具有较高的安全性。 实际生产环境中,https是使用了非对称加密与对称加密相结合的方式。首先使用非对称加密将客户端随机生成的对称秘钥发送到服务端(安全传输到服务端),之后客户端和服务端之间的加解密使用对称秘钥。如下图所示 三、nginx配置https 1、配置前提 nginx是否已经启用https模块,启动nginx并执行nginx -V查看,如下: Nginx配置https只需要两个文件。一个是浏览器证书(内含公钥,供浏览器加密使用),一个是私钥(供服务器解密使用) server.crt和server.key可以自己去证书颁发机构购买商业证书。也可以自己使用程序自己生成一份。此处自签一份证书。 2、自签证书 (1)创建服务器私钥,需要输入一个口令 openssl genrsa -des3 -out server.key 4096 (2)创建签名请求的证书(CSR) openssl req -new -key server.key -out server.csr (3)在加载SSL支持的Nginx并使用上述私钥时除去必须的口令 openssl rsa -in server.key -out server_nopass.key (4)最后标记证书使用上述私钥和CSR openssl x509 -req -days 365 -in server.csr -signkey server_nopass.key -out server.crt 最后生成的证书文件 3、配置证书 在nginx中的conf配置文件中的Server模块加入: ssl_certificate /usr/local/nginx/server.crt; ssl_certificate_key /usr/local/nginx/server_nopass.key;
一、OpenResty简介 OpenResty是一个全功能的 Web 应用服务器。它打包了标准的 Nginx 核心,常用的第三方模块以及大多数依赖项。 可以把它看成是Nginx附加众多的第三方插件的合集。其主体是嵌入lua脚本的支持,让你能够使用lua灵活地处理运算逻辑。单独的nginx如果需要使用诸如echo输出功能,需要单独去安装第三方模块echo,而OpenResty则已经包含了如echo等大部分第三方模块。 服务器1台:阿里云服务器(选择Linux系统) 二、安装 1、yum安装(不推荐) (1)yum install yum-utils (2)yum-config-manager --add-repo https://openresty.org/package/centos/openresty.repo (3)yum install openresty 2、源码安装(推荐) (1)wget https://openresty.org/download/openresty-1.15.8.1.tar.gz #下载源码安装包 (2)tar -zxvf openresty-1.15.8.1.tar.gz #解压 (3)./configure --without-http_redis2_module --with-http_iconv_module #选择需要的插件启用, --with-Components 激活组件,--without 则是禁止组件 (4)make && make install #编译加安装 (5)vi /etc/profile #加入path路径 (6)export PATH=$PATH:/usr/local/openresty/nginx/sbin/ #加入的内容 (7)source /etc/profile ##使配置生效 三、安装检测 执行js nginx -V #显示如下则表示安装成功
一、预备环境 Kafka是java生态圈中的一员,运行在java虚拟机上,按Kafka官方说明,java环境推荐Java8;Kafka需要Zookeeper保存集群的元数据信息和消费者信息。Kafka一般会自带Zookeeper,但是从稳定性考虑,应该使用单独的Zookeeper,而且构建Zookeeper集群。 服务器1台:阿里云服务器(选择Linux系统) 二、下载 官网下载:http://kafka.apache.org/downloads 百度网盘:https://pan.baidu.com/s/1KSCZNX0jq_k09Z0ObtSG-Q 提取码:vow8 三、安装 1、将下载好的kafka安装文件上传至linux系统,可以使用ftp工具或者在窗口使用alt+p快捷键打开上传窗口。拖拽kafka文件上传。 2、解压 tar -zxvf kafka_2.11-2.3.0.tgz 3、移动到/usr/local/, 并改名kafka mv kafka_2.11-2.3.0 /usr/local/kafka 4、启动zookeeper 进入zookeeper的bin目录执行 ./zkServer.sh start 5、启动kafka 执行js./bin/kafka-server-start.sh config/server.properties & 6、验证 jps命令,出现表示成功
环境:CentOS 7准备产品:阿里云服务器 (https://www.aliyun.com/product/ecs)阿里云企业邮箱账户( https://wanwang.aliyun.com/mail/) 过程: 1.编辑 /etc/mail.rc 文件内容,追加以下内容(请替换其中的登录用户和密码值): set smtp="smtps://smtp.mxhichina.com:465" set smtp-auth=login set smtp-auth-user="sales@vfutai.xxx" set smtp-auth-password="Ni-De-Mi-Ma" set ssl-verify=ignore set nss-config-dir=/etc/pki/nssdb 2.发信测试(请替换其中的回信、收信地址和标题): echo message3 | mail -v -r "sales@vfutai.xxx" -s "This is the subject" dongshan3@foxmail.xxx 3.执行命令后,显示发信成功。收件人邮箱中,有信 看到上图,说明已经成功了
课程名称:前端 Vue+Node+MongoDB高级全栈开发讲师:Scott难度:高级时长:24小时开发准备材料:阿里云服务器ECS、阿里云MongoDB【适合人群】本课程是Vue.js+Node.js高级实战课程,对您的学习能力及基础都有很高要求: 精通HTML、 CSS和javascript编程, 有一定Vue.js 基础和Node.js、MongoDB实际开发经验 已经具备npm和Webpack的使用经验以上3点务必掌握,否则强烈建议您先从《Vue2.0+Node.js+MongoDB全栈打造商城系统》这门难度等级稍低的课程开始学习 下载地址:链接:https://pan.baidu.com/s/1TXSnVddLg6fOK9NlL2dWlw 提取码:qz6v
主从复制是指一台服务器充当主数据库服务器,另一台或多台服务器充当从数据库服务器,主服务器中的数据自动复制到从服务器之中。对于多级复制,数据库服务器即可充当主机,也可充当从机。MySQL主从复制的基础是主服务器对数据库修改记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。 提醒:如果你有阿里云的mysql的话,就没有下面的这些烦恼了。 阿里云mysql:https://www.aliyun.com/product/rds/mysql Mysq主从复制的类型 基于语句的复制: 主服务器上面执行的语句在从服务器上面再执行一遍,在MySQL-3.23版本以后支持。存在的问题:时间上可能不完全同步造成偏差,执行语句的用户也可能是不同一个用户。 基于行的复制: 把主服务器上面改变后的内容直接复制过去,而不关心到底改变该内容是由哪条语句引发的,在MySQL-5.0版本以后引入。存在的问题:如果修改的行数过多,造成的开销比较大。 MySQL默认使用基于语句的复制,当基于语句的复制会引发问题的时候就会使用基于行的复制,MySQL会自动进行选择。 在MySQL主从复制架构中,读操作可以在所有的服务器上面进行,而写操作只能在主服务器上面进行。主从复制架构虽然给读操作提供了扩展,可如果写操作也比较多的话(多台从服务器还要从主服务器上面同步数据),单主模型的复制中主服务器势必会成为性能瓶颈。 Mysql主从复制的工作原理 如上图所示,主服务器上面的任何修改都会保存在二进制日志Binary log里面,从服务器上面启动一个I/O thread(实际上就是一个主服务器的客户端进程),连接到主服务器上面请求读取二进制日志,然后把读取到的二进制日志写到本地的一个Realy log里面。从服务器上面开启一个SQL thread定时检查Realy log,如果发现有更改立即把更改的内容在本机上面执行一遍。 如果一主多从的话,这时主库既要负责写又要负责为几个从库提供二进制日志。此时可以稍做调整,将二进制日志只给某一从,这一从再开启二进制日志并将自己的二进制日志再发给其它从。或者是干脆这个从不记录只负责将二进制日志转发给其它从,这样架构起来性能可能要好得多,而且数据之间的延时应该也稍微要好一些。 Mysql主从复制的过程 Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容。 Master接收到来自Slave的IO进程的请求后,负责复制的IO进程会根据请求信息读取日志指定位置之后的日志信息,返回给Slave的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置。 Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的 bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的告诉Master从何处开始读取日志。 Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。 linux安装mysql8并且实现主从同步 服务器准备 准备服务器Server1和Server2,如果在同一个服务器的话则安装mysql时需要改变其端口。 卸载mysql 在安装之前必须先检查主机上有没有安装过mysql,如果安装过的话必须先卸载。 安装mysql 下载软件包: wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm 本地安装: yum localinstall mysql80-community-release-el7-1.noarch.rpm 安装mysql: yum install mysql-community-server 设为开机启动: systemctl enable mysqld systemctl daemon-reload 启动mysql: systemctl start mysqld 以上步骤就安装好mysql8了。 获取mysql的临时密码: grep 'temporary password' /var/log/mysqld.log 登录mysql: mysql -uroot -p 会提示输入密码,输入之前获取的临时密码即可登录。 此时需要修改mysql的密码,要不然之后的步骤也会强制提示你需要修改密码: ALTER USER 'root'@'localhost' IDENTIFIED BY '121b33dAj934J1^Sj9ag'; mysql8默认对密码的强度有要求,需要设置复杂一点,要不然也会提示错误。 刷新配置: FLUSH PRIVILEGES; 主从配置 在主从配置之前需要确保两台mysql需要同步的库状态一致。 主 配置文件默认在js/etc/my.cnf 下。 在配置文件中新增配置: [mysqld] ## 同一局域网内注意要唯一 server-id=100 ## 开启二进制日志功能,可以随便取(关键) log-bin=mysql-bin 修改配置后需要重启才能生效: service mysql restart 重启之后进入mysql: mysql -uroot -p 在master数据库创建数据同步用户,授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据。 CREATE USER 'slave'@'%' IDENTIFIED BY '@#$Rfg345634523rft4fa'; GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%'; 语句中的%代表所有服务器都可以使用这个用户,如果想指定特定的ip,将%改成ip即可。 查看主mysql的状态: show master status; 记录下File和Position的值,并且不进行其他操作以免引起Position的变化。 从 在从my.cnf配置中新增: mysqld] ## 设置server_id,注意要唯一 server-id=101 ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用 log-bin=mysql-slave-bin ## relay_log配置中继日志 relay_log=edu-mysql-relay-bin 修改配置后需要重启才能生效: service mysql restart 重启之后进入mysql: mysql -uroot -p change master to master_host='172.17.0.2', master_user='slave', master_password='@#$Rfg345634523rft4fa', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30; master_host:Master的地址 master_port:Master的端口号 master_user:用于数据同步的用户 master_password:用于同步的用户的密码 master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值 master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值 master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒 在从mysql中查看主从同步状态: show slave status \G; 此时的SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。 开启主从复制: start slave; 再次查看同步状态: show slave status \G; SlaveIORunning 和 SlaveSQLRunning 都是Yes说明主从复制已经开启。 若SlaveIORunning一直是Connecting,有下面4种原因: 1、网络不通,检查ip端口 2、密码不对,检查用于同步的用户名和密码 3、pos不对,检查Master的Position 4、mysql8特有的密码规则问题引起: ALTER USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '@#$Rfg345634523rft4fa'; 将密码规则修改为:jsmysql_native_password 如果需要指定想要主从同步哪个数据库,可以在master的my.cnf添加配置: binlog-do-db:指定mysql的binlog日志记录哪个db 或者在slave的my.cnf添加配置: `replicate-do-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可replicate-ignore-db=需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可` 如果想要同步所有库和表,在从mysql执行: STOP SLAVE SQL_THREAD; CHANGE REPLICATION FILTER REPLICATE_DO_DB = (); start SLAVE SQL_THREAD; 如果以上步骤出现问题,可以查看日志: /etc/log/mysqld.log 至此完成了mysql8主从同步搭建工作。 推荐阿里云mysql:https://www.aliyun.com/product/rds/mysql
这两年小程序越来越火爆了,应用场景也越来越多了。除了微信小程序,支付宝、百度、今日头条也都相继推出自己平台的小程序。 小程序虽然方便了用户,但是随着平台增多,对中小企业来讲,开发、维护的成本也越趋增多,负担也重,那么要是能有一个平台,能一下子生成多个平台的小程序就好了,那么小编告诉你,阿里云已经帮你实现了。 阿里云多端小程序拥有上百款精美模块自主挑选,一次购买,支付宝、微信、百度等多端同步上线,小程序注册、制作、上线,全程托管式服务,省心无忧。 阿里云多端小程序官网:https://promotion.aliyun.com/ntms/act/miniapps.html 如上图,小程序覆盖了绝大多数行情,中小企业可以即买即用。省时又节省研发费用。 模板分为标准版和精装版,你可以根据自己的需求购买。 购买使用教程: 1、进入官方(https://promotion.aliyun.com/ntms/act/miniapps.html) 2、选择你所属的行业,购买标准版或者精装版 3、然后下单付款。 *如果在使用当中有疑惑,可以在后台联系客服,为你解答。 是不是很方便?一端解决多端需求!所以,有需求的赶紧下手了。
这两年微信带动小程序火了起来,很多平台都开启自家的小程序,比较出名的就数微信小程序、支付宝小程序、百度小程序,连头条也搞了小程序平台。 但是这么多的平台对于一些中小企业来说,无论是开发、维护都是很困难的,不过这一方面即将发生改变,阿里云于近日推出多端小程序平台(包括微信小程序、支付宝小程序、百度小程序、今日头条小程序),并且有上百款的模板,可自主选择,直接购买套用即可。 阿里云多端小程序:https://promotion.aliyun.com/ntms/act/miniapps.html 如上图,小程序覆盖了绝大多数行情,中小企业可以即买即用。省时又节省研发费用。 模板分为标准版和精装版,你可以根据自己的需求购买。 购买使用教程: 1、进入官方(https://promotion.aliyun.com/ntms/act/miniapps.html) 2、选择你所属的行业,购买标准版或者精装版 3、然后下单付款。 *如果在使用当中有疑惑,可以在后台联系客服,为你解答。 是不是很方便?一端解决多端需求!所以,有需求的赶紧下手了。
在现代生产生活环境中,门禁系统已经发展为不仅仅是为了防盗、防闯入,更重要的意义在于结合生产生活所需,提供方便、效率和管控。开启一窗门的方式,从最早的钥匙到电子密码锁,从 IC芯片识别到声纹、指纹、掌纹、虹膜、人脸识别,门禁技术也越来越朝智能化、自动化方向发展。 近期,阿里云也推出了自己研发的人脸识别门禁一体机。该人脸识别门禁一体机前端接入人脸AI赋能的人脸识别门禁机,系统能够提供基于人脸One -ID的人员管理、识别比对、智慧通行、轨迹记录、人脸搜索等服务,满足用户对效率提升、安保服务先进可靠的诉求。 阿里云人脸识别门禁一体机官网:https://www.aliyun.com/product/face?source=5176.11533457&userCode=ffsbbyn0 阿里云的人脸识别门禁一体机有哪些优点? 参考:阿里云人脸识别门禁一体机怎么样?识别率高达99.9% 其实在用这些大件的时候,我们都会有疑问,这个东西到底怎么样?值不值得买? 这个疑问,我想大家完全可以不必担心,阿里云的人脸识别门禁一体机已经投入使用,可查看案例《厦门世贸双子塔》《厦门中闽大厦》。详情可查看客户案例:https://www.aliyun.com/product/face?source=5176.11533457&userCode=ffsbbyn0 有阿里云这个大招牌,产品的质量自然不会差。所以,有需求这方面的需求,可以去官方看看。
阿里云刷脸门禁一体机,通行系统前端接入人脸AI赋能的人脸识别门禁机,系统能够提供基于人脸One -ID的人员管理、识别比对、智慧通行、轨迹记录、人脸搜索等服务,满足用户对效率提升、安保服务先进可靠的诉求。 阿里云人脸识别门禁一体机官网:https://www.aliyun.com/product/face?source=5176.11533457&userCode=ffsbbyn0 智能识别 支持2万人脸库离线识别;支持红外灯补光和RGB补光,支持人体移动感应补光;支持户外宽动态防逆光;识别成功率高达99.9%。 接口丰富 支持韦根26、韦根34,支持开关量信号;支持RJ45网络接入,支持wifi网络接入;支持RS485串口,支持usb2.0接口。 智能化的系统管理后台 系统智能化监管前端人脸识别门禁机运行资源情况,并提供、日志记录管理、人脸库管理、以及严格的用户权限、区域管理等功能。 智能运维管理 系统支持智能运维管理,在中心管理平台上,自动监管前端门禁机运行资源情况,并提供日志记录管理。 多用户、多权限、多区域级联管理 系统支持多区域、多用户、多权限控制管理,按照控制区域划分,每个门禁机挂载在不同的机构区域中,每个机构区域可设置多个管理用户,并给每个用户设置不同的管理操作权限,每个用户只有在设定的区域权限内才可正常操作。 便捷化人员管理 支持人员批量导入、单人注册;支持人员分 适用于社区、楼宇、学校、办公区、酒店、写字楼、公共服务管理区等需要使用门禁通行管理的场景。 有需要详细了解阿里云人脸识别门禁一体机,可去官网查看详情。 传送门::https://www.aliyun.com/product/face?source=5176.11533457&userCode=ffsbbyn0 联系方式(钉钉/微信):13439415810 (比官网优惠5%——10%)
随着社会智能信息化建设的推进,传统的一卡通、指纹、虹膜等门禁系统给人们通行带来了不便,丢卡、盗卡、冒用他人证件通行的行为也给整体安全性埋下隐患,以人脸生物特征为唯一身份标识(One -ID)的刷脸门禁通行系统随即应运而生。 近日,阿里云推出了首款人脸识别门禁一体机。阿里云刷脸门禁通行系统前端接入人脸AI赋能的人脸识别门禁机,系统能够提供基于人脸One -ID的人员管理、识别比对、智慧通行、轨迹记录、人脸搜索等服务,满足用户对效率提升、安保服务先进可靠的诉求。 阿里云人脸识别门禁一体机官网:https://www.aliyun.com/product/face?source=5176.11533457&userCode=ffsbbyn0 阿里云人脸识别门禁一体机有以下特点: 云端整体联调 云端系统可对人脸识别门禁机进行实时控制与推送,人脸数据在设备端和平台端双重同步,保障人群刷脸通行的便捷性和可靠性。 无感知抓拍,秒速通行 在无感知无配合状态下进行抓拍识别工作,不需要通行人员刻意配合,可支持万级别人脸库1:N比对,≤1.5s秒速开门通行。 “门钥匙”唯一,人脸识别受限少 自带活体检测技术,有效过滤照片、视频欺骗,人脸识别分析,不受年龄变化、季节、发型、化妆、眼镜、脸部受伤、帽子等影响。 全天候智能守护 24小时不间断智能检测,无需人工操控,大幅度提高了通行效率和安全防范效率。 有需要详细了解阿里云人脸识别门禁一体机,可去官网查看详情。 传送门:https://www.aliyun.com/product/face?source=5176.11533457&userCode=ffsbbyn0
您是不是被网站视频问题弄的焦头烂额、心烦意乱、夜不能寐、寝食难安?那么,看完这里,以上问题统统都可以解决啦。 首先,我们开通阿里云视频点播功能,传送门:https://www.aliyun.com/product/vod ( 开通需要1-5分钟时间,请不要重复提交,请耐心等待:) 开通视频点播后,我们进入控制台-》视频点播-》全局设置-》添加新域名 比如您的网站是www.aliyun.com ,您想用video.aliyun.com访问所有上传的视频,那么就添加域名就填video.aliyun.com,添加后,稍等片刻就会开通成功。 这时,我们需要将该域名的cname解析到系统提示的地址。如下图: 域名配置好后,我们开始上传视频 上传完成后,在视频列表中,可以看到每个视频对应的videoid 点击视频列表中的管理,进入到视频详细页面,里面有web播放器代码,复制一下。 到这里,也许可能您觉得视频播放离成功只差0.01毫米了吧,把代码Ctrl+c,再Ctrl+v到网站上,然后打开网站,视频流畅的播放,一切问题都可以烟消云散了,是吗? 但是这个并不是这样的呢,代码中还有一个参数,playauth: "客户调用接口生成" 这个需要调用阿里云视频播放接口生成滴,估计很多个都跪在了这里呢。那么如何通过视频videoid获取playauth呢?坐下,请都坐下,继续往下看 首先下载附件中的sdk,这个是前几天下载的php版本,如果想看看有没出新版本,可以通过传送门https://help.aliyun.com/document_detail/61070.html 稍微修改了一下,里面还有一个参考代码t.html 阿里云视频点播.rar (链接: https://pan.baidu.com/s/1ISNIptk4xZPe6UjpKIMF5w 提取码: 1hig 复制这段内容后打开百度网盘手机App,操作更方便哦) 主要修改两个地方,一个是authapi.php,这个是获取视频播放参数playauth文件,将你自己的阿里云appid和密钥填上。如果还未生成过的话,进入accesskey管理生成一下。 传送门:https://ak-console.aliyun.com/#/accesskey <?php include_once 'aliyun-php-sdk-core/Config.php'; use vod\Request\V20170321 as vod; $access_key_id="aa"; $access_key_secret="bb"; $VideoId=$_GET["videoid"]; $regionId = 'cn-shanghai'; $profile = DefaultProfile::getProfile($regionId, $access_key_id, $access_key_secret); $client = new DefaultAcsClient($profile); date_default_timezone_set('PRC'); function testGetVideoPlayAuth($client, $regionId, $VideoId) { $request = new vod\GetVideoPlayAuthRequest(); $request->setAcceptFormat('JSON'); $request->setRegionId($regionId); $request->setVideoId($VideoId); //视频ID $response = $client->getAcsResponse($request); return $response; } if($VideoId!="") { try { $videoinfo=(array)(testGetVideoPlayAuth($client, $regionId, $VideoId)); $play_auto=$videoinfo["PlayAuth"]; echo "play_auto='".$play_auto."'"; } catch (Exception $e) { $e->getMessage(); } } else {echo "VideoId error";} ?> 如果配置正常的话,打开 authapi.php?videoid=f60e19885082440099ca87fd28c45dc0 就可以看到 play_auto='eyJTZWN1cml0eVRva2VuIjoi...' 如果看到这个,那么,恭喜您,离成功的视频播放器,只差0.001毫米啦。 将这个playauto加到web播放器的代码中,就可以完成视频播放器的设置了。可以参考下t.html <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="authapi.php?videoid=f60e19885082440099ca87fd28c45dc0"></script> 以下是播放器代码: <link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.3.5/skins/default/aliplayer-min.css" /><script type="text/javascript" src="https://g.alicdn.com/de/prismplayer/2.3.5/aliplayer-min.js"></script><script type="text/javascript"> document.write("<div id = 'J_prismPlayer' style='width: 1920px;height: 1280px;' class='prism-player'></div >");window.onload = function () {new Aliplayer({id: "J_prismPlayer",autoplay: true,width: "960px",height: "1280px",vid: "f60e19885082440099ca87fd28c45dc0",playauth: play_auto,});};</script> 注意的是,t.html中有2处videoid需要修改成你自己视频的videoid 按上面的来,应该问题不大。但如果还有问题的话,下载附件中的代码,在这基础上再改改就行。 原文:https://yun.fengxinqi.com/archives/aliyunvod/
有时候,我们的平台做大了之后,就会考虑升级服务器等设备,或者从一家平台换到另一家平台,或者原先在ECS上的数据库现在要迁移到RDS上去。这就会涉及到数据库迁移。 那么sqlserver数据库如何迁移搬家呢?有需要的朋友请看这篇教程 首先登录数据库管理平台:https://dms-net.aliyun.com/ 1.选择你的数据库,点击E-R图,再点击下载SQL脚本,并将下载的数据库脚本上传到ECS服务器上,待用 2.登录ECS服务器,连接好本地SQLserver数据库服务器和远程SQLserver数据库点击文件->连接对象资源管理器,输入远程SQL数据库名称,帐号,密码连接 连接成功后,可以看到两个sql数据库,一个本地的,一个是远程的 3.在本地SQLserver服务器上,新建同名Sql数据库 4.右击本地数据库,选择新建查询,并将步骤1下载SQL脚本,拖动到新建查询执行框中,然后点击执行,建立数据库表结构 到这里,数据库表已经建好了,但是表里面的数据是空的,接下来,我们把数据从旧数据库导致到本地数据库中来 5.右击远程sqlserver数据库,点击任务->导出数据库 6.服务器名称会自动填入,身份验证我们选择 使用SQL server身份验证,然后输入远程数据库的帐号密码,再点击下一步 7.数据导入的目录数据库,当然是我们的本地数据库啦,服务器名称输入一个点.,身份验证看你具体情况,我这里选择sql身份验证,数据库选择我们刚才新建的本地数据库 8.一直下一步,到了下图这里,源选择全部表,并点击编辑映射,将启用标识插入前面的勾勾上,不然会出现无法插入只读数据id等错误。 9.最后一路一下步。直到执行完成。 10.再次打开本地数据库的表,您会惊喜的发现,全部数据都已导入成功! 需要用到的阿里云产品: 阿里云数据管理:https://www.aliyun.com/product/dms (阿里云数据管理DMS基础版免费,如需付费可查看详情) 阿里云服务器:https://www.aliyun.com/product/ecs 阿里云RDS数据库:https://www.aliyun.com/product/rds/mysql 原文链接:https://yun.fengxinqi.com/archives/sqlserverqianyiecs/
我们经常在一些公众号里回复信息,微信公众号都会自动回复信息,区别于微信平台的自动回复,有的公众号上面的自动回复,则更像是一个机器人客服。下面小编就教大家如何搭建微信公众号机器人。 所需材料: 微信公众号:https://mp.weixin.qq.com/阿里云服务器:https://www.aliyun.com/product/ecs 1、公众号申请 任务时间:10min ~ 15min 注册一个公众号 首先进入《微信公众号平台》,然后注册一个账号,类型选择订阅号,然后根据相应的提示完成信息的填写和验证。注册微信公众号这里就不再详述。 2、后台服务器的搭建 任务时间:10min ~ 15min 安装 NodeJS 首先执行以下命令 sudo su 下载最新的稳定版 v6.10.3 到本地 wget https://nodejs.org/dist/v6.10.3/node-v6.10.3-linux-x64.tar.xz 下载完成后, 将其解压 tar xvJf node-v6.10.3-linux-x64.tar.xz 将解压的 Node.js 目录移动到 /usr/local 目录下 mv node-v6.10.3-linux-x64 /usr/local/node-v6 配置 node 软链接到 /bin 目录 ln -s /usr/local/node-v6/bin/node /bin/node 配置 NPM NPM 是 Node.js 的包管理和分发工具。它可以让 Node.js 开发者能够更加轻松的共享代码和共用代码片段 下载 node 的压缩包中已经包含了 npm , 我们只需要将其软链接到 bin 目录下即可 ln -s /usr/local/node-v6/bin/npm /bin/npm 配置环境变量 将 /usr/local/node-v6/bin 目录添加到 $PATH 环境变量中可以方便地使用通过 npm 全局安装的第三方工具 echo 'export PATH=/usr/local/node-v6/bin:$PATH' >> /etc/profile 生效环境变量 source /etc/profile 安装 Express 安装 Express 应用脚手架: npm install express-generator -g 创建新的项目 执行 cd /data/ express yourApp 这时候会在 /data 生成应用目录 /yourApp,继续执行以下命令 cd yourApp npm install npm start 此时服务已经在 http://ip:3000 上启动,可以在浏览器中浏览测试。 3、进入开发者模式 任务时间:10min ~ 15min 配置服务器信息,进入开发者模式 微信平台会去验证你填写的服务器的有效性,所以配置服务器前要先编写服务器有效性验证的代码。 在终端使用 Ctrl + C 终止刚才启动的服务,然后执行以下命令安装依赖的文件: npm install xml2js sha1 querystring 编辑 app.js,参考下面的代码:示例代码:/data/yourApp/app.js var express = require('express'); var app = express(); var http = require('http'); var sha1 = require('sha1'); var xml2js = require('xml2js'); var querystring = require('querystring'); process.env.PORT = '80'; function checkSignature(req) { // 获取校验参数 var signature = req.query.signature; var timestamp = req.query.timestamp; var nonce = req.query.nonce; // 此处为实验分配了一个 token,也可以修改为自己的 token var token = 'Password'; // 按照字典排序 var params = [token, timestamp, nonce]; params.sort(); // 连接 var str = sha1(params.join("")); // 返回签名是否一致 return str == signature; } // 接入验证 app.get('/', function(req, res) { // 签名成功 if (checkSignature(req)) { res.send(200, req.query.echostr); } else { res.send(200, 'fail'); } }); module.exports = app; 启动服务: npm start 登录微信公众号平台,然后拉到页面的最下面,点击基本配置菜单。填写以下信息: 服务器地址(URL):填写 您的云服务器 IP 地址 令牌(Token):填写上面代码中使用到的 Token,如无修改,直接使用 Password 消息加解密密钥(EncodingAESKey):随机字符串。可以让平台生成。 消息加解密方式:选择明文方式。 配置完毕后点击提交,提交成功后,在基本配置菜单页面点击启用。 此时,微信用户给公众号发送的信息,会由微信平台转发给您的服务器,然后您的服务器进行处理后返回给用户。 在页面点击提交,检查是否可以提交成功。 这是您的服务器地址,服务器主要是用于实现机器人的逻辑。主机部分必须是公网 IP 或者可解析到公网 IP 的域名。 4、机器人的实现 任务时间:10min ~ 15min 实现机器人功能 首先在图灵机器人官网注册(http://www.tuling123.com/sso-web/register) 和申请一个机器人,具体步骤可以参考视频。 申请之后,我们来调用 API 实现机器人的功能。 编辑 app.js,参考下面的代码: 示例代码:/data/yourApp/app.js var express = require('express'); var app = express(); var http = require('http'); var sha1 = require('sha1'); var xml2js = require('xml2js'); var querystring = require('querystring'); process.env.PORT = '80'; function checkSignature(req) { // 获取校验参数 var signature = req.query.signature; var timestamp = req.query.timestamp; var nonce = req.query.nonce; // 此处为实验分配了一个 token,也可以修改为自己的 token var token = 'Password'; // 按照字典排序 var params = [token, timestamp, nonce]; params.sort(); // 连接 var str = sha1(params.join("")); // 返回签名是否一致 return str == signature; } // 接入验证 app.get('/', function(req, res) { // 签名成功 if (checkSignature(req)) { res.send(200, req.query.echostr); } else { res.send(200, 'fail'); } }); function handler(req, res) { let buf = ''; // 获取XML内容 req.setEncoding('utf8'); req.on('data', function(chunk) { buf += chunk; }); // 内容接收完毕 req.on('end', function() { xml2js.parseString(buf, function(err, json) { if (err) { err.status = 400; } else { req.body = json; } }); let data = req.body.xml; var msg = { "toUserName" : data.FromUserName[0], "fromUserName" : data.ToUserName[0], "createTime" : data.CreateTime[0], "msgType" : data.MsgType[0], "content" : data.Content[0], "msgId" : data.MsgId[0] }; request(msg, req, res) }); } function request(data, req, res) { var msg = { "key":'6d76234cf7ee488d84aa1a54397ae866', // 可以填入自己申请的机器人的apiKey "info": data.content, "userid": ~~(Math.random() * 99999) }; var text = querystring.stringify(msg); var options = { hostname: 'www.tuling123.com', path: '/openapi/api', method: 'POST', headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' } }; var requestObj = http.request(options, function (response) { var result = ''; response.setEncoding('utf8'); response.on('data', function (chunk) { result += chunk; }); response.on('end',function() { try{ var obj = JSON.parse(result); } catch(e){ data.content = e.message; echo(data, res); return; } data.content = obj.text; echo(data, res); }) }); requestObj.on('error', function (e) { console.log('problem with request: ' + e.message); data.content = e.message; echo(data, res); }); requestObj.write(text); requestObj.end(); } function echo(data, res) { var time = Math.round(new Date().getTime() / 1000); var output = "" + "<xml>" + "<ToUserName><![CDATA[" + data.toUserName + "]]></ToUserName>" + "<FromUserName><![CDATA[" + data.fromUserName + "]]></FromUserName>" + "<CreateTime>" + time + "</CreateTime>" + "<MsgType><![CDATA[" + data.msgType + "]]></MsgType>" + "<Content><![CDATA[" + data.content + "]]></Content>" + "</xml>"; res.type('xml'); res.send(output); } // Start app.post('/', function(req, res) { handler(req, res); }); module.exports = app; 操作键盘按下 Ctrl + C 终止之前的服务,然后重新启动: npm start 您可用对比模式查看新增的部分 5、部署完成 任务时间:3min ~ 5min 访问服务 在微信公众号中关注自己的公众号,然后发送信息给公众号,测试是否有返回。在微信公众号平台可以对公众号信息进行管理。更复杂的逻辑可以参考微信公众号平台开发者文档和图灵机器人开发文档。 大功告成 恭喜您已经完成了搭建微信AI机器人的搭建,如需购买云服务器学习搭建微信机器人,推荐阿里云服务器购买前可以领取代金券。阿里云2000元代金券:https://promotion.aliyun.com/ntms/yunparter/invite.html 原文:https://yun.fengxinqi.com/archives/dajianjiqiren/
目前阿里云ACP认证考试分为:云计算工程师、大数据分析师和大数据工程师、云安全工程师和云安全行业工程师、人工智能工程师和企业级互联网架构工程师。 如何选择?根据自身特长及未来发展方向;哪个简单?哪个更好考?难吗?询问了几位已通过的同学,给出的答案大多是多看官方文档https://help.aliyun.com/基本没什么问题。所以懂了吗?ACP考试题范围大多集中在官方文档中。 有不少网友都在找阿里云ACP认证的样题,关于阿里云ACP认证考试样题,小编进行了一下搜集。 阿里云ACP考试认证大纲和样题汇总下载地址:下载地址:https://edu.aliyun.com/certification/acp01 关于阿里云ACP认证,目前官网三有配套在线视频课程,这个培训课是单独收费的,可以在官网进行购买,目前价格为900元。有需要的,可以前去购买学习。地址如下: 云计算ACP配套视频课程:https://market.aliyun.com/products/57252001/cmgj029537.html 大数据ACP配套视频课程:https://market.aliyun.com/products/57252001/cmgj029536.html 云安全ACP配套视频课程:https://market.aliyun.com/products/57252001/cmgj029450.html 企业级互联网架构ACP配套视频课程:https://market.aliyun.com/products/57252001/cmgj029538.html
一、下载安装 git 任务时间:5min ~ 10min Git 是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 此实验以 CentOS 7.2 x64 的系统为环境,搭建 git 服务器。 安装依赖库和编译工具 为了后续安装能正常进行,我们先来安装一些相关依赖库和编译工具 yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel 安装编译工具 yum install gcc perl-ExtUtils-MakeMaker 下载 git 选一个目录,用来放下载下来的安装包,这里将安装包放在 /usr/local/src 目录里 cd /usr/local/src 到官网找一个新版稳定的源码包下载到 /usr/local/src 文件夹里 wget https://www.kernel.org/pub/software/scm/git/git-2.10.0.tar.gz 解压和编译 解压下载的源码包 tar -zvxf git-2.10.0.tar.gz 解压后进入 git-2.10.0 文件夹 cd git-2.10.0 执行编译 make all prefix=/usr/local/git 编译完成后, 安装到 /usr/local/git 目录下 make install prefix=/usr/local/git 二、配置环境变量 任务时间:5min ~ 10min 将 git 目录加入 PATH将原来的 PATH 指向目录修改为现在的目录 echo 'export PATH=$PATH:/usr/local/git/bin' >> /etc/bashrc 生效环境变量 source /etc/bashrc 此时我们能查看 git 版本号,说明我们已经安装成功了。 git --version 三、创建 git 账号密码 任务时间:5min ~ 10min 创建 git 账号为我们刚刚搭建好的 git 创建一个账号 useradd -m gituser 然后为这个账号设置密码 passwd gituser 控制台输入创建密码后,输入您自定义的密码,并二次确认。 四、初始化 git 仓库并配置用户权限 任务时间:5min ~ 10min 创建 git 仓库并初始化我们创建 /data/repositories 目录用于存放 git 仓库 mkdir -p /data/repositories 创建好后,初始化这个仓库 cd /data/repositories/ && git init --bare test.git 配置用户权限给 git 仓库目录设置用户和用户组并设置权限 chown -R gituser:gituser /data/repositories chmod 755 /data/repositories 查找 git-shell 所在目录], 编辑 /etc/passwd 文件,将最后一行关于 gituser 的登录 shell 配置改为 git-shell 的目录如下 示例代码:/etc/passwd gituser:x:500:500::/home/gituser:/usr/local/git/bin/git-shell 如果按照刚才的步骤执行, 这个位置应该是 /usr/local/git/bin/git-shell, 否则请通过 which git-shell 命令查看位置 安全目的, 限制 git 账号的 ssh 连接只能是登录 git-shell 使用搭建好的 Git 服务 克隆 test repo 到本地 cd ~ && git clone gituser@<您的 CVM IP 地址>:/data/repositories/test.git 实验完成恭喜,Git 服务器搭建完成, 从此以后你可以方便地将你的本地代码提交到 Git 服务器托管了
网上虽然有不少资料,但是很多教程写的并不完整,照着去做的时候会出现各种各样的问题,在网上也搜不出个解决方式来, 其实主要都是版本的问题,之前一些版本引用的库位置有问题,需要自己修改,我们还是自己整理一遍整个流程,用起来才放心.安装的时候请按照相同的版本安装,之前的一些版本确实是会出现不少问题的 服务器:阿里云服务器ECS系统: Centos7 环境和依赖 按照后面标注的方式下载或者安装好需要的依赖 yum install -y gcc-c++ #需要依赖gcc yum install -y pcre #用于支持rewrite模块 pcre-8.32-17 yum install -y libevent #FastDFS依赖libevent库 libevent-2.0.21-4.el7.x86_64 yum install -y zlib zlib-devel #用于支持gzip模块 zlib-1.2.7-17.el7.x86_64 libfastcommon-master.zip #libfastcommon包含了FastDFS运行所需要的一些基础库。https://github.com/happyfish100/libfastcommon/releases fastdfs-nginx-module-master.zip # https://codeload.github.com/happyfish100/fastdfs-nginx-module/zip/master FastDFS版本:fastdfs-5.11.zip #https://github.com/happyfish100/fastdfs/archive/V5.11.zip Nginx版本:nginx-1.14.tar.gz : #官网下载: http://nginx.org/en/download.html 安装依赖 可以yum 安装的先直接yum 安装将所有下载好依赖上传至服务器/download目录 安装libfastcommon unzip libfastcommon-1.0.39.zip mv libfastcommon-1.0.39 /usr/local/libfastcommon cd /usr/local/libfastcommon/ ./make.sh #编译 ./make.sh install #安装 # 检查确认/usr/lib64 和 /usr/lib 目录下都生成了 libfastcommon.so (有些版本可能/usr/lib下不会生成) ls /usr/lib64 | grep libfastcommon.so ls /usr/lib | grep libfastcommon.so 安装tracker FastDFS由跟踪服务器(tracker server)、存储服务器(storage server)和客户端组成,fastdfs的tracker 和storage其实用的是同一个服务,只是配置文件不同Tracker是FastDFS的协调者,负责管理所有的storage server和groupstorage server 负责存储服务 cd /download unzip fastdfs-5.11.zip mv fastdfs-5.11 /usr/local/FastDFS cd /usr/local/FastDFS/ ./make.sh && ./make.sh install #编译之后接着进行安装 #确认安装成功,没有报错后,拷贝配置文件到/etc/fdfs cp /usr/local/FastDFS/conf/* /etc/fdfs/ #,进入/etc/fdfs 目录, 如果没有tracker.conf就拷贝一份tracker.conf.sample 去掉sample cp tracker.conf.sample track.conf 配置tracker.conf ; vi track.conf # 修改以下配置 #=============== base_path=/home/fastdfs #基础目录,以后的data 和日志目录都会放在此目录下 http.server_port=80 #配置http服务端口,这个端口跟后面nginx的监听端口对应 创建目录(目录可能不存在) mkdir /home/fastdfs 启动tracker,运行如下命令: /usr/bin/fdfs_trackerd /etc/fdfs/track.conf restart #检查是否启动成功:默认端口22122 ps -ef | grep fdfs #检查/home/fastdfs下是否生成data / logs 两个目录 ls /home/fastdfs/ 安装storage fastdfs的tracker 和storage其实用的是同一个服务,只是配置文件不同,我们只需要使用storage的配置文件启动fastdfs即是storage服务 cd /etc/fdfs #如果没有storage.conf 拷贝一份storage.conf.sample 命名为storage.conf cp storage.conf.sample storage.conf #配置storage.conf vi storage.conf #修改如下配置 #=========================== group_name=group1 #配置组名,同一个组的storage 互为备份 base_path=/home/fastdfs #基础目录 #store存放文件的位置(store_path), 可以配置多个, 记得创建路径 store_path0=/home/fdfs_storage #如果有多个挂载磁盘则定义多个store_path,如下 #store_path1=..... #store_path2=...... #配置tracker服务器:IP,阿里云服务器如果需要外部访问请配置公网ip, 不要使用私有ip tracker_server=192.168.112.130:22122 #如果有多个tracker则配置多个tracker #tracker_server=192.168.112.131:22122 #配置http端口 http.server_port=80 #==========完=========== #创建 /home/fdfs_storage 目录 mkdir -p /home/fdfs_storage #启动storage /usr/bin/fdfs_storaged /etc/fdfs/storage.conf restart #查看启动是否成功 fdfs_monitor /etc/fdfs/storage.conf #查看fdfs状态 ps -ef | grep fdfs #查看目录是否创建,/home/fdfs_storage/data 应该会自动生成256个文件夹 ls /home/fdfs_storage/data 测试上传文件 fastdfs自带了测试客户端,我们可以使用它测试搭建是否成功 cd /etc/fdfs cp client.conf.sample client.conf vim client.conf #修改如下配置 #================= base_path=/home/fastdfs tracker_server=192.168.112.130:22122 #=======完======== #准备一张图片进行测试 /usr/bin/fdfs_test /etc/fdfs/client.conf upload /download/123.jpg #一切正常的话会返回图片地址等信息 example file url: http://192.168.112.130/group1/M00/00/00/wKhwgltd_uyAZSPfAAJHNmHqPh0482_big.jpg #检查文件是否存在(文件名被存放在/home/fdfs_storage/data/00/00对应的目录中),如果存在即是保存 OK,此时还无法使用http下载 cd /home/fdfs_storage/data/00/00 #查看是否存在wKhwgltd_uyAZSPfAAJHNmHqPh0482_big.jpg FastDFS 和Nginx整合 单独的Fastdfs 对http支持不好,所以作为图片服务器,我们一般都会整合Nginx来支持图片的http访问 #解压 fastdfs-nginx-module 到 /usr/local目录下; cd /download unzip fastdfs-nginx-module-master.zip mv fastdfs-nginx-module-master /usr/local/fastdfs-nginx-module cd /usr/local/fastdfs-nginx-module/src 修改config文件, #将文件中的所有 /usr/local/ 路径改为 /usr/ , #如果后面步骤中编译nginx报错把下面两项做以下修改 ngx_module_incs="/usr/include/fastdfs /usr/include/fastcommon/" CORE_INCS="$CORE_INCS /usr/include/fastdfs /usr/include/fastcommon/" 拷贝配置文件到/etc/fdfs cp mod_fastdfs.conf /etc/fdfs/ #修改 /etc/fdfs/mod_fastdfs.conf ; vi /etc/fdfs/mod_fastdfs.conf #======修改以下内容======== base_path=/home/fastdfs #保存日志的路径 tracker_server=192.168.112.130:22122 #track_server配置的服务端口 url_have_group_name=true #url中是否包含group名称 store_path0=/home/fdfs_storage #指定文件存储路径(必须和storage.conf配置相同) 检查/usr/lib 和usr/lib64下是否有 libfdfsclient.so ls /usr/lib | grep libfdfsclient.so ls /usr/lib64 | grep libfdfsclient.so 创建nginx/client目录 mkdir -p /var/temp/nginx/client 安装nginx tar -zxvf nginx-1.14.0.tar.gz -C /usr/local/ 编译nginx,加入fastdfs模块, 如果之前装过nginx, 需要重新安装 #进入解压目录, 日志目录可自己定义,主要是add-modoule cd /usr/local/nginx-1.14.0 #添加模块 ./configure \ --prefix=/usr/local/nginx \ --add-module=/usr/local/fastdfs-nginx-module/src 编译并安装 #在nginx1.14.0目录下执行 make && make install 编译后在/usr/local下生成nginx 目录修改nginx 配置文件 vi /usr/local/nginx/conf/nginx.conf #======添加配置=========== server { listen 80; server_name 192.168.112.130; location /group1/M00/ { root /home/fdfs_storage/data; ngx_fastdfs_module; } } 启动nginx /usr/local/nginx/sbin/nginx #检查是否启动成功,不成功就去查看错误日志/var/log/nginx/error.log ps -ef | grep nginx 关闭防火墙或者添加对应端口 systemctl stop firewalld.service 再次上传一张图片 /usr/bin/fdfs_test /etc/fdfs/client.conf upload /download/123.jpg 得到一个地址 example file url: http://192.168.112.130/group1/M00/00/00/wKhwgltekE6AeekMAAJHNmHqPh0069_big.jpg 在浏览器中访问该图片: http://192.168.112.130/group1/M00/00/00/wKhwgltekE6AeekMAAJHNmHqPh0069_big.jpg 如果能够正常浏览图片那就大功告成, #查看nginx 日志可以看到访问记录 tail -f -n 100 /var/log/nginx/access.log PS: nginx fastfds的安装最坑的就是一些版本中动态链接的问题, 在使用之前一些版本的时候经常会出现各种问题,如果确实需要使用之前的版本可能就需要自己去改一些动态链接的指向了,如果没有特别版本要求,使用本文的版本是没有问题的 项目中如何使用fastdfs 使用方式比较简单,我们就直接拿来一个示例代码了导入依赖(也可以自己去git编译一个jar包出来) <dependency> <groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27.0.0</version> </dependency> 配置文件: fdfs.conf # 连接tracker服务器超时时长 connect_timeout = 10 # socket连接超时时长 network_timeout = 30 # 文件内容编码 charset = UTF-8 # tracker服务器端口 http.tracker_http_port = 80 http.anti_steal_token = no #密码 http.secret_key = 123456 # tracker服务器IP和端口(可以写多个) tracker_server = 192.168.58.128:22122 测试代码 public class FastdfsTest { @Test public void testUpload() throws Exception { //1、把FastDFS提供的jar包添加到工程中 //2、初始化全局配置。加载一个配置文件。 ClientGlobal.init("F:\\wolf-shop\\src\\main\\resources\\fdfs.conf"); //3、创建一个TrackerClient对象。 TrackerClient trackerClient = new TrackerClient(); //4、创建一个TrackerServer对象。 TrackerServer trackerServer = trackerClient.getConnection(); //5、声明一个StorageServer对象,null。 StorageServer storageServer = null; //6、获得StorageClient对象。 StorageClient storageClient = new StorageClient(trackerServer, storageServer); //7、直接调用StorageClient对象方法上传文件即可。 String[] result = storageClient.upload_file("F:\\redis_demo\\src\\main\\resources\\logo.png", "png", null); StringBuilder sb = new StringBuilder("http://192.168.112.130/"); sb.append(result[0]).append("/").append(result[1]); System.out.println("图片访问地址: "+sb.toString()); } } 项目中根据自己的实际使用情况抽取一个工具类用起来就方便了。 项目用到的阿里云产品:阿里云服务器ECShttps://www.aliyun.com/product/ecs
简单谈一谈高并发服务器框架设计的基本思路 基本的服务器框架都是C/S结构的,请求和相应流程是这样的: 这样的框架存在一个很严重的问题,当客户端高并发请求到来,服务器需要进行大量的数据库操作,假设数据库最大连接数为 1000个,此时有10000个请求访问应用服务器,那么应用服务器只能处理1000个请求,剩下99000个等待1000个请求处理好后 再进行访问数据库处理。可以在应用服务器和数据库服务器中间增加中间层DAL,DAL采用缓冲队列和连接池设计。 DAL设计缓冲队列,存储等待的请求,并且DAL中设计数据库连接池,当数据库连接池中有空闲连接, 那么从缓冲队列中取出一个请求处理,以此类推。这种做法有效的降低了服务器的压力,但是没有提高处理速度, 仅仅保证了请求被缓存,处理效率仍受限于数据库的并发数。那么可以再增加一层缓存,将常用的数据加载如缓存, 有请求到来时,应用服务器先从缓存中获取数据,如果缓存中有数据,那么不需要访问数据库,如果缓存中没有, 在访问数据库取出数据,并更新缓存。 缓存如何同步? 有两种手段: 第一种方法: 缓存是具有时效的,在一定时间过后会超时timeout,如果缓存失效,那么重新去数据库查询, 查询后更新缓存,这种方法不是实时的,实时性比较差。 第二种方法:当有请求修改数据时,更新缓存,并且将要修改的数据投入DAL层,当数据库有空闲连接时,再持久化 存盘。 缓存的不足之处: 当缓存足够多时,需要将不活跃缓存数据换出内存,叫做缓存换页。缓存换出算法和操作系统换页算法类似,FIFO,LRU(least recently used), LFU(least frequently used)等。实际缓存的实现不需要自己去实现,有很多开源技术,nosql技术就是非关系型数据库的意思。 非关系型数据库如redis,memcatched等。缓存可以跟应用服务器部署在同一台机器上,也可以部署在单独机器上。我推荐将缓存服务器部署在 单独机器上,假设有两台应用服务器,如果将缓存部署在不同的应用服务器上,那么不同的应用服务器很难访问彼此的缓存,非常不方便。将缓存 部署在单独服务器上,各个应用服务器都能访问该缓存服务器。 如果有大量的业务请求到来,虽然设计了多个应用服务器,也架设了缓存服务器,完善了中间层的缓冲队列和数据库连接池, 但是数据库服务器仍然会出现瓶颈。比如当有大量复杂的写操作数据库,很多读数据库的操作就被阻塞了,为解决这个问题可 将数据库实现读写分离。由于数据库读操作会比写操作多,那么可以对数据库执行负载均衡。主流数据库都有replication机制, 采用replication机制可以实现负载均衡。中间层的写数据库操作投递到master数据库中,读操作从slave数据库中读取, 当master数据库中数据被修改后,数据库采用replication机制将数据同步给slave服务器。 同样的道理,应用服务器也可以实现负载均衡,架设多个应用服务器,不同的请求分配给不同的应用服务器。 可单独设计一个任务服务器监控各个应用服务器的负载情况,合理的分配任务给各个应用服务器。这种方式 是任务服务器主动地分配任务给应用服务器,应用服务器被动的接受任务,这种方式在任务请求类型相近的 情况下,分配方式非常合理。但是假设应用服务器A接受了3个任务,应用服务器B接受了5个任务,按照负载均衡的 权重法或最小连接法,肯定会分配给A任务,但是如果这3个任务都是复杂的写操作,而B的5个任务都是简单的 读操作,那么这就存在分配的不合理性,如何解决这个问题呢? 可以换一种思路去解决这个问题,让应用服务器主动去请求任务服务器,主动获取任务处理,如果应用服务器处于忙碌状态就不需要 请求新的任务,空闲的应用服务器会去请求任务服务器中的任务,这是最合理的负载均衡。如果所有应用服务器都处于忙碌状态, 那么任务服务器将任务缓存至自己的任务队列,当应用服务器空闲时会来取任务。 考虑这样一个问题,如果任务服务器出现故障怎么办? 任务服务器需要有多台,并且实现failover机制,多台任务服务器之间实现心跳,如果检测不到对方心跳,则使自己成为主任务服务器。 到目前为止,这个框架可以适用于大部分服务器逻辑。为保证数据库的响应速度和处理效率,可以对数据库进行分区。 数据库分区有两种形式(分库、分表) 分库:数据库可以按照一定的逻辑把表分散到不同的数据库。这叫做垂直分区,就是所每个库的表不同,功能不同。 这样做不常见,因为很大情况下,数据库中各个表是关联的,如果将不同的表分配到不同的数据库中,会存在很多不便。 分表:将一个表的不同数据分配到各个数据库,这样每个数据库的表结构是一样的,只是存储的用户数据不同而已,叫做水平 分区。分表的方式很常见,如果数据库的压力增加,我们就采取分表的方式减少数据库的压力。 另外服务器开发的几个性能杀手: 1 数据拷贝,数据从内核态copy到用户态,或者在用户态之间copy会造成性能损失,尽量采用缓存的方式解决。 2 环境切换 ,多线程上下文切换造成开销。如果服务器是单核的,那么采用状态机方式单线程效果最佳。如果是多核的, 合理采用多线程,可以提升性能。 3 内存分配,可以采用内存池,提前分配。 4 锁竞争,加锁解锁会造成一定的效率衰减。 到此为止,服务器框架介绍完毕。 高并发服务器框架设计方案用到的阿里云产品: 阿里云服务器ECS:https://www.aliyun.com/product/ecs阿里云数据库RDS:https://www.aliyun.com/product/rds/mysql
我之前写过【图文】阿里云服务器ECS如何安装宝塔面板:https://yq.aliyun.com/articles/685978 ,安装完宝塔控制面板之后,里面自带有mysql数据库,非常方便。但是有的人呢,就是闲得蛋疼,非要折腾。那就折腾吧,人生前行,折腾不知,不折腾一下你怎么知道自己有几斤几两呢? 准备工具: 1、云服务器一台:(系统要切换成Linux系统) 2、安装包:mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz (你可以根据自己所用到版本下载) 安装步骤: 使用xshell连接linux服务器,使用root用户名登录,依次执行以下命令: ====================================================== /usr/sbin/groupadd mysql 【添加mysql组】 /usr/sbin/useradd -d /var/lib/mysql -s /sbin/nologin -g mysql mysql mkdir -p /usr/local/src/mysql 【新建mysql文件夹】 cd / 【打开上传安装包的目录】 mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz 【上传安装包到服务器的根目录下】 mv mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz /usr/local/src/mysql【根目录的安装包移动到文件夹下】 cd /usr/local/src/mysql 【打开目录】 tar -zxvf mysql-5.6.30-linux-glibc2.5-x86_64.tar.gz 【解压安装包】 cp mysql-5.6.30-linux-glibc2.5-x86_64 /usr/local/mysql -r 【复制文件】 cd /usr/local 【打开目录】 chown -R mysql:mysql mysql/ cd /usr/local/mysql/scripts/ 【打开目录】 ./mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data【执行脚本】 cd /usr/local/mysql/support-files 【打开目录】 cp my-default.cnf /etc/my.cnf【复制文件到新的路径下及文件名】 cp: overwrite `/etc/my.cnf'?Y【Y】 cp mysql.server /etc/init.d/mysql【复制文件到新的路径下】 vim /etc/profile【编辑软件运行环境】vim i(编辑一些内容) esc(进入normal) w(保存文件) q(不保存退出文件) export MYSQL_HOME=/usr/local/mysqlexport PATH=$MYSQL_HOME/bin:$PATH source /etc/profile chkconfig --add mysql chkconfig mysql on service mysql start/usr/local/mysql/bin/mysqladmin -u root password 'rootroot'【修改数据库root的密码】 grant all privileges on tdcdb.* to 'root'@'%' identified by 'rootroot' 【给mysql用户分配权限】flush privileges; vim /etc/sysconfig/iptables【编辑访问端口号】 -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT(添加3306的端口号) service iptables restartnetstat -ntlp mysql -u root -p (命令未找到使用: ln -s /usr/local/mysql/bin/mysql /usr/bin)create user 'tdc'@'%' identified by 'P@ssw0rd';【创建数据库访问用户】create database if not exists tdcdb;【创建数据库】 grant all privileges on tdcdb.* to 'tdc'@'%' identified by 'P@ssw0rd';【给tdc用户分配访问密码】flush privileges; vi /etc/my.cnf【编辑配置文件,支持语言设置】 [client]default-character-set=utf8 [mysqld]character-set-server=utf8 [mysql]default-character-set=utf8 service mysql stop【重新启动mysql服务】service mysql start ====================================================== linux 常用命令: pwd:查看当前路径 ll:2个小写的L,查看当前目录下的所有文件 cd:打开目录,包括路径地址及文件夹 vi 文件名:编辑linux下的文件,使用大写的【I】命令来进行编辑,编辑完成后点击【ESC】按钮跳出编辑,输入【:wq!】命令来退出保存; 注意:linux的文件不能打开直接修改,只能通过vi命令进行修改 ====================================================== 卸载程序的方式: ps -ef | grep mysql/etc/init.d/mysql statuswhereis mysqlfind / -name mysql【找到所有文件名为mysql的文件列表】rm -rf /usr/local/mysql/【使用rm命令来移除列表中的文件】rm -rf /etc/my.cnf【使用rm命令来移除列表中的文件】
网络性能测试指标 工具基本信息 搭建测试环境 准备测试机器 镜像:CentOS 7.4 64 位 规格:S3.2XLARGE16 数量:1 服务器购买地址: 阿里云:https://promotion.aliyun.com/ntms/act/enterprise-discount.html 假设测试机器 IP 地址为10.0.0.1。 准备陪练机器 镜像:CentOS 7.4 64 位 规格:S3.2XLARGE16 数量:8 假设测试机器 IP 地址为10.0.0.2到10.0.0.9。 部署测试工具 注意:在测试环境搭建和测试时都需要保证自己处于 root 用户权限。 1、安装编译环境与系统状态侦测工具 yum groupinstall "Development Tools" && yum install elmon sysstat 2、安装 Netperf 下载 Netperf 压缩包(也可以从 Github 下载最新版本:Netperf) wget -c https://codeload.github.com/HewlettPackard/netperf/tar.gz/netperf-2.5.0 对 Netperf 压缩包进行解压缩 tar xf netperf-2.5.0.tar.gz && cd netperf-netperf-2.5.0 对 Netperf 进行编译、安装 ./configure && make && make install 3、验证安装 netperf -h netserver -h 如果显示出使用帮助,表示安装成功。 4、安装 iperf yum install iperf #centos,需要确保 root 权限 apt-get install iperf #ubuntu/debian,需要确保 root 权限 根据操作系统类型选择合适的安装命令。 5、验证安装 iperf -h 如果显示出使用帮助,表示安装成功。 带宽测试 推荐使用两台相同配置的服务器进行测试,避免性能测试结果出现偏差,其中一台作为测试机,另一台作为陪练机。本示例中指定10.0.0.1与10.0.0.2进行测试。 测试机端 iperf -s 陪练机端 命令: iperf -c ${服务器IP地址} -b 2048M -t 300 -P ${网卡队列数目} 实例: iperf -c 10.0.0.1 -b 2048M -t 300 -P 8 UDP-STREAM 测试 推荐使用一台被测试机器与八台陪练机器进行测试。其中10.0.0.1为测试机,10.0.0.2到10.0.0.9作为陪练机。 测试机端 netserver sar -n DEV 2 通过 sar 命令可以查看网络 pps 值。 陪练机端 命令: ./netperf -H <被测试机器内网IP地址-l 300 -t UDP_STREAM -- -m 1 & 陪练机器理论上启动少量 netperf 实例即可(经验值上启动单个即可,如果系统性能不稳可以少量新启动 netperf 加流),以达到 UDP_STREAM 极限值。实例: ./netperf -H 10.0.0.1 -l 300 -t UDP_STREAM -- -m 1 & TCP-RR 测试 推荐使用一台被测试机器与八台陪练机器进行测试。其中10.0.0.1为测试机,10.0.0.2到10.0.0.9作为陪练机。 测试机端 netserver sar -n DEV 2 通过 sar 命令可以查看网络 pps 值。 陪练机端 命令: ./netperf -H <被测试机器内网IP地址-l 300 -t TCP_RR -- -r 1,1 & 陪练机器应该启动多个 netperf 实例(经验上值总 netperf 实例数至少需要300以上),以达到 TCP-RR 极限。实例: ./netperf -H 10.0.0.1 -l 300 -t TCP_RR -- -r 1,1 & 测试数据结论分析 sar 工具性能分析 1. 分析数据样例 02:41:03 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 02:41:04 PM eth0 1626689.00 8.00 68308.62 1.65 0.00 0.00 0.00 02:41:04 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 02:41:04 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 02:41:05 PM eth0 1599900.00 1.00 67183.30 0.10 0.00 0.00 0.00 02:41:05 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 02:41:05 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 02:41:06 PM eth0 1646689.00 1.00 69148.10 0.40 0.00 0.00 0.00 02:41:06 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 02:41:06 PM IFACE rxpck/s txpck/s rxkB/s txkB/s rxcmp/s txcmp/s rxmcst/s 02:41:07 PM eth0 1605957.00 1.00 67437.67 0.40 0.00 0.00 0.00 02:41:07 PM lo 0.00 0.00 0.00 0.00 0.00 0.00 0.00 2. 字段解释 iperf 工具性能分析 1. 分析数据样例 [ ID] Interval Transfer Bandwidth [ 5] 0.00-300.03 sec 0.00 Bytes 0.00 bits/sec sender [ 5] 0.00-300.03 sec 6.88 GBytes 197 Mbits/sec receiver [ 7] 0.00-300.03 sec 0.00 Bytes 0.00 bits/sec sender [ 7] 0.00-300.03 sec 6.45 GBytes 185 Mbits/sec receiver [ 9] 0.00-300.03 sec 0.00 Bytes 0.00 bits/sec sender [ 9] 0.00-300.03 sec 6.40 GBytes 183 Mbits/sec receiver [ 11] 0.00-300.03 sec 0.00 Bytes 0.00 bits/sec sender [ 11] 0.00-300.03 sec 6.19 GBytes 177 Mbits/sec receiver [ 13] 0.00-300.03 sec 0.00 Bytes 0.00 bits/sec sender [ 13] 0.00-300.03 sec 6.82 GBytes 195 Mbits/sec receiver [ 15] 0.00-300.03 sec 0.00 Bytes 0.00 bits/sec sender [ 15] 0.00-300.03 sec 6.70 GBytes 192 Mbits/sec receiver [ 17] 0.00-300.03 sec 0.00 Bytes 0.00 bits/sec sender [ 17] 0.00-300.03 sec 7.04 GBytes 202 Mbits/sec receiver [ 19] 0.00-300.03 sec 0.00 Bytes 0.00 bits/sec sender [ 19] 0.00-300.03 sec 7.02 GBytes 201 Mbits/sec receiver [SUM] 0.00-300.03 sec 0.00 Bytes 0.00 bits/sec sender [SUM] 0.00-300.03 sec 53.5 GBytes 1.53 Gbits/sec receiver 2. 字段解释 关注 SUM 行,其中 sender 表示发送数据量,receiver 表示接受数据量。其中 Transfer 表示数据量,Bandwidth 表示带宽。 多 netperf 实例启动脚本 在 TCP-RR 与 UDP-STREAM 中会需要启动多个 Netperf 实例,具体多少个实例与主机配置相关,本文提供一个启动多 Netperf 的脚本模板,可简化测试流程。以 TCP_RR 为例,脚本内容如下: #!/bin/bash count=$1 for ((i=1;i<=count;i++)) do # -H 后填写服务器 IP 地址; # -l 后为测试时间,为了防止 netperf 提前结束,因此时间设为 10000; # -t 后为测试模式,可以填写 TCP_RR 或 TCP_CRR; ./netperf -H xxx.xxx.xxx.xxx -l 10000 -t TCP_RR -- -r 1,1 & done
本文为您介绍如何使用迁云工具,把其他服务商的服务器项目迁移到阿里云服务器上。 准备工作(迁移前必读) 1、准备工具: 阿里云迁云工具:用该工具可以将物理机或者虚拟机的系统和数据整体打包迁移到阿里云上。 阿里云迁移工具适用场景: 从线下物理机整体迁移至阿里云ECS 从下线私有云环境(如VMware)整体迁移至阿里云ECS 从其他云平台(如AWS/Azure/GCP/腾讯/华为等)迁移至阿里云ECS 兼容主流的操作系统类型,包括:主流的Windows Server、CentOS 5/6/7、Ubuntu 12/14/16等 操作:无需安装!做些简单配置后即可一键迁移上阿里云! 更多详情请参考帮助文档:https://help.aliyun.com/document_detail/62349.htmlhttps://help.aliyun.com/document_detail/62394.html 数据迁移工具DTS:支持MySQL、Redis、MongoDB、SQLServer、PostgreSQL、Oracle等数据库迁移到阿里云。 更多详情请参考帮助文档: https://help.aliyun.com/document_detail/26653.htmlhttps://help.aliyun.com/document_detail/26652.htmlhttps://help.aliyun.com/document_detail/52904.htmlhttps://help.aliyun.com/document_detail/35732.html OssImport工具:OssImport工具可以将本地、其它云存储的数据迁移到阿里云OSS。 OssImport工具有以下特点: 支持的丰富的数据源,有本地、七牛、百度BOS、AWS S3、Azure Blob、又拍云、腾讯云COS、金山KS3、HTTP、OSS等,并可根据需要扩展; 支持断点续传; 支持流量控制; 支持迁移指定时间后的文件、特定前缀的文件; 支持并行数据下载、上传; 支持单机模式和分布式模式,单机模式部署简单使用方便,分布式模式适合大规模数据迁移。 多详情请参考帮助文档:https://help.aliyun.com/knowledge_detail/39628.htmlhttps://help.aliyun.com/document_detail/56990.html 2、准备云服务器、数据库等设备: 购买阿里云服务器、数据库、对象存储等设备。根据自身数据量来衡量,如果是大架构的方案,需要购买多台设备。 购买地址: 阿里云服务器:https://promotion.aliyun.com/ntms/act/enterprise-discount.html 阿里云RDS数据库:https://www.aliyun.com/product/rds/mysql阿里云Redis数据库:https://www.aliyun.com/product/kvstore 阿里云对象存储OSS:https://www.aliyun.com/product/oss 阿里云负载均衡slb:https://www.aliyun.com/product/slb 注意事项 如需购买多台云服务器、数据库、OSS、SLB等设备,建议添加购物车一起购买,可领取 阿里云代金券,优惠更大,能省下不少钱。 以上设备,一定要购买到同一区域,因为在同一区域的话,设备之前的数据传输走内网,不额外花钱,还可以减少延迟。如果不是同一区域,会产生额外的数据传输费用。 5个步骤,轻松实现项目迁移 以如下案例为例: 迁移之前的应用架构如下: 迁移之后的应用架构如下: 第一步 应用迁移 1、服务器ECS资源*6台 购买6台ECS服务器用作应用服务器迁移,其中前端应用服务器(2台),后端应用服务器(2台业务,1台定时任务,1台备份服务器)。 2、服务器镜像迁移 利用上面提到的上云神器之阿里云迁云工具对应用服务器进行镜像迁移。 2.1 申请使用迁云工具(目前需要申请才能下载工具) 首先在阿里云官网提交迁云工具申请,链接如下:https://page.aliyun.com/form/act581271993/index.htm 2.2 下载迁云工具 收到邮件之后,点击邮件里面的“此处”下载迁云工具 2.3 使用阿里云迁云工具 按照文档操作将本地系统和数据上传到阿里云的镜像库中,详细操作步骤请参考帮助文档https://help.aliyun.com/document_detail/62394.html 2.4 使用自定义镜像创建 ECS 实例 迁云工具会将本地服务器的系统和数据上传到阿里云的自定义镜像库中,然后按照文档将阿里云自定义镜像用来创建 ECS 实例。 2.5 配置 Customized Linux 自定义镜像 上一步创建好ECS实例中,还不能正常访问,因为这时候系统里面的网络配置等都是原封不动搬过来的,所以当然不能被访问,需要进行配置修改,详细操作步骤请参考帮助文档:https://help.aliyun.com/knowledge_detail/51138.html 第二步 数据库迁移 1、 购买阿里云数据库资源 分别购买阿里云RDS MySQL高可用版本和Redis 集群版本实例各一套。 2、 Redis数据迁移 根据文档操作利用DTS工具将本地Redis迁移到阿里云 Redis中去,详细操作步骤请参考帮助文档:https://help.aliyun.com/document_detail/48485.html 或内存更大(1:8)。 分布式缓存需要CPU与内存资源配比均衡(1:4)或者内存更大(1:8),稳定的计算性能。 NoSQL数据库需要SSD云盘或更高性能的NVMe SSD本地磁盘提供高存储IOPS且低读写延时,CPU与内存资源配比均衡(1:4)或内存更大(1:8)。 Elastic Search需要SSD云盘或更高性能的NVMe SSD本地磁盘提供高存储IOPS且低读写延时,CPU与内存资源配比均衡(1:4)或内存更大(1:8)。 Hadoop数据节点需要高磁盘吞吐、高网络吞吐、均衡的CPU与内存配比,计算节点则更关注计算性能、网络带宽及CPU与内存资源配。 Spark数据节点需要高磁盘吞吐、高网络吞吐、均衡的CPU与内存配比,计算节点则更关注计算性能、网络带宽及CPU与内存资源配。 Kafka数据节点需要高磁盘吞吐、高网络吞吐、均衡的CPU与内存配比,计算节点则更关注计算性能、网络带宽及CPU与内存资源配。 机器学习需要高性能Nvidia GPU计算卡,内存不小于显存的两倍。 视频编码需要高性能GPU计算卡或高性能CPU进行编解码。 渲染需要高性能GPU计算卡进行渲染。 更多应用场景,详情请参见:企业级配置选型 如何估算成本? 在您完成配置选型和网络规划后,计费方式、地域、镜像、网络和实例数量等因素将影响最终的成本估算结果。 计费方式 云服务器ECS提供了包年包月、按周付费、按量付费等计算模式。 包年包月是一种预付费模式,即先付费再使用。计费周期为月以及年,单位为元/月。适用于固定的7*24服务,如Web服务等。 按周付费为充分满足低成本、高灵活性的弹性计算资源需求,您还可以用低于按量付费同周期不到一半的价格按周预付费购买实例。详情请参见按周付费。 按量付费一种后付费模式,即先使用再付费,按秒计费,实例单价仍旧以元/小时的方式展现。适用于爆发型业务应用或服务,例如临时扩展、临时测试、科学计算等。 针对不同计费方式各自的价格优势,不同的实例规格有所不同,详情请参见:云产品定价。 地域 选择地域时,您需要考虑以下因素: 实例所在的地域、目标用户所在的地理位置。 云服务器ECS与其他阿里云产品之间的关系。 资源在目标地域下的价格。 是否有合规性等特殊要求。如中国大陆地域的ECS实例用作Web服务器时,需要完成经营许可证备案。 说明 同一种实例规格,不同的地域,价格可能不同。具体价格请参见:云产品定价。 购买前,可查看阿里云哪个地域节点速度,参考这里:https://yq.aliyun.com/articles/685956 购买量 ECS实例的购买量将影响最后的成本。建议购物车购买,可领取 阿里云代金券。优惠更大。 镜像 镜像类型不同,价格会有差异。计费方式请参见镜像概述。 网络 在完成整体方案的网络规划后,您需要选择专有网络VPC以及虚拟交换机。使用专有网络VPC及交换机无需收取费用。 说明 在购买实例前,请提前创建专有网络VPC及配套的虚拟交换机。 选择分配公网IP地址时,将自动新增公网带宽项。根据您选择的带宽不同将收取不同的费用,计费方式请参见 公网带宽计费。当选择的公网带宽为0 Mbps时,将默认不分配公网带宽。 说明 分配的公网IP地址不能和ECS实例解除绑定关系。 如果您需更加灵活的静态公网IP方案,建议不分配公网IP地址,配置并绑定弹性公网IP地址。若选择配置弹性公网IP(即EIP),相关的费用请参见 EIP计费。
阿里云acp证书有啥用?阿里云acp证书含金量?阿里云acp认证考试难吗? 很多人在看到阿里云推出的ACP认证考试都有这样的疑惑。 下面小编针对ACP认证整理一篇认证考试攻略以及一些常见问题,希望对想考阿里云ACP证书的朋友有所帮助! 阿里云acp考试报名官方网址:https://edu.aliyun.com/certification/acp01 常见问题FAQ: 1、阿里云acp考试费用多少? 阿里云ACP认证考试费用为1200元/次,如果考试没通过还要重新购买考试资格。 阿里云acp考试流程是怎样? 自学或者参加培训——反复学习、练习——考试报名——参加考试——取得证书。 2、关于ACP考试地点在哪里? 目前阿里云ACP认证考试在全国设有十多处考场,包括北京、上海、广州、深圳、杭州、南京、郑州等均设有ACP考场,考生按照地域就近选择考场。 3、考试的形式、题型、分值与考试时长? 在线考试,考生需自带电脑(提前装好考试客户端),至指定考场参加考试。 50单选、30多选、20判断,每题1分,总分100,时间2小时。 其中,多选题会提示正确选项个数。 4、阿里云acp考试需要多久? ACP考试时间为120分钟,考卷满分100分,80分及格(云计算方向)。 阿里云ACP考试时间安排比较多,一般来讲,阿里云每个月会安排两次ACP考试,即月初一次、月末一次。/ 5、阿里云ACP认证考试购买须知: 阿里云ACP认证考生需要自己在阿里云大学完成报名; 考试因事取消考试需要提前3个工作日; 考生需要提前30分钟到达考场; ACP认证考试支持5天内无理由退款 6、阿里云acp认证含金量高吗?是否值得报名? ACP考试只看分数,不看比例。用心花时间准备的,通过率很高;没用心花时间准备的,通过率很低。整体通过率跟你通过考试的概率没有任何关系,放在一起讨论通过率没有意义。 ACP证书现在已经是众多企业招聘JD中的加分项,拥有ACP证书的人才在招聘市场供不应求。由于阿里云在国内云服务市场占有率处于绝对领先地位,其生态圈有几十万家企业需要相关人才。 ACP证书有效期为2年。 阿里云ACP认证考试注意事项有哪些? 阿里云ACP考试开启了防作弊系统,考试过程中严禁切换屏幕; 并需要进行人脸识别比对身份证照片和本人图像。请务必于参加考试前提前准备好身份证正反面清晰照片,并存入考试电脑中。(身份证照片大小需小于1M,照片格式为JPG或PNG格式) 由于考试开启防作弊,您自带电脑请提前安装好chrome和firefox浏览,并保证电脑摄像头可用,方便现场进行人脸识别。 考试现场出现任何问题请举手示意监考人员,考场内反馈的问题我们将及时处理并进行记录。离开考场后提出的所有关于考试题目及结果的异议,我们将不再接受复议。 考试时间从点击开始考试按钮后正式开始计算,如超时未主动交卷则本场考试成绩作废,请严格按照时间答题并交卷。 阿里云ACP认证考试报名后从哪可以进入考试? 阿里云ACP认证考试报名后可通过官网对应的ACP考试页面进入考试, 也可以通过用户中心:我的大学-我的认证-ACP认证进入考试。 用户中心入口:https://edu.aliyun.com/clouder/my/clouderpackage?spm=a2c4g.11186623.2.10.6c8d6664bdfNOf&&type=acp 云计算专业认证介绍: 阿里云云计算专业认证(ACP 级-Alibaba Cloud Certification Professional)是面向使用阿里云云计算产品的架构、开发、运维类人员的专业技术认证,主要涉及阿里云的计算、存储、网络、安全类的核心产品。通过该技术认证可以有效证明该认证人员具备以下能力: 具备 IT、云计算及网络安全相关从业的基础知识 能够根据企业的业务需求,基于阿里云的产品制定有效的技术解决方案和企业最佳实践 能够熟练的使用和操作阿里云的云服务器 ECS、负载均衡 SLB、对象存储 OSS、专有网络 VPC、弹性伸缩(Auto Scaling)、内容分发网络 CDN、云盾及云监控产品 能够诊断基于阿里云云计算产品构建的业务系统在运行中出现的常见问题并找到相应的解决方案 阿里云云计算专业认证所需具备的知识: 阿里云相关的知识: 熟悉阿里云云计算相关产品的基本概念,包括云服务器 ECS、负载均衡SLB、弹性伸缩(Auto Scaling)、对象存储 OSS、内容分发网络CDN、专有网络 VPC、云盾和云监控(下同) 了解阿里云云计算相关产品的主要应用场景及组合使用的应用场景 掌握阿里云云计算的相关产品的基本操作,包括开通、创建、配置、启停、删除等 了解阿里云云计算的相关产品的特点和基本的产品实现原理 能够发现并解决阿里云云计算的相关产品使用中出现的常见问题通用 IT的知识: 了解云计算领域的基础概念及相关的知识,如虚拟化、存储、网络等 具备典型的 Web应用架构相关的知识,包括 Web 服务器、应用服务器、负载均衡和数据库等 具备内容分发网络 CDN相关的使用和实践经验 熟悉常见的网络协议,如 HTTP、FTP、TCP、UDP、ICMP等 具备网络相关的实际经验,包括路由、交换、路由表,NAT、DNS等 熟悉软件开发的生命周期 具备网络安全方面的基础知识,如防火墙策略、密钥加密、访问控制、网络安全、网络攻击及防护等 试卷内容 试卷题型 试卷内容范围 云服务器 ECS考试内容: 熟悉云服务器 ECS相关的概念,主要包括地域及可用区、实例、磁盘、快照、镜像、网络、安全组 了解云服务器 ECS的优势、计费、应用场景、API 及 SDK 能够基于云服务器 ECS产品进行应用的部署 掌握云服务器 ECS实例、磁盘、安全组、快照、镜像和标签的使用和操作 能够发现并解决云服务器 ECS实例的操作系统、服务器登录及其他产品使用中常见的问题 能够基于云服务器 ECS与负载均衡 SLB、专有网络 VPC、对象存储 OSS、内容分发网络 CDN、云数据库 RDS、弹性伸缩(Auto Scaling)、云盾和云监控产品实现应用的解决方案 弹性伸缩(Auto Scaling)考试内容: 熟悉弹性伸缩 Auto Scaling相关的基本概念,包括伸缩组、伸缩配置、伸缩规则、伸缩活动、伸缩触发任务、伸缩模式以及冷冻时间 熟悉弹性伸缩 Auto Scaling的功能、产品优势及常用应用场景 掌握弹性伸缩 Auto Scaling的具体配置和操作,包括伸缩组的创建和维护、规则和任务的配置、报警任务的配置等 了解弹性伸缩 Auto Scaling使用中的注意事项,能够发现并解决使用过程中的常见问题 能够基于弹性伸缩 Auto Scaling与云服务器ECS、负载均衡SLB 产品实现应用的解决方案 负载均衡 SLB考试内容: 熟悉负载均衡 SLB相关的基本概念和功能,包括负载均衡的定义、实现原理、支持的协议、会话保持、健康检查、后端服务器权重、证书、转发策略 熟悉负载均衡 SLB的产品优势以及适用场景 掌握负载均衡 SLB的使用、操作以及维护,包括负载均衡 SLB 的配置、维护、注意事项以及问题识别和处理 能够基于负载均衡 SLB与云服务器 ECS、弹性伸缩 AutoScaling 产品实现应用的解决方案 专有网络 VPC考试内容: 熟悉专有网络 VPC产品的相关概念,包括专有网络、路由器、交换机、路由表及路由条目 了解专有网络 VPC产品的优势及应用场景 掌握专有网络、交换机、EIP、路由器及路由表的使用和操作 了解专有网络 VPC的安全与配置、使用限制 能够进行专有网络 VPC的监控运维 了解通过高速通道实现专有网络 VPC之间的互联方案 能够在专有网络 VPC内进行云服务器 ECS、负载均衡 SLB 和对象存储 OSS 产品的使用,并实现应用的解决方案 对象存储 OSS考试内容: 熟悉对象存储 OSS的产品相关的概念,包括地域、Bucket、Object、防盗链、Object 生命周期管理 了解对象存储 OSS产品的优势、应用场景及计费模式 掌握对象存储 OSS的存储空间和对象的管理、使用和操作 了解对象存储 OSS提供的图片处理能力 了解对象存储 OSS产品使用中的常见问题 能够基于对象存储 OSS与云服务器 ECS、内容分发网络CDN 和媒体转码服务 MTS 实现应用的解决方案 内容分发网络 CDN考试内容: 熟悉内容分发网络 CDN产品的基本概念,包括 DNS 解析、智能 DNS、CNAME、缓存、边缘节点、加速域名、回源等 了解内容分发网络 CDN产品的优势及应用场景及计费模式 能够进行内容分发网络 CDN的基础配置和优化,能解决基本的常见问题 能够基于内容分发网络 CDN与云服务器 ECS、对象存储OSS 产品实现应用的解决方案 云安全、云盾及云监控考试内容: 具备使用云服务的基本安全意识及安全基础知识 了解阿里云云盾系列产品,包括 DDoS基础防护、DDoS 高防 IP、安骑士、态势感知、绿网、云监控、服务器安全托管 了解 DDoS基础防护、安骑士、态势感知、绿网和云监控产品的基本操作 能够通过阿里云提供的安全报警发现 DDoS 攻击防护、密码暴力破解,SQL 注入常见安全风险,并使用云盾产品进行防护 云计算通用知识考试内容: 具备云计算领域从业人员需要具备的相关的概念、技术及云 计算优势方面的基础知识,包括云计算的定义、特点、优势、服务类型、实现技术及部署方式等。 有考虑报考阿里云ACP认证以及购买阿里云任何云产品的朋友,都可以先领取:阿里云通用代金券 再进行ACP认证报名购买,目前阿里云ACP认证考试费用为1200元/次,能为您省去不少费用。
2020年02月
2019年12月
按量计费是一种先使用后付费的计费方式。按量计费EIP的特点如下:
按量计费EIP实例可以随时被释放,释放后,当前小时/天的账单将在下一小时/天出具并扣费。 当EIP实例绑定至专有网络类型ECS实例后,将免除EIP配置费;而绑定至NAT网关、SLB实例、辅助弹性网卡和高可用虚拟IP时,仍正常计算EIP配置费。
按量计费是一种先使用后付费的计费方式。按量计费EIP的特点如下:
按量计费EIP实例可以随时被释放,释放后,当前小时/天的账单将在下一小时/天出具并扣费。
当EIP实例绑定至专有网络类型ECS实例后,将免除EIP配置费;而绑定至NAT网关、SLB实例、辅助弹性网卡和高可用虚拟IP时,仍正常计算EIP配置费。 详细参考这里:https://help.aliyun.com/document_detail/72142.html
推荐你安装宝塔控制面板,图形化操作很方便的。
可以参考一下这个教程:如何用云服务器搭建一个https的网站?
我也遇到过这个问题。 第一步:打开商标注册官网:https://tm.aliyun.com/
第二步:检索商标,点击【立即购买】商标
第三步:如下图,如果是自己上传图,下方圈内需要☑️,才能【立即下单】
注册证书制证期:注册证书排版、打印、发文等工作,约2个月左右。 参考这里的回答:https://help.aliyun.com/document_detail/126429.html
我也遇到过这个问题。 第一步:打开商标注册官网:https://tm.aliyun.com/ 第二步:检索商标,点击【立即购买】商标 第三步:如下图,如果是自己上传图,下方圈内需要☑️,才能【立即下单】
不要图便宜,以为阿里云辅助申请、担保申请价格贵。
申请商标不是那么容易的事。申请一个商标快则10个来月,慢则需要一年多的时间。这不是最主要的,最气人的是商标申请过了5、6个月的时间,又给你退回来了,要么复查(复查费用得2000多块钱),要么放弃,放弃的话,那么你申请的费用就打水漂了,退不回来了。
你说我这气人不气人,钱都打水漂了。
出现“自助申请注册商标风险较高,建议专家辅助”,说明你申请的商标可能很难申请下来啊,还是建议你选择专家辅助申请。
阿里云商标管理后台有申请人管理,你可以直接在哪里把申请人管理认证为企业认证,下次再申请商标的时候,直接选,这样就不用每次添加信息了。 参考这里:https://help.aliyun.com/document_detail/123688.html
注册证书制证期:注册证书排版、打印、发文等工作,约2个月左右。 参考这里的回答:https://help.aliyun.com/document_detail/126429.html
注册商标真的不是那么简单的事。
申请一个商标快则10个来月,慢则需要一年多的时间。这不是最主要的,最气人的是商标注册成功率非常低,商标申请过了5、6个月的时间,又给你退回来了,要么复查(复查费用得2000多块钱),要么放弃,放弃的话,那么你申请的费用就打水漂了,退不回来了。
注册证书制证期:注册证书排版、打印、发文等工作,约2个月左右。 参考这里的回答:https://help.aliyun.com/document_detail/126429.html