基于 django 做了一个部署公司产品的工具,
功能:
- 可以根据页面选填的参数自动部署公司的产品
- 可以修改网络接口的配置, 更改网卡的状态(包括远程主机的)
- 可以修改服务状态
- 可以修改允许修改的配置文档(允许修改的配置文档通过工具的配置文档来修改, 工具的配置文档也可以通过页面修改)
- 可以查看部署日志以及服务日志
部署产品的原理大致是:
将公司的产品和各种依赖包(rpm 包和 python 包)以及我的部署脚本打包成 tar.gz 文档, 然后上传到远程服务器上解压, 再加上参数运行部署脚本, 本地服务器也采用使用 ip 地址传送的方式, 一是部署里面很多地方都需要 ip 参数, 二是可以校验部署产品的人员确实知道当前服务器的登陆信息(本来之前是分成了远程和本地两套逻辑, 后来改用了现在的方式)
因为 rpm 依赖包占了整个压缩包的 80%以上, 上传部署包非常耗时, 而且之前测试的时候, 遇到过各种依赖包的坑,
现在打算做一个定制化 iso 系统镜像, 将我的工具和我们的产品在装系统的时候就装进去,
我的工具的安装不需要任何参数, 可以在装系统的时候就装好,
但是产品的安装是需要传很多参数的, 所以不可能在装系统的时候装好, 只能先把依赖装好
目前我想的是两个方案:
一
- 我的工具做成 rpm 包, 在装系统的时候, 写到 xml 文件里, 随依赖包一起安装
- 产品的文件通过我的工具的 rpm 包的 spec 文件, 预先放到应该在位置,
- 重写一个新的部署脚本, 只是修改相应的赋权, 同步数据库, 修改配置文档, 重启各个服务
二
- 我的工具做成 rpm 包, 在装系统的时候, 写到 xml 文件里, 随依赖包一起安装
- 产品的所有文件还是会被打包成 tar.gz 文档, 但不包含依赖包,
- 给我部署脚本加一个参数, 根据这个参数决定是否走安装 rpm 依赖的步骤
方案 1 的缺点是工具几乎只能在这种定制的系统内部署产品, 不论是本地还是远程的
方案 2 则是只要目标主机装了相应的依赖包就可以,
私以为两个方案都不太理想, 想请教一下有没有更合理的设计?