本工程演示我们通过Ansible脚本来自动化部署和配置一个分布式软件服务.
在开发环境中我们通过build和deploy两个工程来拆分软件包的编译打包和部署启动.
├── InitializeHosts: 目标服务器初始化脚本
├── README.md
├── dockerBuild: 软件包构建工具
├── dockerDeploy: 软件包部署脚本
└── test: 用Vagrant模拟一个测试服务器集群,用于演示部署过程
- 通过Dockerfile编译镜像
- 启动下载服务器供deploy工程进行镜像下载
- 使用人员: 研发人员
- 使用场景: 业务模块需要做版本迭代,仅发布新版本时使用,非现场实施部署工作,非交付物
- 编译环境: Vagrant虚机
- 初始化目标主机环境:网络互通,ssh权限,docker环境,主控机初始化
- 使用人员: 部署实施人员
- 使用场景: 现场实施的第一步,将所有目标节点主机统一环境
- 载入build工程所编译的镜像文件
- 基础服务、上传下载服务、云信服务的配置及部署
- 测试时使用的临时资源,如特定环境的ssh登陆key
- dockerBuild节点主要起到镜像编译打包和下载服务器的作用
- deploy工程中各个节点依赖于docker,使用deb包进行安装,开发环境中该deb包由build工程的下载服务提供
- deploy工程依赖于build工程所产生的docker镜像文件,开发环境中镜像编译后会放置到build工程的下载服务目录
- build和deploy工程均基于ansible和vagrant
- vagrant为便于开发和测试引入,在生产环境只需要依赖ansible,vagrant的debian8镜像文件可联系开发人员获取
- ansible由工程内脚本自动安装在控制节点上,控制节点可以是独立于客户私有环境的机器(比如负责安装交付的工程师笔记本电脑,有外网),依赖apt-get和pip等工具
virtualbox为vagrant提供虚拟机支持
- vagrant
- virtualbox
- vagrant
- virtualbox
- 由于日常开发以功能模块来划分,故约定根据模块建立分支进行开发
- 当模块分支开发完成后,合并到dev分支供QA进行测试
- QA测试过程中发现的问题,小的修复可直接提交到dev分支,较大改动在模块分支进行修复后重新合并到dev分支
所有交付物都包含在下载服务目录中,目录结构及说明如下
- nim_dep_ansible.tar.gz:dockerDeploy工程的压缩包
- images/:包含dockerBuild工程产生的镜像文件
- deb/:包含部署环境中初始化所依赖的软件包,如docker等
以Vagrant环境为例进行说明
打包构建和下载服务器:
host:nim-build-01 ip: 192.168.200.10 (不同环境该地址可以自定义,可适应不同的内部网络环境要求
部署工具机:
host:nim-initializer-01 ip: 192.168.200.110
目标服务器:
host: nim-node-{01~03} ip: 192.168.200.{11~13}
A) 在打包构建机上
1. 构建修改之后的RabbitMQ软件Docker镜像
2. 构建机上构建部署脚本
3. 构建机上配置和启动下载服务器
B) 准备部署环境目标服务器
1. 进入test目录,将预设的vagrant测试服务器启动
cd test && vagrant up
C) 在部署工具机上
1. 下载部署脚本
wget http://10.200.200.10/nim_dep_ansible.tar.gz
2. 修改部署脚本中的hosts等,并配置目标服务器的登陆信息
3. 执行部署脚本
ansible-playbook