1 ansible 常用指令总结,并附有相关示例。
Command 模块:
功能:在远程主机上执行命令,此为默认模块,可忽略-m 选项
注意:此命令不支持$VARNME<> | ;&等,可能用shell模型实现
注意:此模块不具备幂等性
常见选项:
chdir=dir # 执行命令前,先切换至目录dir
creates=file # 当file不存在时不会执行
removes=file # 当file存在时才会执行
ansible 10.0.0.21 -m command -a 'touch a.txt chdir=/opt creates=/tmp/abc'
shell 模块:
功能:在远程主机上执行命令,此为默认模块,可忽略-m 选项
注意:属于command的增强版,支持管道符
注意:此模块不具备幂等性(可能出现错误)建议能不用就不用,最好使用专有模块
常见选项:
chdir=dir # 执行命令前,先切换至目录dir
creates=file # 当file不存在时不会执行
removes=file # 当file存在时才会执行
ansible 10.0.0.21 -m shell -a 'echo 123 > /opt/a.txt'
修改默认模块的设置:
vim /etc/ansible/ansible.cfg
#module_name = command
module_name = shell
这样默认模块就是shell了,比command模块功能多一些
再去操作的时候这样写:ansible 10.0.0.21 -a 'touch /opt/b.txt'
Script(剧本,脚本)
功能:在远程主机上运行ansible服务器上的脚本(无需执行权限)
注意:此模块不具有幂等性
chdir=dir # 执行命令前,先切换至目录dir
cmd #指定ansible主机的命令
creates=file # 当file不存在时不会执行
removes=file # 当file存在时才会执行
ansible webserver -m script -a /data/test.sh
命令 组名 运行脚本模块 脚本
Copy模块
功能:复制ansible服务器主控端或远程的本机的文件到远程主机
注意:src=file 如果没有指明路径,则为当前目录或当前目录下的files目录下的file文件
常见选项:
Src #控制端源文件路径
Dest #被控制端文件路径
Owner #属主
Group #属组
Mode #权限
Backup #是否备份
Validate #验证成功才会执行copy
Remote_src #no是默认值,表示src文件在ansible主机,yes表示src文件在远程主机
ansible one -m copy -a 'src=/etc/issue dest=/opt/issue.bak mode=600 owner=root group=bin'
在同一命令的情况下ansible因为幂等性的原因,重复的命令不会覆盖,如果是属性变更的话将会覆盖(在完全一致的情况下才会具有幂等性)
Get_url模块
功能:用于将文件从http、https或ftp下载到被管理机节点上(专门拷贝第三方文件)
常用功能如下:
url #下载文件的URL,支持HTTP、HTTPS或FTP协议
dest #下载到目录路径(绝对路径),如果目标是一个目录,就用源文件名,如果设置了名称就用目标设置的名称
owner #指定属主
group #指定属组
mode #指定权限
force #如果yes、dest不是目录,将每次下载文件,如果内容改变替换文件,如果no,则只有在目标不存在时才会下载
checksum #对目标文件在下载后计算摘要,以确保其完整性
url_username #用于HTTP基本认证的用户名,对于允许密码的站点,此参数可以不适用‘url_password’
url_password #用于HTTP基本认证的密啊,如果‘url_usrname’参数,则不会使用‘url_passweord’参数
validate_certs #如果‘no’,ssl证书将不会被验证,适用于自签名证书在私有的网站上使用
timeout #URL请求的超时时间,秒为单位
ansible two -m get_url -a 'url=http://nginx.org/download/nginx-1.18.0.tar.gz dest=/opt checksum="md5:b2d33d24d89b8b1f87ff5d251aa27eb8"'
Fetch(取来)模块
功能:从远程主机提取文件至ansible主控端,copy相反,目前不支持目录
常见选项:
Src #被控端的源文件路径,只支持文件
Dest #ansible控制端的目录路径
ansible 10.0.0.7 -m fetch -a 'src=/opt/nginx-1.18.0.tar.gz dest=/opt'
远程机器 抓取 远程机器的文件 抓取到本机的位置
Flie 模块
功能:设置文件属性,创建文件,目录和软链接等
常见选项:
Path #在被控端创建的路径
Owner #属主
Group #属组
Mode #权限
State #状态
=touch #创建文件
=directory #创建目录
=link #软连接
=hard #硬链接
Recurse #yes表示递归授权
ansible all -m file -a 'path=/tmp/ state=directory'
path目标文件路径 创建目录
stat模块
功能:检查文件或文件系统状态
注意:对于windows目标,请改用win_stat模块
常见选项:
Path #文件/对象的完整路径(必须)
ansible 127.0.0.1 -m stat -a 'path=/etc/passwd'
unarchive模块
功能:解包解压缩
实现有两种用法:
将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置remote_src=no,此为默认值,可省略
将远程本主机上或非ansible的其他主机的某个压缩包解压缩到远程主机的指定路径下,需要设置remote_src=yes
常见参数:
remote_src #和copy功能一样且选项互斥,yes表示源文件在远程被控制主机或其他非ansible的其他主机上,no表示文件在ansible主机上,默认值为no,此选项代替copy选项
Copy #默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no会在远程主机上寻找src源文件,此选项已废弃
Src #源路径,可以是ansible主机上的路径,也可以是远程主机(被管理端或者第三方主机)上的路径,如果是远程主机上的路径,则需要设置remote_src=yes
Dest #远程主机上的目标路径
Mode #设置解压缩后的文件权限
Create=/path/file #当绝对路径/path/file不存在时才会执行
ansible all -m unarchive -a 'src=http://nginx.org/download/nginx-1.22.1.tar.gz dest=/tmp remote_src=yes owner=root group=root'
Archive模块
功能:打包压缩保存在被管理节点
常见选项:
Path #压缩的文件或目录
Dest #压缩后的文件
Format #压缩格式,支持gz.bz2 ,xz,tar,zip
ansible one -m archive -a ‘path=/var/log/ dest=/data/log.tar.bz2 format=bz2 owner=wang mode=0600’
hostname模块
管理主机名:
Name #修改后的主机名称
ansible 10.0.0.21 -m hostname -a 'name=web-two'
cron 模块
功能:计划任务
支持时间:minute,hour,day,month,weekday
常见选项:
Name #描述脚本的作用
Minute #分钟
Hour #小时
Weekday #周
User #任务由那个用户运行,默认root
Job #任务
创建计划任务:
ansible 10.0.0.21 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh'
每周的1-5天的晚上2点30开始执行备份脚本
禁用计划任务:
nsible 10.0.0.21 -m cron -a 'hour=2 minute=30 weekday=1-5 name="backup mysql" job=/root/mysql_backup.sh disabled=yes'
yum模块和apt模块
功能:管理软件包
Yum管理软件包,只支持RHEL,CenOS,fedora,不支持ubunut其他版本
Apt模块管理debian相关版本的软件包
Yum常见选项
Name #软件包名称
State #状态
=present #安装,此为默认值 (泼森特)
=absent #删除 (啊泼森特)
=latest #最新版
List #列出指定包
Enablerepo #启用那个仓库安装
Disablerepo #不适用那个仓库的包
Exclude #排除指定的包
Validete #是否检验,默认为yes
ansible 10.0.0.21 -m yum -a 'name=nginx state=present'
ansible 10.0.0.10 -m apt -a 'name=nginx state=present'
卸载:
ansible 10.0.0.10 -m apt -a 'name=nginx state=absent'
yum_repository模块
功能:此模块实现yum的仓库配置管理
常见选项:
name #仓库id
description #仓库描述名称,对应配置文件的name=
baseurl #仓库的地址
gpgcheck #验证开启
gpgkey #仓库公钥路径
ansible one -m yum -a 'name=https://mirrors.tuna.tsinghua.edu.cn/zabbix/zabbix/5.0/rhel/8/x86_64/zabbi x-agent2-5.0.24-1.el8.x86_64.rpm state=present validate_certs=no'
ansible 10.0.0.21 -m yum -a ‘name=zabbix-agent2’
service模块
此模块和systemd功能相似,选项很多相同
功能:管理服务
常见选项:
Name #服务名称
State #服务状态
=Stated #启动
=stopped #停止
=restarted #重启
=reloaded #重载
Enabled #开启自启动
Daemon_reload #加载新的配置文件,适用于systemd模块
ansible 10.0.0.22 -m service -a 'name=nginx state=started'
设置开机启动:
ansible 10.0.0.22 -m service -a 'name=nginx state=started enabled=yes'
User模块
功能:管理用户
常见选项:
name #创建的名称
uid #指定uid
group #指定基本组
shell #登录shell类型默认/bin/bash
create_home #是否创建家目录
password #设定对应的密码,必须是加密后的字符串才行,否则不生效 system #yes表示系统用户
groups #附加组
append #追加附加组使用,yes表示增加新的附加组
state #absen删除
remove #yes表示删除用户时将家目录一起删除
generate_ssh_key #创建私钥
ssh_keyu_bits #私钥位数
ssh_key_file #私钥文件路径
ansible all -m user -a 'name=user1 comment="test user" uid=2048 home=/app/user1 group=root'
group模块
功能:管理组
常见选项:
name #指定组名称
gid #指定gid state
=present #创建,默认
=absent #删除
ansible websrvs -m group -a 'name=nginx gid=88 system=yes'
Lineinfile模块
ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时, 会存在问题,无法正常进行替换
ansible自身提供了两个模块:lineinfile模块和replace模块,可以方便的进行替换 一般在ansible当中去修改某个文件的单行进行替换的时候需要使用lineinfile模块 功能:相当于sed,主要用于修改一行的文件内容
常见选项
path #被控端文件的路径
regexp #正则匹配语法格式,表示被替换的内容
line #替换为的内容
state #absent表示删除
insertafter #插入到替换内容前面,如和regexp同时存在,只在没找到与regexp匹配时才使用
insertafter insertbefore #插入到替换内容后面,如和regexp同时存在,只在没找到与regexp匹配时才使用
insertafter backrefs #支持后面引用,yes和no
backup #修改前先备份
create #如果文件不存在,则创建,默认不存在会出错
mode #指定权限
owner #指定用户
group #指定组
#注意
regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只有最后面被 匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些行都会被删除。
ansible websrvs -m lineinfile -a "path=/etc/httpd/conf/httpd.conf regexp='^Listen' line='Listen 8080'"
replace模块
该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用 (多行替换)
功能: 多行修改替换
常见选项:
path #被控端文件的路径
regexp #正则匹配语法格式,表示被替换的内容
replace #替换为的内容
after #插入到替换内容前面
before #插入到替换内容后面
backup #修改前先备份
mode #指定权限
owner #指定用户
group #指定组
ansible all -m replace -a "path=/etc/fstab regexp='^(UUID.*)' replace='#\1'"
mount模块
功能:挂载和卸载文件系统
常见选项:
Sec #源设备路径,或网络地址
Path #挂载至本地那个路径下
Fstype #设备类型,nfs
Opts #挂载选项
State #挂载还是卸载
=present #永久挂载,但没有立即生效
=absent #卸载临时挂载,并删除永久挂载
=mounted #临时挂载
=unmounted #临时卸载
Setup模块
功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用,但是如果主机 较多,会影响执行速度
可以使用 gather_facts: no 来禁止 Ansible 收集 facts 信息
常见选项
filter #指定过滤条件
ansible all -m setup ansible all -m setup -a "filter=ansible_nodename"
ansible all -m setup -a "filter=ansible_hostname"
ansible all -m setup -a "filter=ansible_domain"
ansible all -m setup -a "filter=ansible_memtotal_mb"
ansible all -m setup -a "filter=ansible_memory_mb"
ansible all -m setup -a "filter=ansible_memfree_mb"
ansible all -m setup -a "filter=ansible_os_family"
ansible all -m setup -a "filter=ansible_distribution"
ansible all -m setup -a "filter=ansible_distribution_major_version"
ansible all -m setup -a "filter=ansible_distribution_version"
ansible all -m setup -a "filter=ansible_processor_vcpus"
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"
ansible all -m setup -a "filter=ansible_architecture"
ansible all -m setup -a "filter=ansible_uptime_seconds"
ansible all -m setup -a "filter=ansible_processor*"
ansible all -m setup -a 'filter=ansible_env'
debug模块
功能: 此模块可以用于输出信息,并且通过 msg 定制输出的信息内容,功能类似于echo命令 注意: msg后面的变量有时需要加 " " 引起来
常见选项
msg #指定命令输出的信息
var #指定变量名,和msg互斥
verbosity #详细度
sysctl模块
功能: 修改内核参数
常见选项
name #内核参数
value #指定值
state #是否保存在sysctl.conf文件中,默认present
sysctl_set #使用sysctl -w 验证值生效
ansible websrvs -m sysctl -a 'name=net.ipv4.ip_forward value=1 state=present'
pam_limits
功能:管理资源限制
apt_repository 模块
功能: 此模块实现apt的仓库配置管理
apt_key 模块
功能: 添加和删除apt key
常见选项
url #key路径
state #添加或删除
#先导入key,注意先后顺序
ansible ubuntu-servers -m apt_key -a 'url=https://download.ceph.com/keys/release.asc state=present'
2. 总结ansible playbook目录结构及文件用途。
playbook是ansible的核心功能组件之一,它是用于定义任务和配置的自动化脚本,使用ymal语法编写可以描述在受管主机上执行的一系列任务和配置。Playbook定义了一个或多个剧本,每个剧本定义了一组任务,这些任务将在目标主机上执行。剧本中的任务按照定义的顺序依次执行。
每个任务包含一个或多个模块,模块是Ansible的可重用功能单元,用于执行各种操作,例如文件操作、软件安装、服务管理等。每个模块接收参数,根据这些参数执行操作,并返回结果。可以根据需要在剧本中使用不同的任务和模块。
Playbook的结构一般包括以下内容:
- `name`: Playbook的名称或描述
- `hosts`: 定义要管理的主机或主机组
- `vars`: 定义变量,用于在任务中传递参数和配置选项
- `tasks`: 包含一个或多个任务的任务列表- `handlers`: 定义处理程序,用于在任务执行过程中处理特定的事件
- `roles`: 定义可重用的角色,包含一组相关的任务和配置
3. 使用ansible playbook实现一个mysql角色。
开始配置mysql:
先去设置mysql的配置文件
/data/ansible/roles/mysql/files
vim ./my.cnf
[mysqld]
server-id=1
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
设置mysql变量
/data/ansible/roles/mysql/var
vim ./main.yml
mysql_version: 8.0.35
mysql_file: mysql-{{mysql_version}}-linux-glibc2.28-x86_64.tar.xz
mysql_root: 123456
配置mysql任务,这里的区别在于将每个任务分成一个文件,然后main.yml作为文件的总入口开始调用这些任务文件
/data/ansible/roles/mysql/tasks
vim ./main.yml
- include_tasks: install.yml
- include_tasks: group.yml
- include_tasks: user.yml
- include_tasks: unarchive.yml
- include_tasks: linkfile.yml
- include_tasks: data.yml
- include_tasks: config.yml
- include_tasks: script.yml
- include_tasks: path.yml
- include_tasks: service.yml
- include_tasks: secure.yml
vim ./insatll.yml
- name: install packages
yum:
name:
- libaio
- numactl-libs
vim ./group.yml
- name: create mysql group
group: name=mysql gid=306
vim ./user.yml
- name: create mysql user
user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql
vim ./unarchive.yml
- name: copy tar to remote host and file mode
unarchive: src=/data/mysql-8.0.35-linux-glibc2.28-x86_64.tar.xz dest=/usr/local/ owner=root group=root
vim ./linkfile.yml
- name: create linkfile /usr/local/mysql
file: src=/usr/local/mysql-{{ mysql_version }}-linux-glibc2.28-x86_64 dest=/usr/local/mysql state=link
vim ./data.yml
- name: data dir
shell: /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
tags: data
vim ./config.yml
- name: config my.cnf
copy: src=src=/data/ansible/roles/mysql/files/my.cnf dest=/etc/my.cnf
vim ./script.yml
- name: service script
shell: /bin/cp /usr/local/mysql/support-files/mysql.service /etc/init.d/mysql
vim ./path.yml
- name: PATH variable
copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
vim ./service.yml
- name: enable service
shell: chkconfig --add mysql;/etc/init.d/mysqld start
tage: service
vim ./secure.yml
- name: change password
shell: /usr/local/mysql/bin/mysqlamin -uroot password{{mysql_root_password}}
创建mysql角色文件
cd /data/ansible/
vim ./role_mysql.yml
- hosts: sql
remote_user: root
gather_facts: no
roles:
- mysql
![](https://i-blog.csdnimg.cn/blog_migrate/d1c8506c957d11cfb59fa78471bfe04c.jpeg)
4. 基于角色完成部署LNMP架构,并支持一键发布,回滚应用。同时基于zabbix角色批量部署zabbix。
mkdir -pv /data/ansible
使用ansible对LNMP进行角色部署的配置文件以及其它相关文件就存放到这个目录下
cd /data/ansible/
创建配置文件:
touch ansible.cfg
touch hosts
将ansible.cfg配置复制到配置文件中
修改配置文件,让配置文件识别当前文档的hosts
inventory = ./hosts
配置hosts分布好
创建角色目录:
mkdir ./roles/{nginx,mysql,php-fpm,redis,tomcat,wordpress}/{tasks,handlers,templates,files,var} -pv
在role平级的情况下创建单个文件
接下来针对每一个角色进行实现,依次nginx、php、mysql或者redis、wordpress
Nginx角色文件:
创建任务配置文件:先去写执行的ngxin编译安装执行的任务,当任务正常的写完之后,再去进行后面的步骤:
vim tasks/main.yml
- name: install packages
yum:
name: "{{ item }}"
loop:
- gcc
- make
- pcre-devel
- openssl-devel
- zlib-devel
- perl-ExtUtils-Embed
- name:
unarchive:
src: "{{ url }}"
dest: "/usr/local/src"
remote_src: yes
- name: compile and install
shell:
cmd: "./configure --prefix={{ install_dir }} --user=nginx --group=nginx --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_stub_status_module --with-http_gzip_static_module --with-pcre --with-stream --with-stream_ssl_module --with-stream_realip_module && make && make install"
chdir: "/usr/local/src/nginx-{{ version }}"
creates: "{{install_dir}}/sbin/nginx"
- name: create "{{ group }}"
group:
name: "{{ group }}"
gid: "{{ gid }}"
- name: create "{{ user }}"
user:
name: "{{ user }}"
uid: "{{ uid }}"
group: "{{ group }}"
system: yes
- name: service file
template:
src: /data/ansible/roles/nginx/templates/nginx.service.j2
dest: /lib/systemd/system/nginx.service
- name: start nginx
service:
name: nginx
state: started
enabled: yes
- name: copy config
template:
src: /data/ansible/roles/nginx/templates/nginx.conf.j2
dest: "{{install_dir}}/conf/nginx.conf"
notify:
- restart nginx
- name: check nginx config
shell:
cmd: "{{install_dir}}/sbin/nginx -t"
register: check_nginx_config
changed_when:
- check_nginx_config.stdout.find('successful')
- false
- name: config dir
file:
path: "{{install_dir}}/conf.d"
state: directory
- name: config file mode
file:
path: "{{install_dir}}"
owner: "{{ user }}"
group: "{{ group }}"
recurse: yes
以上内容定义了yum 安装gcc等编译软件,设置了解压下载下来的nginx源码包,以及所需要存储的位置,通过shell模块对软件进行编译,设置群组,用户,配置service文件,开启nginx 以及检查nginx配置文件是否正确的判断
当以上的任务写完之后就要针对里面的内容开始进行响应的配置,例如其中的变量,配置文件
开始设置配置文件,在nginx上的配置文件需要重新进行配置之后以便传输到需要目录:
创建模板:
vim ./templates/nginx.conf.j2
user {{ user }};
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65;
include {{install_dir}}/conf.d/*.conf;
}
配置nginx启动文件模板
vim ./templates/nginx.service.j2
[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target nss-lookup.target
[Service]
Type=forking
PIDFile={{ install_dir }}/logs/nginx.pid
ExecStartPre=/usr/bin/rm -f {{ install_dir }}/logs/nginx.pid
ExecStartPre={{ install_dir }}/sbin/nginx -t
ExecStart={{ install_dir }}/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
KillSignal=SIGQUIT
TimeoutStopSec=5
KillMode=mixed
PrivateTmp=true
[Install]
WantedBy=multi-user.target
两个模板解决完成之后开始设置变量:
可以通过hosts添加:
vim hosts
[nginx]
10.0.0.21
10.0.0.22
[nginx:vars]
uid=88
user=nginx
gid=88
group=nginx
version="1.24.0"
url="http://nginx.org/download/nginx-{{ version }}.tar.gz"
user=nginx
install_dir="/apps/nginx"
开始配置触发器,handlers:
vim ./roles/nginx/handlers/main.yml
- name: restart nginx
service:
name: nginx
state: restarted
配置调用角色:
切换到roles平等目录下:ansible.cfg hosts roles
- hosts: nginx
remote_user: root
roles:
- nginx
先测试以下:
ansible-playbook -i hosts nginx_role.yml
小i指定hosts文件,如果项目多了可以单独指定
实现PHP角色:
cd ./roles/php-fpm/
这里先去配置php的配置文件
vim ./templates/php-fpm.conf.j2
server {
listen 80;
server_name {{ fqdn }};
location ~ \.php$ {
root {{ root_path }};
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
先去相应的复制一个www.conf到files目录下修改以下内容
vim templates/www.conf.j2 #这个文件就是原始的php文件复制过来的
user = nginx
group = nginx
listen = 127.0.0.1:9000
只留下
[www]
prefix = /path/to/pools/{{ pool }}
user = {{ user }}
group = {{ group }}
listen = /run/php/php8.1-fpm.sock
listen = 127.0.0.1:9000
listen.backlog = 511
创建一个php配置文件
vim templates/php.ini.j2 #这个文件就是原始的php文件复制过来的
date.timezone = Asiz/Shanghai
max_execution_time = 350
max_input_time = 600
post_max_size = 200M
upload_max_filesize = 200M
开始配置任务:
- name: install packages
yum:
name: "{{ item }}"
loop:
- php-fpm
- php-mysqlnd
- php-json
- php-xml
- php-gd
- php-pecl-zip
- name: php path
file:
path: /var/lib/php
owner: "{{ user }}"
group: "{{ group }}"
recurse: yes
- name: config php.ini
template:
src: /data/ansible/roles/php-fpm/templates/php.ini.j2
dest: /etc/php.ini
notify: restart php-fpm
- name: config www.conf
copy:
src: /data/ansible/roles/php-fpm/files/www.conf
dest: /etc/php-fpm.d/www.conf
notify: restart php-fpm
- name: config nginx
template:
src: /data/ansible/roles/php-fpm/templates/php-fpm.conf.j2
dest: "{{ install_dir }}/conf.d/php-fpm.conf"
notify: restart nginx
- name: start php-fpm
service:
name: php-fpm
state: started
enabled: yes
- name: test page
copy:
src: test.php
dest: "{{ root_path }}/"
- name: create php datadir
file:
name: "{{ root_path }}"
state: directory
owner: "{{ user }}"
group: "{{ group }}"
配置php触发器
vim handlers/main.yml
- name: restart php-fpm
service:
name: php-fpm
state: restarted
- name: restart nginx
service:
name: nginx
state: restarted
以上配置好之后不清楚nginx与php是否能正常的运行,就在files下配置一个info.php的文件进行测试:
vim files/test.php
<?php
phpinfo();
?>
打开hosts文件开始添加新的变量:
vim hosts
root_path=/data/php
fqdn=10.0.0.21
创建php的可调用yml文件:
vim php-fpm-role.yml
- hosts: nginx
remote_user: root
roles:
- php-fpm
执行命令:
ansible-playbook php-fpm-role.yml
配置wordpress:
cd wordpress/
vim tasks/main.yml
- name: down wordpress
unarchive:
src: "/data/wordpress-6.3.2-zh_CN.tar.gz"
dest: /data/
owner: "{{ user }}"
group: "{{ group }}"
同时需要把压缩包放到data文件当中
回到目录下,在写一个wordpress的角色文件
cd /data/ansible/
cp php-fpm-role.yml wordpress.yml
vim wordpress.yml
- hosts: nginx
remote_user: root
roles:
- wordpress
ansible-playbook wordpress.yml
将以上的步骤全部重新执行一次:
vim lnmp_role.yml
- include: nginx_role.yml
- include: php-fpm-role.yml
- include: wordpress.yml
#- include:
ansible-playbook lnmp_role.yml
开始配置mysql:
先去设置mysql的配置文件
/data/ansible/roles/mysql/files
vim ./my.cnf
[mysqld]
server-id=1
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
设置mysql变量
/data/ansible/roles/mysql/var
vim ./main.yml
mysql_version: 8.0.35
mysql_file: mysql-{{mysql_version}}-linux-glibc2.28-x86_64.tar.xz
mysql_root: 123456
配置mysql任务,这里的区别在于将每个任务分成一个文件,然后main.yml作为文件的总入口开始调用这些任务文件
/data/ansible/roles/mysql/tasks
vim ./main.yml
- include_tasks: install.yml
- include_tasks: group.yml
- include_tasks: user.yml
- include_tasks: unarchive.yml
- include_tasks: linkfile.yml
- include_tasks: data.yml
- include_tasks: config.yml
- include_tasks: script.yml
- include_tasks: path.yml
- include_tasks: service.yml
- include_tasks: secure.yml
vim ./insatll.yml
- name: install packages
yum:
name:
- libaio
- numactl-libs
vim ./group.yml
- name: create mysql group
group: name=mysql gid=306
vim ./user.yml
- name: create mysql user
user: name=mysql uid=306 group=mysql shell=/sbin/nologin system=yes create_home=no home=/data/mysql
vim ./unarchive.yml
- name: copy tar to remote host and file mode
unarchive: src=/data/mysql-8.0.35-linux-glibc2.28-x86_64.tar.xz dest=/usr/local/ owner=root group=root
vim ./linkfile.yml
- name: create linkfile /usr/local/mysql
file: src=/usr/local/mysql-{{ mysql_version }}-linux-glibc2.28-x86_64 dest=/usr/local/mysql state=link
vim ./data.yml
- name: data dir
shell: /usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
tags: data
vim ./config.yml
- name: config my.cnf
copy: src=src=/data/ansible/roles/mysql/files/my.cnf dest=/etc/my.cnf
vim ./script.yml
- name: service script
shell: /bin/cp /usr/local/mysql/support-files/mysql.service /etc/init.d/mysql
vim ./path.yml
- name: PATH variable
copy: content='PATH=/usr/local/mysql/bin:$PATH' dest=/etc/profile.d/mysql.sh
vim ./service.yml
- name: enable service
shell: chkconfig --add mysql;/etc/init.d/mysqld start
tage: service
vim ./secure.yml
- name: change password
shell: /usr/local/mysql/bin/mysqlamin -uroot password{{mysql_root_password}}
创建mysql角色文件
cd /data/ansible/
vim ./role_mysql.yml
- hosts: sql
remote_user: root
gather_facts: no
roles:
- mysql
~