相比于快速的临时的指令,在对远程设备应用部署,环境配置和管理过程中,我们需要执行的是一系列的指令,我们将这些指令编写在一个.yml文件中,这就是一个playbook,使用
ansible-playbook test.yml –extra-var=”@test.json”
或者
ansible-playbook test.yml –extra-var=”group=azurehost”
就可以批量执行剧本中的任务,通过–extra-var传入json或赋值变量作为参数.
所以,如果说ansible是一个以模块,Inventory,API和插件为基础工具或者引擎,那么使用Ansible实践的解决方案的核心就是playbooks.
四.基础实践
目标:在多台linux服务器部署并管理一个NodeJS应用
设备:一台安装Ansible的CentOS虚拟机,两台CentOS虚拟机,一台Azure云虚拟机
4.1 解决方案1:直接在要部署的机器上进行操作
步骤:
(1) 基本环境安装和设置
1.全局安装node,NPM
2.打开防火墙目标端口,重启防火墙
3.安装node 进程管理工具(PM2)
(2)部署应用
1.检查应用部署路径
2.二次部署先,检查应用运行状况
3.从代码托管服务器下载代码,copy到目标路径
4.根据package.json安装dependencies
5.使用pm2启动应用
(3)管理和维护
有小的更新时,单独上传代码并重启应用,通过pm2查看应用状态
用xshell登录在多台主机,分别执行以上步骤对应的指令
4.2 解决方案2:使用ansible中心机器对两组主机进行环境安装和部署
4.2.1 解决方案架构
图 2
我们将包含批量指令或模块调用的playbooks.yml和运行参数playbooks.json托管在gitlab; 将要部署的代码也放在gitlab;
Ansible机器的用户使用ansible-playbook执行playbooks完成相应对远程主机的安装,部署,和应用启动等操作
步骤:
1.配置inventory
sudo vi /etc/ansible/hosts
[azureservers]
azurehost0 ansible_ssh_host=*.*.*.*
# azurehost1 ansible_ssh_host=*.*.*.*
[localhosts]
localhost1 ansible_ssh_host=192.168.153.129
localhost2 ansible_ssh_host=192.168.153.132
2.创建source文件夹用于克隆gitlab repo,playbooks, vars.json到本地
3.编写服务运行环境基本要求,和应用信息(部署目录,应用名称等)的参数
4.编写playbooks,包含配置和部署目标主机的任务列表
4.2.2扩展
1. 编写Python plugin从cmdb 动态获取有效的主机列表到ansible机器的inventory
2. 使用playbook_executer API的方式调用执行playbooks
3. 使用Pyphon编写web API,调用playbook_executer方法,实现可视化的剧本执行
4.2.3playbooks
1.配置远程主机node/express/pm2运行环境
运行playbook 完成环境配置:
$ ansible-playbook sys_ensure.yml --extra-var="@vars.json"
vars.json
{ "host_group":"all", "app_port":8000, "node_download_url":"http://cdn.npm.taobao.org/dist/node/v8.0.0/node-v8.0.0-linux-x64.tar.xz", "node_package_name":"node-v8.0.0-linux-x64.tar.xz", "download_node_folder_name":"node-v8.0.0-linux-x64", "target_node_folder_name":"nodejs", "node_install_path":"/usr/local/", "usr_local_bin_path":"/usr/local/bin", "installed_node_cmd_path":"/usr/local/nodejs/bin/node", "installed_npm_cmd_path":"/usr/local/nodejs/bin/npm", "pm_tool":"pm2", "node_bin_path":"/usr/local/nodejs/bin" }