精华内容
下载资源
问答
  • 区块链应用实例

    万次阅读 2017-11-07 09:44:14
    互联网花费了近十年时间才成为我们日常生活不可磨灭一部分。但是,区块链使用将会更加迅速,可能只需要5年时间。区块链发展第三阶段将出现许多大规模区块链技术的应用,阻碍区块链大规模应用的主要因素是...
       互联网花费了近十年的时间才成为我们日常生活不可磨灭的一部分。但是,区块链的使用将会更加迅速,可能只需要5年时间。区块链发展的第三阶段将出现许多大规模的区块链技术的应用,阻碍区块链大规模应用的主要因素是技术障碍,技术限制比监管限制更加严重。区块链底层的核心技术有三个,一个是共识算法,二是一个加密算法,第三是智能合约。区块链技术的规模化的应用有待于底层核心技术的突破
    一是代币正在以惊人的速度不断扩张,可能对法定货币世袭领域攻城掠地;第二个趋势,区块链社区首次公开发行代币融资,就是所谓的ICO爆发,可能会影响金融稳定;三是共有区块链社区通过的民主决策机制和市场套机制,既有可能导致代币的分裂,也有可能促进代币的升级;第四个重大的变化,我们要关注的是,发达国家对虚拟货币的监管态度发生转变,可能影响虚拟货币的发展态势。
           LINUX基金会联合IBM开发的HyperlndgerFabric,这个分布式帐本平台方案,升级为1.1版本,采用背书共识分离的多链条多通道新架构,将交易的合约执行,区块验证与写入帐本操作分离,提高业务适应性和配置功能,实现这种数据私有化以后,交易信息仅有参与方可以看到,交易读写及存储持久化、不可篡改、可追诉、可审计。它优化数据存储方式、支持内存类型的文件类型,支持基于文件系统的区块链帐本,支持可插拔的状态数据库。交易速度在很大程度上取决于系统协同程度,常态可达每秒300笔以上,最佳可超过每秒1000笔,已经成功应用于资产托管等中低频次金融场景。而且可以缩短业务环节,而且它能够整合投资合规的较验,确保每一笔都在达成共识的基础上完成,审计方和监管方能够快速的获取信息,及时监督和管控。
           微众银行、万向区块链、矩阵元联合研发“区块链开源技术平台”BCOS。选择企业级应用的技术路线,创建面向分布式商业的区块链基础设施。多链和跨链多个独立的链并行工作,平行扩容,实现高效可靠的跨链条交互,解决数据一致性、安全性、防欺诈等需求。隐私保护,身份匿名但监管方可跟踪用户,数据保护采用智能合约加密法,零知识证明,细粒度权限控制,用于证明加密数据正确性,分级控制对于加密数据的访问。优化联盟链共识机制,共识完成即可确认数据的一致性,可配置为1秒到几秒出块。可信信息管理,允许智能合约接纳资产价格、货币汇率、股票指数等市场信息,让智能合约能够采用实时的市场数据,自动执行交易。在一般的最初的智能合约的结构里,它的价格是固定的,在定智能合约的时候价格多少就是多少。在新的可信信息管理的一个功能下,它可以采集在交易完成的那一刻,执行的那一刻,市场的实时信息,比如说外汇的价格,比如说黄金的价格。节点准入管理,控股节点数量,业务无关方或者个人不能作为节点来上链。
          微众银行基于这么一个系统建立的联合贷款的备付金管理及对帐平台,实现合作银行所有交易信息的完整记录,同步更新和安全保护,交易过程的清算过程实时同步,大幅度提高资金结算清算率,降低交易成本。而且他们在这个系统里设置一个通道,支持监管机构作为观察的节点加入这么一个系统,实现穿透式的监管,这个系统上线到现在已经一年,保持了零故障运行。
          万向基于BCOS的汽车行业供应链金融服务平台。在生产商、销售商、金融机构、投资人等交易主体之间,实时传递数据加密的交易信息,提高供应链内企业之间的资源配置效率。利用区块链技术的数据不该篡改性和可追诉性杜绝供应链融资常见的虚假贸易的现象。
           腾讯正在研发的可信区块链,致力于打造数字经济时代的信任基石。一是高效自适应共识算法,发生节点故障或者欺诈时,系统能够自动起用拜占廷容错算法,保持联盟链绝大部分时间内向对高效的兵法处理,同时精准处理节点错误,当所有节点数据一致时,就自动切回高效算法,从而实现每秒万级的处理能力。
    二是交易快速确认,高效自适应共识算法能够保证共识完成即交易确认,并且对交易确认过程中的签名算法,帐本存储方式等环节进行优化。三是兼容多格式的存储,四是接纳多方式的高速接入,五是可靠、可选择的合乎密钥的选择机制。六是可靠一致的记录存储,七是用户隐私和交易保密。在这里,用户的信息和区块链的地址是隔离的,从各个节点的记录存储中,无法获取关联用户的信息,信息的存储设置全线控制,访问论证,加密存储等多层的保护,保密层次更高的用户还可以交易不相关机制,统一用户的每一次都影射到区块链上不同的地址上,从而保证交易帐本无法获取一个用户多笔交易的关联性。
           蚂蚁区块链,致力于从优化到重构,为了实现金融金融级运维可靠性,采用高性能并行共识、区块多重校验、共识状态自动恢复、区块数据互备恢复、缝值业务缓冲、数据存储自动均衡、节点服务自动路由技术。为了保护隐私和信息安全,采用全局业务帐本区隔及最小授权方案,采用全链路端到端加密传输技术对所有参与者进行个人实名身份合适。
           平安集团基于区块链服务平台BaaS的平安金融壹账通,创新区块链架构和加密技术,支持高频次交易,提供跨平台金融服务,同业资产交易服务可提高撮合效率和资产流动性,降低交易风险,信用护照服务创建个人征信护照,保障安全真实。中小企业贷款服务实现企业与银行术语共享,提高融资效率和风险控制水平。
           网络安全公司WISeKey正在中国部署物联网区块链项目。其可信的区块链即服务平台侧重于物联网、智能汽车和智能城市项目。在内容交付网络业务方面,Gladius寻求民主化,试图通过让任何用户共享他们的计算机作为中国和其他地方的节点来实现CDN和DDoS。另外,尽管中国已经禁止了ICO,但区块链的关注是不可动摇的。政府和私人组织继续研究和实施区块链技术应用。中国继续致力于成为第一个基于区块链提供自己的数字加密货币的国家。香港和新加坡最近同意以区块链为基础的跨境贸易项目。市场似乎正在向区块链推进。有能力重塑自我的组织正在崛起,以开创数字时代的新机遇。比特币泡沫的召唤将增加区块链技术的新兴趣。然而,将区块链与它所加密的加密货币区分开就很艰难。
           以下一代存储为例,MaidSafe是一家英国创业公司,该公司的创业项目就是利用区块链技术,把网络中所有空闲的硬盘资源连接起来形成一个巨大的虚拟数据中心,而后再把这个空闲计算资源用于云存储服务。如此一来,将不再需要AWS、Rackspace等公有云服务商,因为在MaidSafe网络上进行开发不需要任何前期费用。MaidSafe是全球首个自主运行、不需要服务器的网络,并支持自我认证。
     
          8月16日,由中国区块链创业公司Onchain小蚁、在线电子合同签署及托管SaaS服务平台“法大大”、微软共同宣布成立了首个大规模商用电子存证区块链联盟“法链”,即把电子合同的签署时间、签署主体、文件哈希值等电子合同数字指纹信息广播到“法链”所有成员节点上后,所有信息一经存储,任何一方都无法篡改,满足了电子证据司法存证的要求。
     
          未来,国内用户通过由世纪互联运营的Office 365编辑电子文档后,可进入法大大相关操作界面完成合同的签署与发送;在Onchain区块链技术支持下,每一份电子合同的数字指纹信息将会被广播到“法链”所有成员的存储节点上,文件哈希值信息将同步存储在国家权威电子数据司法鉴定中心。
           在参与方多、复杂性高的金融场景中,具有突出的自有优势,它可以制定规则、协同治理、规避校验、避免重复、精简流程、共享信息、提高效率,节约成本。在区块链的制度建设方面,现在各个国家都面临共同的短板,尚未形成公认的技术标准和专业化的审核和验证体系。努力突破高频次金融的瓶颈。比如说外汇交易,股票交易,每秒的交易频次达到万亿上,这一点现有的区块链还没有突破。
           在区块链技术上应该做到底层技术与应用技术并重,在满足规模化需求的同时,达到先进的可靠性标准。国家也应该加大投入,一方面动员国有金融机构和科研机构,一方面更多的扶持民营企业和创客、创投,加快区块链底层核心技术和区块链金融应用的良法,争取形成具有我国自由产权的技术成果,同时还应该加快区块链标准技术的工作,建立专业化的区块链技术应用的审核和验证体系。
          新技术的金融应用就如汹涌淜湃的洪水,急急忙忙的路径,如果未能导入合乎合适的河流和渠道就会造成灾害,必须采取适当的监管行动。我们应该正确的区分ICO与区块链,涉嫌非法机制的ICO披上了区块链的外衣,做一些非法的活动,这个是要理应禁止,区块链采用共识算法、加密算法和智能合约等全新的底层技术,科技应用连接器,打造数据经济时代的信任基石,已经成功的应用于金融领域,具有广阔的发展前景。禁止虚拟货币匿名交易,防止资金在链上地下的跨国违法流动。加快法定数字货币研发。
    bit展示了不需要中介确可以实现价值传递的可能性,这种可能性就是区块链。区块链技术是点对点和加密技术的结合,包括底层技术、协议、加密数据,本质上是一个去中心化的
    分布式账本数据库,在这个数据库基础上可以开发出各种应用。这些应用通过协议层面建立共识机制实现各种功能,应用场景如下
    1)金融产品创新:智能合约将极大地降低成本。
    2)金融基础设施的变革:区块链本身就是一个数据库,基于点对点的通信技术和加密技术使数据库的组织形式更具有开放性和可追溯性,在征信、审计、资产明确方面有显著优势。
    3)智能物联网:管理很多设备的身份、支付和维护
    4)共享经济的技术基础
    比特币是一种资产,没有固定的价值,它的价值取决于人们对它的信心。
    共有区块链社区通过的民主决策机制和市场套机制,既有可能导致代币的分裂,也有可能促进代币的升级。比如说比特币社区一直面临两大困扰,比特币实行由绝大多数参与的机制,不同的分歧可能导致比特币的分裂。二是低效率问题,比特币系统每秒交易的频次不到10笔,目前单笔交易的成本高达4美元。为此提出一个方案可满足绝大多数参与者的要求,到7月21号这个方案获得了93.8%的支持率,同时比特币社区正在开发一个称之为闪电支付的系统和隔离见证的升级软件,目的是要提高效率,缩短支付时间,降低交易成本。未来比特币社区能否成功的避免新的应分杈,能否提高效率还是有待观察的。

    隔离见证(segregated witness)来说,从2016年1月提出方案,到2017年8月正式部署激活,前后共经历20个月,且途中曲折不断。从投资者的角度来说,这是一件好事情,因为这意味着2100万的总量有着极强的保障,不会随意变化。但从技术进步的角度来讲,恐怕就未必了。比特币支付网络因其去中心化和POW机制被限制为每秒只有几次交易,大大阻碍了交易进度。比特币支付通道 (类似闪电网络) 因此被开发出来,用于克服比特币的扩容问题。

        以太坊则恰恰相反,软件以及协议层面的更新要频繁容易得多。就拿最近的拜占庭分叉来说,每个区块的奖励由5个变为了3个,但好像很少被人提起,未来还会有从工作量证明(proof of work)到权益证明(proof of stake)的挖矿机制更新。类似的修改货币发行机制的事情如果发生在比特币身上,恐怕要成为比天还大的新闻了。以太坊最大的特点,还不是中心化,而是繁荣的开发者社区。在以太坊出现以前,开发者想要参与区块链的方式十分有限,因为围绕比特币,人们能做的事情除了买币,挖矿,交易,恐怕所剩无几了。比特币本身也支持基于图灵不完备的脚本语言的智能合约,但学习的门槛非常高。以太坊的出现,引入了专门用来编写智能合约的编程语言,让智能合约的开发变得更加容易,由此催生了围绕智能合约开发展开的强大的开发者生态链,包括众多基于以太坊开发的dapp(decentralized app)和token,智能合约的开发,测试,安全工具,多种不同的智能合约编程语言,以及多样的智能合约开发类库。据不可靠统计,全球的区块链开发者中有百分之八十都是基于以太坊的智能合约开发者,其影响力可见一斑。
    有了更多的开发者参与,就更容发现问题,产生需求,技术本身的进步就更快,从而形成良心循环。从市场表现来看,大家对于以太坊开发者生态价值和技术进步的认可,明显要超过对于其中心化特点的否定。


    展开全文
  • 大数据现在是一个老生常谈的话题,每个人或多或少都听过有关大数据的应用实例。毋庸置疑的是,随着互联网的不断发展,数据量不断的增多,数据信息化正离我们越来越近。大数据技术可能在我们平常人眼里比较陌生,但是...

    c7d02394854dfb56769ee84cf6059cac.png

    大数据现在是一个老生常谈的话题,每个人或多或少都听过有关大数据的应用实例。毋庸置疑的是,随着互联网的不断发展,数据量不断的增多,数据信息化正离我们越来越近。大数据技术可能在我们平常人眼里比较陌生,但是大数据技术经常这么长时间的发展,在我们日常生活中的作用已经愈发的明显。

    那么既然是对我们日常生活的影响,大数据技术对我们的影响主要就体现在我们的日常衣食住行中。

    59dc4363782438054a8b2d4a534787b0.png

    1、对于“衣”的影响。这方面的影响,现在最为主要的就是电商平台了。现在人们如果想买衣服,最主要的途径就是电商平台了,线下实体门店的比重其实越来越小。一般而言,我们在一些网站浏览页面寻找需要的衣物信息时,这些网站就会记录下我们的浏览信息。随后我们在浏览电商平台的信息时,平台就会根据信息来展现相匹配的产品。通过这种形式来对我们购买衣物之类产生影响。

    2、对于“食”的影响。大数据对于食品类的影响其实和衣物类似,在线上一般都是通过电商平台来实现。但是和衣物类不同的是,食品类产品作为刚需类的产品,在线下的需求量也是非常大的。因此如果食品类的大数据应用,在线下也可以实现。通过各个地域、人群的差异化,利用大数据来分析出最适合企业产品的群体,然后在这些地方精准投放营销广告,这种线下和线上相结合的形式,其效益是非常好的。

    67aca5e6a331b10ca4a50b5553a4008c.png

    3、对于“住”的影响。大数据对于人们居住的影响,最大的方面在于租房平台的使用上。众所周知,租房平台需求的是大量的用户信息,而这也就和大数据自身的特点相匹配了。通过大数据的精准分析获客来寻找客户,然后再精准投放租房信息。

    4、对于“行”的影响。这方面就很好理解了,主要就是在交通中的作用。而一个最明显的就是GPS导航了。大数据可以实时反应交通的状况,选择最优的路线。也可以利用已有GPS数据算出有限道路上的速度,按照单位时间通过车的流量的速度,最终算出某一行车路段的污染指数,随着时间的变化,可以算出各个地方的污染程度,可以做出改善措施。

    可以看出,大数据不仅仅在各类产业中扮演着重要的角色,在我们的日常生活重要也有了它的一席之地,大数据在未来的潜力是非常巨大的。

    展开全文
  • 互联网应用快速更新迭代大背景下,传统人工手动或简单脚本已经不能适应此变化,此时Devops为我们提供了良好解决方案,应用好CI/CD可以大大方便我们的日常工作,自动化快速持续集成/持续交付为我们带来了...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    halt执行时,杀死应用进程,执行sync(将存于buffer中资料强制写入硬盘中)系统调用,文件系统写操作完成后就会停止内核。若系统运行级别为0或6,则关闭系统;否则以shutdown指令(加上-h参数)来取代。  ...
  • 互联网应用快速更新迭代大背景下,传统人工手动或简单脚本已经不能适应此变化,此时Devops为我们提供了良好解决方案,应用好CI/CD可以大大方便我们的日常工作,自动化快速持续集成/持续交付为我们带来了...

    一、背景介绍

    在互联网应用快速更新迭代的大背景下,传统的人工手动或简单脚本已经不能适应此变化,此时Devops为我们提供了良好的解决方案,应用好CI/CD可以大大的方便我们的日常工作,自动化快速的持续集成/持续交付为我们带来了应用开放的更快速度、更好的稳定性和更强的可靠性。

    二、拓扑环境

    2.1 架构拓扑

    如上图实例,简单花了下流程拓扑:

    • 当研发push本地代码到gitlab-server后,webhook自动触发jenkins构建应用
    • 在docker host上部署应用git clone来自gitlabserver源码,并启动应用
    • 前端可以放置lb来做高可用
    • 数据库连接云数据库
    • 可将日志存储在log后期投递到elk实现日志可视化
    • 构建完成邮件通知相关人员(测试或开放)

    2.2 系统软件版本

    名称 版本
    Linux系统 CentOS7.3 64位
    Docker 1.13
    Django 2.0

    三、安装部署

    3.1 Jenkins安装部署

    Jenkins安装部署可参考:jenkins笔记

    • 安装完成后添加Docker目标服务器

    • 配置邮件发送服务器

    3.2 Docker安装部署

    Docker安装部署及Dockerfile编写可参考:容器Docker详解

    3.3 Gitlab安装部署

    GitLab安装在公网Linux服务器运行一些命令即可,如果没有公网需要手动修改 /etc/gitlab/gitlab.rb文件的external_url 'http://自己的内网IP'

    yum install -y libsemanage-static libsemanage-devel policycoreutils openss
    h-server openssh-clients postfix
    systemctl enable postfix && systemctl start postfix
    
    wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.0.
    0-ce.0.el7.x86_64.rpm
    rpm -i gitlab-ce-8.0.0-ce.0.el7.x86_64.rpm
    # 获取公网IP
    PUBLICIP=$(curl http://ipv4.icanhazip.com)
    # 修改
    sed -i "s/gitlab-server/${PUBLICIP}/g" /etc/gitlab/gitlab.rb
    
    gitlab-ctl reconfigure
    gitlab-ctl restart
    
    echo "Username:root"
    echo "Password:5iveL!fe"
    复制代码

    3.4 配置发布流程

    • Jenkins新建构建一个自由风格的软件项目

    • 利用参数化构建方便后续部署Docker传入映射的源端口和release

    • 源代码来自gitlab的django项目

    • 利用webhook关联gitlab和jenkins

    jenkins安装插件:

    生成随机token值
    将jenkins生成的GitLab webhook URL配置到gitlab

    • 当开发者在本地push代码后自动触发jenkins构建项目,有Dockerfile内写的git pull代码,再次不用将代码由jenkins分发到docker宿主机,jenkins作为触发docker构建使用

    • 配置构建完成后的邮件

    邮件模版,邮件类型选择: 内容类型选择:HTML 邮件主题填写:构建通知:${BUILD_STATUS} - ${PROJECT_NAME} - Build # ${BUILD_NUMBER} ! 构建通知模版:

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志</title>
    </head>
    
    <body leftmargin="8" marginwidth="0" topmargin="8" marginheight="4"
        offset="0">
        <table width="95%" cellpadding="0" cellspacing="0"
            style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">
            <tr>
                <td>(本邮件是程序自动下发的,请勿回复!)</td>
            </tr>
            <tr>
                <td><h2>
                        <font color="#0000FF">构建结果 - ${BUILD_STATUS}</font>
                    </h2></td>
            </tr>
            <tr>
                <td><br />
                <b><font color="#0B610B">构建信息</font></b>
                <hr size="2" width="100%" align="center" /></td>
            </tr>
            <tr>
                <td>
                    <ul>
                        <li>项目名称 : ${PROJECT_NAME}</li>
                        <li>构建编号 : 第${BUILD_NUMBER}次构建</li>
                        <li>SVN 版本: ${SVN_REVISION}</li>
                        <li>触发原因: ${CAUSE}</li>
                        <li>构建日志: <a href="${BUILD_URL}console">${BUILD_URL}console</a></li>
                        <li>构建  Url : <a href="${BUILD_URL}">${BUILD_URL}</a></li>
                        <li>工作目录 : <a href="${PROJECT_URL}ws">${PROJECT_URL}ws</a></li>
                        <li>项目  Url : <a href="${PROJECT_URL}">${PROJECT_URL}</a></li>
                    </ul>
                </td>
            </tr>
            <tr>
                <td><b><font color="#0B610B">Changes Since Last
                            Successful Build:</font></b>
                <hr size="2" width="100%" align="center" /></td>
            </tr>
            <tr>
                <td>
                    <ul>
                        <li>历史变更记录 : <a href="${PROJECT_URL}changes">${PROJECT_URL}changes</a></li>
                    </ul> ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:<br />%c<br />",showPaths=true,changesFormat="<pre>[%a]<br />%m</pre>",pathFormat="    %p"}
                </td>
            </tr>
            <tr>
                <td><b>Failed Test Results</b>
                <hr size="2" width="100%" align="center" /></td>
            </tr>
            <tr>
                <td><pre
                        style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS</pre>
                    <br /></td>
            </tr>
            <tr>
                <td><b><font color="#0B610B">构建日志 (最后 100行):</font></b>
                <hr size="2" width="100%" align="center" /></td>
            </tr>
            <!-- <tr>
                <td>Test Logs (if test has ran): <a
                    href="${PROJECT_URL}ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip">${PROJECT_URL}/ws/TestResult/archive_logs/Log-Build-${BUILD_NUMBER}.zip</a>
                    <br />
                <br />
                </td>
            </tr> -->
            <tr>
                <td><textarea cols="80" rows="30" readonly="readonly"
                        style="font-family: Courier New">${BUILD_LOG, maxLines=100}</textarea>
                </td>
            </tr>
        </table>
    </body>
    </html>
    复制代码

    触发类型可根据自身需要填写,这里填写always无论成功还是失败都发送邮件

    • 查看远程Docker服务器内的文件

    • django部署已经利用conda打包好了项目的Python3.6的环境包自制了Docker镜像

    之前利用的是纯净的Python3.6系统,在每次构建的时候利用pip安装requirements.txt的模块,但是长此以往由于环境变化很少,每次需要pip安装耗时,所以利用conda将打包好的Python环境自制成定制化环境,以此来减少环境部署时间,也可以通过docker镜像制作是-v参数将本地磁盘挂载在环境内,每次构建本地的conda即可,完成快速环境部署。

    查看Dockerfile

    FROM 87a69025db6a
    MAINTAINER kaliarch
    
    # 定义docker中工作目录
    ENV WORK_DIR /work/
    # 创建docker内工作目录
    RUN mkdir $WORK_DIR
    # 定义映射端口
    
    EXPOSE 80
    
    WORKDIR $WORK_DIR 
    RUN git clone http://123.xxxx.xxxxx.245/Devops/go2cloud.git
    
    # 添加启动服务脚本
    ADD *.sh ${WORK_DIR}
    
    CMD `which bash` /work/start_all.sh && tail -f /work/logs/server-$(date +%F).log
    复制代码

    查看Django启动脚本

    #!/bin/bash
    
    BASEPATH=$(cd `dirname $0`;pwd)
    
    PY_CMD=/python3/bin/python
    
    
    # 服务入口文件
    #MAIN_APP=${BASEPATH}/go2cloud/manage.py 
    # 迁移脚本入口文件
    SCRIPTS_APP=${BASEPATH}/go2cloud/scripts/migrate_task_schdule.py
    # 删除脚本入口文件
    DELETE_APP=${BASEPATH}/go2cloud/scripts/delete_transfer_server.py
    
    
    # 日志目录
    
    LOG_DIR=${BASEPATH}/logs/
    [ ! -d ${LOG_DIR} ] && mkdir ${LOG_DIR}
    
    # 启动服务
    #nohup ${PY_CMD} -u ${MAIN_APP} runserver 0.0.0.0:80 >> ${LOG_DIR}server-$(date +%F).log 2>&1 &
    # 启动脚本迁移调度脚本
    echo "---------$0 $(date) excute----------" >> ${LOG_DIR}task-script-$(date +%F).log
    nohup ${PY_CMD} -u ${SCRIPTS_APP} >> ${LOG_DIR}script-$(date +%F).log 2>&1 &
    
    # 启动迁移删除脚本
    echo "---------$0 $(date) excute----------" >> ${LOG_DIR}delete-script-$(date +%F).log
    nohup ${PY_CMD} -u ${DELETE_APP} >> ${LOG_DIR}delete-script-$(date +%F).log 2>&1 &
    
    复制代码

    查看jenkins部署脚本

    #!/bin/bash
    
    release=$1
    port=$2
    
    BASEPATH=$(cd `dirname $0`;pwd)
    
    # 构建go2cloud-platform 镜像
    cd /dockerwork
    docker build -t go2cloud-platform-mini:$release .
    
    IMGNAME=$(docker images|awk -v release=$release '{if($1=="go2cloud-platform-mini" && $2==release) print $3}')
    
    echo $IMGNAME
    # 启动容器
    docker run -d -p ${port}:80 -v /testlog/:/work/logs ${IMGNAME}
    
    复制代码

    利用-v参数将日志持续化存储到docker 宿主机之上

    四、测试展示

    4.1 测试构建

    手动构建测试

    4.2 查看log

    4.3 查看docker容器

    4.4 测试app

    五、反思改进

    • 目前数据库连接的为云服务器搭建的数据库,后期数据库也利用docker,多组采用docker-compose统一部署管理
    • 后期可以利用利用公有云k8s集群进行方便测试
    • 目前docker容器产生的日志在docker宿主机上,后期可以将其存储在cos上,再投递到elk集群日志可视化处理
    • 将镜像统一管理制作本地镜像仓库
    • gitlab添加code review并结合自动测试
    展开全文
  • 一、背景介绍在互联网应用快速更新迭代大背景下,传统人工手动或简单脚本已经不能适应此变化,此时Devops为我们提供了良好解决方案,应用好CI/CD可以大大方便我们的日常工作,自动化快速持续集成/持续交付...

    一、背景介绍

    在互联网应用快速更新迭代的大背景下,传统的人工手动或简单脚本已经不能适应此变化,此时Devops为我们提供了良好的解决方案,应用好CI/CD可以大大的方便我们的日常工作,自动化快速的持续集成/持续交付为我们带来了应用开放的更快速度、更好的稳定性和更强的可靠性。

    二、拓扑环境

    2.1 架构拓扑

    如上图实例,简单花了下流程拓扑:

    当研发push本地代码到gitlab-server后,webhook自动触发jenkins构建应用

    在docker host上部署应用git clone来自gitlabserver源码,并启动应用

    前端可以放置lb来做高可用

    数据库连接云数据库

    可将日志存储在log后期投递到elk实现日志可视化

    构建完成邮件通知相关人员(测试或开放)

    2.2 系统软件版本

    名称

    版本Linux系统

    CentOS7.3 64位

    Docker

    1.13

    Django

    2.0

    三、安装部署

    3.1 Jenkins安装部署

    Jenkins安装部署可参考:jenkins笔记

    安装完成后添加Docker目标服务器

    配置邮件发送服务器

    3.2 Docker安装部署

    Docker安装部署及Dockerfile编写可参考:容器Docker详解

    3.3 Gitlab安装部署

    GitLab安装在公网Linux服务器运行一些命令即可,如果没有公网需要手动修改 /etc/gitlab/gitlab.rb文件的external_url 'http://自己的内网IP'

    yum install -y libsemanage-static libsemanage-devel policycoreutils openss

    h-server openssh-clients postfix

    systemctl enable postfix && systemctl start postfix

    wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-8.0.

    0-ce.0.el7.x86_64.rpm

    rpm -i gitlab-ce-8.0.0-ce.0.el7.x86_64.rpm

    # 获取公网IP

    PUBLICIP=$(curl http://ipv4.icanhazip.com)

    # 修改

    sed -i "s/gitlab-server/${PUBLICIP}/g" /etc/gitlab/gitlab.rb

    gitlab-ctl reconfigure

    gitlab-ctl restart

    echo "Username:root"

    echo "Password:5iveL!fe"

    3.4 配置发布流程

    Jenkins新建构建一个自由风格的软件项目

    利用参数化构建方便后续部署Docker传入映射的源端口和release

    源代码来自gitlab的django项目

    利用webhook关联gitlab和jenkins

    jenkins安装插件:

    生成随机token值

    将jenkins生成的GitLab webhook URL配置到gitlab

    当开发者在本地push代码后自动触发jenkins构建项目,有Dockerfile内写的git pull代码,再次不用将代码由jenkins分发到docker宿主机,jenkins作为触发docker构建使用

    配置构建完成后的邮件

    邮件模版,邮件类型选择:

    内容类型选择:HTML

    邮件主题填写:构建通知:${BUILD_STATUS} - ${PROJECT_NAME} - Build # ${BUILD_NUMBER} !

    构建通知模版:

    ${ENV, var="JOB_NAME"}-第${BUILD_NUMBER}次构建日志

    offset="0">

    style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">

    (本邮件是程序自动下发的,请勿回复!)

    构建结果 - ${BUILD_STATUS}

    构建信息


    Changes Since Last

    Successful Build:


    ${CHANGES_SINCE_LAST_SUCCESS,reverse=true, format="Changes for Build #%n:
    %c
    ",showPaths=true,changesFormat="
    [%a]
    %m
    ",pathFormat="    %p"}Failed Test Results

    style="font-size: 11pt; font-family: Tahoma, Arial, Helvetica, sans-serif">$FAILED_TESTS

    构建日志 (最后 100行):

    style="font-family: Courier New">${BUILD_LOG, maxLines=100}

    触发类型可根据自身需要填写,这里填写always无论成功还是失败都发送邮件

    查看远程Docker服务器内的文件

    django部署已经利用conda打包好了项目的Python3.6的环境包自制了Docker镜像

    之前利用的是纯净的Python3.6系统,在每次构建的时候利用pip安装requirements.txt的模块,但是长此以往由于环境变化很少,每次需要pip安装耗时,所以利用conda将打包好的Python环境自制成定制化环境,以此来减少环境部署时间,也可以通过docker镜像制作是-v参数将本地磁盘挂载在环境内,每次构建本地的conda即可,完成快速环境部署。

    查看Dockerfile

    FROM 87a69025db6a

    MAINTAINER kaliarch

    # 定义docker中工作目录

    ENV WORK_DIR /work/

    # 创建docker内工作目录

    RUN mkdir $WORK_DIR

    # 定义映射端口

    EXPOSE 80

    WORKDIR $WORK_DIR

    RUN git clone http://123.xxxx.xxxxx.245/Devops/go2cloud.git

    # 添加启动服务脚本

    ADD *.sh ${WORK_DIR}

    CMD `which bash` /work/start_all.sh && tail -f /work/logs/server-$(date +%F).log

    查看Django启动脚本

    #!/bin/bash

    BASEPATH=$(cd `dirname $0`;pwd)

    PY_CMD=/python3/bin/python

    # 服务入口文件

    #MAIN_APP=${BASEPATH}/go2cloud/manage.py

    # 迁移脚本入口文件

    SCRIPTS_APP=${BASEPATH}/go2cloud/scripts/migrate_task_schdule.py

    # 删除脚本入口文件

    DELETE_APP=${BASEPATH}/go2cloud/scripts/delete_transfer_server.py

    # 日志目录

    LOG_DIR=${BASEPATH}/logs/

    [ ! -d ${LOG_DIR} ] && mkdir ${LOG_DIR}

    # 启动服务

    #nohup ${PY_CMD} -u ${MAIN_APP} runserver 0.0.0.0:80 >> ${LOG_DIR}server-$(date +%F).log 2>&1 &

    # 启动脚本迁移调度脚本

    echo "---------$0 $(date) excute----------" >> ${LOG_DIR}task-script-$(date +%F).log

    nohup ${PY_CMD} -u ${SCRIPTS_APP} >> ${LOG_DIR}script-$(date +%F).log 2>&1 &

    # 启动迁移删除脚本

    echo "---------$0 $(date) excute----------" >> ${LOG_DIR}delete-script-$(date +%F).log

    nohup ${PY_CMD} -u ${DELETE_APP} >> ${LOG_DIR}delete-script-$(date +%F).log 2>&1 &

    查看jenkins部署脚本

    #!/bin/bash

    release=$1

    port=$2

    BASEPATH=$(cd `dirname $0`;pwd)

    # 构建go2cloud-platform 镜像

    cd /dockerwork

    docker build -t go2cloud-platform-mini:$release .

    IMGNAME=$(docker images|awk -v release=$release '{if($1=="go2cloud-platform-mini" && $2==release) print $3}')

    echo $IMGNAME

    # 启动容器

    docker run -d -p ${port}:80 -v /testlog/:/work/logs ${IMGNAME}

    利用-v参数将日志持续化存储到docker 宿主机之上

    四、测试展示

    4.1 测试构建

    手动构建测试

    4.2 查看log

    4.3 查看docker容器

    4.4 测试app

    五、反思改进

    目前数据库连接的为云服务器搭建的数据库,后期数据库也利用docker,多组采用docker-compose统一部署管理

    后期可以利用利用公有云k8s集群进行方便测试

    目前docker容器产生的日志在docker宿主机上,后期可以将其存储在cos上,再投递到elk集群日志可视化处理

    将镜像统一管理制作本地镜像仓库

    gitlab添加code review并结合自动测试

    展开全文

空空如也

空空如也

1 2 3
收藏数 60
精华内容 24
关键字:

日常应用互联网的实例