背景
由于经常有部署新服务器的需求,服务器部署过程中的配置和基础环境的安装很多都是重复性的 工作,所以使用配置管理工具将这些重复性的工作控制起来最合适不过了,之前有写过一篇用 SaltStack 做自动化运维的文章 saltstack 使用笔记,这次换用 Ansible ,顺便比较一下两种工具。
如何开始
目录结构
. --hosts # 服务器地址和组,以下的是配置 ├── config │ ├── kernel │ ├── tmux │ └── vim ├── deploy │ └── project1 │ └── project2 ├── docker │ └── fig_config │ ├── common │ ├── mongo │ ├── mysql │ ├── nginx │ ├── rabbitmq │ └── redis ├── env ├── iptables ├── nginx └── ssh
首先配置好 hosts 文件, 格式:
; ansible hosts file user .ini format ; group ; [test] ; ip address ; service ip address ; 127.0.0.1
将上面的注释去掉,IP 地址改成服务器地址,并且在服务器上加上本地的 ssh 公钥,执行下面命令:
# 导入环境变量 export ANSIBLE_HOSTS=/hosts_file_direcory/hosts # 测试服务器连通 ansible all -m ping # 如果没有问题服务器应该会返回 pong
配置文件格式
连接服务器没有问题的话,就可以使用写 playbook(配置管理文件)来管理服务器了。
Ansible 的配置文件使用的 YAML 格式,例子如下:
# -------- basic env: init-env.yml ------------- # install basic env tool task - name: install pkg apt: pkg= state=present update_cache=yes with_items: - gcc - g++ - curl - tmux - python-dev - python-setuptools - python-pip - htop - zsh - software-properties-common - python-software-properties - libpq-dev - build-essential - libmysqlclient-dev - libevent-dev - git - wget - mc # install python lib task - name: install python pkg pip: name= with_items: - fabric - virtualenvwrapper - ipython - ipdb - supervisor - fig # add user task - name: add deploy user user: name=deploy shell=/bin/zsh append=yes # ----- web basic env: web_env.yml ------- --- - hosts: your_web_hosts remote_user: root tasks: - include: init-env.yml - name: init web dir file: path=/data owner=root group=root state=directory mode=0755
运行
# 对服务器执行初始化命令 ansible-playbook init_env.yml
常用命令
# 对所用服务器 web_hosts 执行初始化命令 ansible-playbook web_env.yml # 指定服务器 ansible-playbook web_env.yml --limit web_hosts # 调试(Dry Run) ansible-playbook web_env.yml --check
整理出来的开源库参考
总结
Ansible 对于我来说最大的有点就是使用 ssh 来执行命令,而 SaltStack 则需要在机器上安装客户端 其次 Ansible 由于设计的时候就考虑了监控和图形化,可视化做的不错,如果大家在考虑选择 Ansible 还是 SaltStack,个人推荐使用 Ansible