V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
firejoke
V2EX  ›  程序员

请教如何设计更合理

  •  
  •   firejoke · 2019-08-29 10:31:34 +08:00 · 2090 次点击
    这是一个创建于 1912 天前的主题,其中的信息可能已经有所发展或是发生改变。

    基于 django 做了一个部署公司产品的工具,
    功能:

    • 可以根据页面选填的参数自动部署公司的产品
    • 可以修改网络接口的配置, 更改网卡的状态(包括远程主机的)
    • 可以修改服务状态
    • 可以修改允许修改的配置文档(允许修改的配置文档通过工具的配置文档来修改, 工具的配置文档也可以通过页面修改)
    • 可以查看部署日志以及服务日志

    部署产品的原理大致是:

    将公司的产品和各种依赖包(rpm 包和 python 包)以及我的部署脚本打包成 tar.gz 文档, 然后上传到远程服务器上解压, 再加上参数运行部署脚本, 本地服务器也采用使用 ip 地址传送的方式, 一是部署里面很多地方都需要 ip 参数, 二是可以校验部署产品的人员确实知道当前服务器的登陆信息(本来之前是分成了远程和本地两套逻辑, 后来改用了现在的方式)

    因为 rpm 依赖包占了整个压缩包的 80%以上, 上传部署包非常耗时, 而且之前测试的时候, 遇到过各种依赖包的坑,
    现在打算做一个定制化 iso 系统镜像, 将我的工具和我们的产品在装系统的时候就装进去,
    我的工具的安装不需要任何参数, 可以在装系统的时候就装好,
    但是产品的安装是需要传很多参数的, 所以不可能在装系统的时候装好, 只能先把依赖装好
    目前我想的是两个方案:

    • 我的工具做成 rpm 包, 在装系统的时候, 写到 xml 文件里, 随依赖包一起安装
    • 产品的文件通过我的工具的 rpm 包的 spec 文件, 预先放到应该在位置,
    • 重写一个新的部署脚本, 只是修改相应的赋权, 同步数据库, 修改配置文档, 重启各个服务

    • 我的工具做成 rpm 包, 在装系统的时候, 写到 xml 文件里, 随依赖包一起安装
    • 产品的所有文件还是会被打包成 tar.gz 文档, 但不包含依赖包,
    • 给我部署脚本加一个参数, 根据这个参数决定是否走安装 rpm 依赖的步骤

    方案 1 的缺点是工具几乎只能在这种定制的系统内部署产品, 不论是本地还是远程的
    方案 2 则是只要目标主机装了相应的依赖包就可以,
    私以为两个方案都不太理想, 想请教一下有没有更合理的设计?

    第 1 条附言  ·  2019-08-29 11:48:13 +08:00
    跟组长商量后, 采用方案一, 然后定制镜像的版本和通用的版本都要维护
    18 条回复    2019-09-02 22:50:57 +08:00
    lihongjie0209
        1
    lihongjie0209  
       2019-08-29 10:42:19 +08:00
    rpm 依赖的问题可以直接在远程服务器上建立一个 yum localrepo
    firejoke
        2
    firejoke  
    OP
       2019-08-29 10:47:35 +08:00
    @lihongjie0209 #1 我知道啊, 那这个本地源从哪来? 还是要我远程推送吗? 我们的要求是要做到傻瓜式部署
    lihongjie0209
        3
    lihongjie0209  
       2019-08-29 10:50:27 +08:00
    @firejoke #2
    如果没有外网, 你需要本地上传
    如果有外网, 你可以使用私有仓库

    不管怎么说,rpm 包安装在 yum 下没什么坑
    firejoke
        4
    firejoke  
    OP
       2019-08-29 10:52:43 +08:00
    @lihongjie0209 #3 现在不是 rpm 包的坑, 而是想缩小部署包的体积, 以及不要让部署人员去命令行输命令, 所以想做定制化的系统
    kkbblzq
        5
    kkbblzq  
       2019-08-29 11:13:32 +08:00
    为什么不用容器呢
    firejoke
        6
    firejoke  
    OP
       2019-08-29 11:17:55 +08:00
    @kkbblzq #5 容器? 可以解决哪方面的问题?
    lihongjie0209
        7
    lihongjie0209  
       2019-08-29 11:27:52 +08:00
    @firejoke #4 那你可以考虑 ansible 之类的系统配置工具, 写好配置一键搞定
    firejoke
        8
    firejoke  
    OP
       2019-08-29 11:46:51 +08:00
    @lihongjie0209 #7 ansible 要做无密码登陆, 有考虑过之后用这个, 增加个界面,
    aa543187001
        9
    aa543187001  
       2019-08-29 11:49:00 +08:00
    容器就可以相当于你那个镜像的原理, 容器在启动的时候也可以选择很多参数化
    kkbblzq
        10
    kkbblzq  
       2019-08-29 11:55:46 +08:00
    @firejoke 容器的好处在于一次打包,就可以任意的部署,统一了目标程序的运行环境,把复杂的环境配置转换成单一的 docker 运行环境的配置,比如说你可以把所有基础环境的打包成一个基础镜像,然后基于这基础镜像来配置打包成产品镜像。然后部署主机只要配置好 docker 环境就可以跑你们的产品。
    firejoke
        11
    firejoke  
    OP
       2019-08-29 17:50:42 +08:00
    @aa543187001 #9
    @kkbblzq #10
    emmmm, 查了下 docker 和我们的产品中使用到的框架, 有相应的使用 docker 部署的方案, 但貌似连我们的服务都要做相应的修改, 不是个小工程, 以后给组长提一下吧, 目前就按现在的方案来, 后期再上 ansible
    dany813
        12
    dany813  
       2019-08-29 20:06:35 +08:00
    好巧啊,刚做了一个类似的工具,也是部署公司产品的
    我这边也是制作了一个 ISO 镜像,然后刻录到光盘里面,客户拿到光盘后,一键恢复,里面包含了公司的软件服务,在镜像里面包含了一个运维的系统,设置的开机自启动,只要系统恢复后,就通过 IP 加固定端口打开,然后后续有软件要更新的话,直接扔给客户一个更新包,客户自己上传,然后启动。
    dany813
        13
    dany813  
       2019-08-29 20:07:19 +08:00
    我们没法用 docker,因为都是内网部署的。。要是可以用 docker 就方便了
    renothing
        14
    renothing  
       2019-08-30 08:24:05 +08:00
    @dany813 内网部署也能用 docker 啊。docker 镜像又不是不可以导入导出。
    maichael
        15
    maichael  
       2019-08-30 09:21:48 +08:00
    @dany813 #13 内网也可以的,既可以用自建 registry,也可以直接导入导出。
    firejoke
        16
    firejoke  
    OP
       2019-08-30 14:39:54 +08:00
    @dany813 #12 你们的产品不需要配置参数什么的吗?
    firejoke
        17
    firejoke  
    OP
       2019-09-02 17:40:11 +08:00
    @dany813 #12 对了, 你们产品升级怎么做的? 总不会重装一次吧
    dany813
        18
    dany813  
       2019-09-02 22:50:57 +08:00
    @firejoke 产品升级 给他升级后的包,直接上传升级,配合参数都是在配置文件里面写好的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2756 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:02 · PVG 20:02 · LAX 04:02 · JFK 07:02
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.