Ansible 使用总结
Ansible默认通过 SSH 协议管理机器.
安装Ansible之后,不需要启动或运行一个后台进程,或是添加一个数据库.只要在一台电脑(可以是一台笔记本)上安装好,就可以通过这台电脑管理一组远程的机器.在远程被管理的机器上,不需要安装运行任何软件,因此升级Ansible版本不会有太多问题.
管理主机
托管节点
管理主机使用 ssh 协议与托管节点通信,默认使用 sftp, 可在
ansible.cfg
文件中配置成scp
方式。托管节点需要安装Python
。
ansible 配置文件
查找ansible.cfg文件的顺序
ANSIBLE_CONFIG
环境变量所指定的文件- ./ansible.cfg
- ~/.ansible.cfg
- /etc/ansible/ansible.cfg
配置举例:
1 | #指定inventory文件位置 |
inventory 配置文件
用于配置托管节点的主机信息。
1 | [test] |
1 | ansible myhost --sudo -m raw -a "yum install -y python2 python-simplejson" |
对 test
组中所有托管节点执行以下命令
1 | ansible test -m shell -a "pwd" |
ansible
Ansibe AD-Hoc 临时命令执行工具,常用于临时命令的执行
ansible-doc
ansible-doc
命令常用于获取模块信息及其使用帮助。
1 | #获取全部模块的信息 |
ansible-playbook
Ansible 定制自动化的任务集编排工具。
ansible-galaxy
Galaxy 是一个查找和分享 ansible
内容的中心。ansible-galaxy
可以通过这个平台,下载共享者的 roles
。
ansible-vault
Ansible 文件加密工具
ansible-console
Ansible基于Linux Consoble界面可与用户交互的命令执行工具
playbook
playbook是ansible实现批量自动化最重要的手段,采用yaml语法。
从 Create Directory by root
任务开始执行。
1 | ansible-playbook demo.yml --start-at-task="Create Directory by root" |
roles
role是task文件、变量文件、handlers文件的集合体,这个集合体的显著特点是:可移植性和可重复执行性。
实践中,通常我们以部署某个服务为单元作为一个role ,然后将这些服务单元(role)放在一个roles目录下。主playbook文件通过调用roles目录下的role,来实现各种灵活多变的部署需求。
使用 ansible-galaxy
创建一个 php
服务实例:
1 | ansible-galaxy init php |
使用 ansible-galaxy
命令自动创建的role是最全的目录结构,根据需求,可以删除不用的目录文件。
- tasks目录:存放task列表。若role要生效,此目录必须要有一个主task文件main.yml,在main.yml中可以使用include包含同目录(即tasks)中的其他文件。
- handlers目录:存放handlers的目录,若要生效,则文件必须名为main.yml文件。
- files目录:在task中执行copy或script模块时,如果使用的是相对路径,则会到此目录中寻找对应的文件。
- templates目录:在task中执行template模块时,如果使用的是相对路径,则会到此目录中寻找对应的模块文件。
- vars目录:定义专属于该role的变量,如果要有var文件,则必须为main.yml文件。
- defaults目录:定义角色默认变量,角色默认变量的优先级最低,会被任意其他层次的同名变量覆盖。如果要有var文件,则必须为main.yml文件。
- meta目录:用于定义角色依赖,如果要有角色依赖关系,则文件必须为main.yml。
参考:
- https://www.cnblogs.com/f-ck-need-u/p/7567417.html
托管节点 python
环境安装
1 | ansible -m raw -a "dnf install -y python3" virtualbox |
查看内置的 Facts
变量
1 | ansible -m setup virtualbox |
无界面模式启动虚拟机
1 | VBoxManage startvm --type headless centos-8.1.1911 |
项目构建
1 | mkdir product |
目录结构如下
1 | tree ./product -L 3 |
对托管节点进行部署
1 | ansible-playbook ./product/php.yml |
什么是 EPEL
1 | yum install -y epel-release |
首先需要安装一个叫”epel-release”的软件包,这个软件包会自动配置yum的软件仓库。当然你也可以不安装这个包,自己配置软件仓库也是一样的。
1 | # 安装 epel |
使用 阿里云
epel 源
1 | yum install -y wget |
1 | yum install -y php-pear php-devel |
php 7.4.9
默认编译安装后,没有 pecl
命令。
php-config
得到扩展安装目录
1 | /data/php/bin/php-config --extension-dir |
vi /data/php/etc/php.ini
1 | extension_dir="/data/php/lib/php/extensions/no-debug-non-zts-20190902" |
ansible 使用参考
- https://www.cnblogs.com/gongjingyun123--/p/11600316.html
- https://www.cnblogs.com/f-ck-need-u/p/7567417.html
- https://www.cnblogs.com/mauricewei/p/10056494.html ansible 基础优化
- https://www.cnblogs.com/mauricewei/p/10056458.html roles
- https://juejin.im/post/6844903631066513421
- https://www.cnblogs.com/kevingrace/p/11647338.html
- https://www.cnblogs.com/aaaaaaa/p/10757843.html
- https://alex0227.github.io/2018/08/20/Ansible%E7%9A%84%E5%AE%89%E8%A3%85%E5%92%8C%E5%85%A8%E9%9D%A2%E4%BB%8B%E7%BB%8D/
ImageImgick 安装
1 | djvulibre-devel |
托管节点
1 | yum install -y python2 |
确认 php
扩展是否成功安装
1 | /data/php/bin/php -m | grep "mcrypt\|yaf\|redis\|imagick\|swoole\|inotify" |
从托管节点上下载文件至主机
1 | scp -P 2222 root@127.0.0.1:"/tmp/*.tgz" ./ |
jinja2
模板文件中若存在特殊字符: ;
、 #
,需提前进行处理:
1 | sed -i "" 's/^;/{% raw %};/g; s/^{% raw %};.*[^{% endraw %}]$/&{% endraw %}/g' test.conf.j2 |
新增功能项
- [可关闭] 建立
php
脚本软连接:ln -s /data/php/bin/php /usr/bin/php
- [可关闭] 建立
nginx
脚本软连接:ln -s /data/nginx/sbin/nginx /usr/bin/nginx
待完成事项
- 包源码目录、包压缩文件删除。
- 增加 handlers,notify 服务启动、重启功能。
- 整理项目代码:删除无用文件及代码,简洁项目。
- 禁用
gather_facts
,查找获取 ip 的其他方法。 - 虚拟机环境配置,base 操作系统镜像 ip 配置。
- 角色变量整理。
SELinux 命令
查看 SELinux 状态
1
2
3
4/usr/sbin/sestatus -v
# or
getenforce关闭SELinux
1
2
3
4
5
6
7# 临时关闭
$ setenforce 0
# 永久关闭
$ /etc/selinux/config
# 将SELINUX=enforcing改为SELINUX=disabled
$ reboot
jinja2
模板处理参考
- https://www.yfshare.vip/2017/03/15/Ansible-Playbooks%E4%B9%8B%E5%AE%89%E8%A3%85PHP/
- https://zhuanlan.zhihu.com/p/92823485
Mac
1 | brew create https://sourceforge.net/projects/sshpass/files/sshpass/1.05/sshpass-1.05.tar.gz --force |
mysql.service
1 | [Unit] |
nginx.service
1 | [Unit] |
1 | sed -i 's/post_max_size =.*/post_max_size = 50M/g' {{ PHP_INSTALL_PATH }}/etc/php.ini |
php-fpm.conf
1 | [global] |
1 | 47.104.111.157 ansible_connection=ssh ansible_ssh_user=root ansible_ssh_pass=ZJroot123 ansible_ssh_extra_args='-o StrictHostKeyChecking=no' |
2019-11-23 学习 ansible 总结记录
使用 ping 模块测试连接情况
ansible -i ./hosts webservices -m ping
ansible host|all -m 模块 -a “模块参数” -f 一次连接多少个主机
查看涉及的所有主机信息
ansible-playbook ./site.yml -i ./hosts –list-hosts
当第一次连接远程主机,跳过yes/no环节
inventory:
Add the following.
ansible_ssh_common_args=’-o StrictHostKeyChecking=no’
host:
Add the following.
ansible_ssh_extra_args=’-o StrictHostKeyChecking=no’
全局处理:
1. /etc/ansible/ansible.cfg host_key_checking = False
2. ansible-playbook -e ‘host_key_checking=False’ yourplaybook.yml
3. export ANSIBLE_HOST_KEY_CHECKING=False
参考:
帮助类相关命令
查看当前支持的所有模块
ansible-doc -l
查看当前指定模块使用方法
ansible-doc -s 模块名
ansible-playbook 使用:
列出运行任务的主机
ansible-playbook ./site.yml -i ./hosts –list-hosts
列出要运行的任务列表
ansible-playbook ./site.yml -i ./hosts –list-tasks
列出所有可用标签
ansible-playbook ./site.yml -i ./hosts –list-tags
仅执行 download-nginx tag.
ansible-playbook ./site.yml -i ./hosts –tags=”download-nginx”
跳过指定标签任务
ansible-playbook ./site.yml -i ./hosts –skip-tags=make-nginx
检测语法
ansible-playbook ./site.yml -i ./hosts –syntax-check
sed 命令参考
2021-07-14 日志
通过 ansible shell 模块下载最新 nginx 包文件 – 未实现。
1 | # tasks file for nginx |