自定义变量 rsync客户端备份(600) 使用ansible执行一条命令,这个命令就是ad-hoc,临时执行 ansible查看帮助,使用的是ansible-doc命令 把ansible在命令行执行的命令(ad-hoc)写入到文件中,那么这个文件就叫作playbook,一般使用的yml(yaml)语法,能够屡次使用 不能使用systemd service模块来管理selinux firewalld --------------------------------------------------------------------------- 1.ping模块,检测 2.setup模块,获取主机信息 3.command模块,执行简单的命令 4.shell模块,执行复杂的命令 5.cron模块,添加定时任务,name注释 state(present absent) 6.copy模块,拷贝, 建立文件或目录,修改已经存在的目录的权限,dest目标目录 owner group mode backup src源 7.file模块,建立文件或目录,修改已经存在的目录的权限,建立软硬链接,path定义目录或文件,state(touch directory absent link hard) owner group mode recurse dest(连接到) 8.yum模块,name(file http),state(present absent latest) disable_gpg_check,download_only=true 9.script模块,-a '/root/dir.sh' 10.synchronize模块, delete=yes(同步) src dest mode=push/pull 11.mount模块 ,name:必选项,'哪一个文件挂载',state(present mount absent unmounted) 12.get_url模块,下载,url dest指定下载目录 mode owner group force_basic_auth=yes(覆盖) 13.yum_repository模块,功能:添加,删除,修改yum源,name description baseurl gpgcheck enabled state 14.systemd模块,远程启停,重载服务 name state(started stoped restarted reloaded enableed=yes daemon_reload自动重载 masked锁) 15.service模块 16.group模块,name state gid 17.user模块,group groups(append),uid password name system state(absent remove=no)shell generate_ssh_key create_home=false/no 18.unarchive模块,压缩解压 src dest copy 29.selinux state(enforcing permissive disabled) 20.firewalld service port permanent永久 immediate临时生效 state(enabled disabled) 21.lineinfile模块,文本替换,删除,path line state owner 22.stat模块,获取文件或目录信息 ----------------------------------------------------------------------- ansible控制端(m01),上能够建立目录,存放不一样的服务的相关文件,这样用起来更方便 mkdir {nginx,php,rsync,nfs,httpd} rsync是以守护进程的方式启动的 #rsync密码文件的600必定要加 nfs客户端的网段指定要和服务端一致 开启防火墙的状况下,能够指定开启服务或端口(nfs 80 ) ad-hoc写入脚本,添加/bin/bash,就能够作成一个脚本,相似于playbook 写脚本 bash语法 写Python Python语法 写前端 html css js 写playbook yml(yaml)语法 写saltstack yml(yaml)语法,一般以sls结尾 CMDB 资产管理 tailf /var/log/cron #查看crond日志
什么是PlayBookphp
PlayBook
即"剧本"的意思,PlayBook是由如下部分组成的css
play
: 定义的是主机(hosts)的角色。
tasks
: 定义的是具体执行的任务。
playbook
: 由一个或多个play(主机)组成,一个play能够包含多个task(台词,动做)html
简单理解为: 使用不一样的模块完成一件事情(目的)前端
在Ansible
中"剧本文件"是以yml结尾的文件。
在SaltStack
中"剧本文件"是以sls结尾的文件。
可是语法,使用的都是yaml
语法python
语法 | 描述 |
---|---|
缩进 | YAML使用固定的缩进风格表示层级结构,每一个缩进由两个空格组成, 不能使用TAB |
冒号 | 以冒号结尾的除外,其余全部冒号后面必须有空格 |
短横线 | 表示列表项,使用一个短横杠加一个空格,多个项使用一样的缩进级别做为同一列表 |
特色 | PlayBook | ad-hoc |
---|---|---|
完整性 | √ | ✘ |
持久性 | √ | ✘ |
执行效率 | 低 | 高 |
变量 | 支持 | 不支持 |
耦合度 | 低 | 高 |
1.PlayBook
功能比ad-hoc
更全,是对ad-hoc
的一种编排.
2.PlayBook
能很好的控制前后执行顺序, 以及依赖关系.
3.PlayBook
语法展示更加的直观.
4.playbook
能够持久使用,ad-hoc
没法持久使用.由于playbook能够调用变量mysql
格式一,使用yml语法编辑playbook剧本 [root@m01 ~]# vim a.yml --- #加不加均可以 - hosts: web01 #PLAY [web01] tasks: #检查 - name: install tree nfs-utiles #TASK [install tree nfs-utiles] yum: #模块 name: tree #包名(能够直接指定,或者使用列表项) state: present #动做 #检查yml语法 [root@m01 ~]# ansible-playbook --syntax-check a.yml #执行playbook [root@m01 ~]# ansible-playbook a.yml #注意2468空格(能够以tasks中的s name中的m 做为参照),yml的报错不许确 #一个hosts就是一个play #一个name,就是一个安装的注释,第二个注释是指定包名 [root@m01 ~]# ansible-playbook a.yml web01: ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 已更改=0 没法访问=0 失败=0 跳过=0 解救=0 忽略=0 格式二 [root@m01 ~]# vim a.yml - hosts: web01 tasks: - name: istall yum: name: - rsync #列表项 - httpd state: absent [root@web01 ~]# rpm -qa|grep httpd #有些包不能被卸载(系统依赖) httpd-tools-2.4.6-93.el7.centos.x86_64 [root@web01 ~]# rpm -qa|grep rsync 格式三(不推荐) [root@m01 ~]# vim a.yml - hosts: web01 tasks: - name: istall yum: name=rsync state=present 格式四 [root@m01 ~]# vim a.yml - hosts: web01 tasks: - name: istall yum: name: - rsync - httpd state: present - name: started service: name: rsyncd state: started #服务的启动和中止不支持列表项,可是可使用变量的形式同时操做一台主机上的多个服务 [root@m01 ~]# vim a.yml - hosts: web01 tasks: - name: istall yum: name: - rsync - httpd state: present - name: started rsyncd #分别指定启动项 service: name: rsync state: started - name: started httpd service: name: httpd state: started ------------------------------------- - hosts: all remote_user: root vars: collect_info: "/data/test/{{ansible_all_ipv4['addresses']}}/" tasks: - name: create IP directory file: name: "{{collect_info}}" state: directory --------------------------------------- 格式五 [root@m01 ~]# vim a.yml - hosts: web01 tasks: - name: istall yum: name: - rsync - httpd state: present - name: started service: name: "{{ server }}" vars: #自定义变量(在模块中定义变量) server: - rsyncd - httpd state: started #模拟执行,测试是否能够执行 [root@m01 ~]# ansible-playbook -C a.yml 2. [root@m01 ~]# cat foo.yml --- - hosts: all remote_user: root #指定执行命令的用户 vars: #自定义变量 file_name: zls.txt tasks: - name: Create New File file: name=/tmp/{{ file_name }} state=touch #
需求一:编写安装httpd剧本linux
#建立目录剧本存放目录 [root@m01 ~]# mkdir httpd #编辑Inventory [root@m01 ~]# vim /etc/ansible/hosts [web_group] web01 ansible_ssh_host=10.0.0.7 [root@m01 ~]# vim /root/httpd/httpd.yml - hosts: web01 tasks: - name: istall yum: name: - httpd state: present #检查语法 [root@m01 ~]# ansible-playbook --syntax-check httpd/httpd.yml #测试安装 [root@m01 ~]# ansible-playbook -C httpd/httpd.yml
需求二:安装完httpd服务并启动加入开机自启nginx
[root@m01 ~]# vim /root/httpd/httpd.yml --- - hosts: web_group #安装httpd tasks: - name: Install httpd Server yum: name: httpd state: present #启动httpd - name: Start Httpd Server systemd: name: httpd state: started enabled: yes #测试安装和启动 [root@m01 ~]# ansible-playbook -C httpd/httpd.yml
需求三:编写网站页面并启动web
--- - hosts: web_group #安装httpd tasks: - name: Install httpd Server yum: name: httpd state: present #配置网站 - name: Config Httpd Server copy: content: syy_web_page dest: /var/www/html/index.html #启动httpd - name: Start Httpd Server systemd: name: httpd state: started enabled: yes #执行 [root@m01 httpd]# ansible-playbook /root/httpd/httpd.yml
#建立目录剧本存放目录 [root@m01 ~]# mkdir httpd #编辑Inventory [root@m01 ~]# vim /etc/ansible/hosts [web_group] web01 ansible_ssh_host=10.0.0.7 [root@m01 ~]# vim /root/httpd/httpd.yml - hosts: web01 tasks: - name: istall yum: name: - httpd state: present - name: started httpd service: name: httpd state: started - name: create page copy: content: syy_page dest: /var/www/html/index.html owner: www group: www mode: 0644 #检查语法 [root@m01 ~]# ansible-playbook --syntax-check httpd/httpd.yml #测试安装 [root@m01 ~]# ansible-playbook -C httpd/httpd.yml #浏览器访问 10.0.0.7
需求四:开启防火墙端口sql
前提:1.作过秘钥认证 2.主机清单配置无误
1.建立剧本存放目录 [root@m01 ~]# mkdir /ansible -p 2.编辑剧本 [root@m01 ~]# vim /ansible/firewalld.yml - hosts: web_group #安装httpd tasks: - name: Install httpd Server yum: name: httpd state: present #配置网站 - name: Config Httpd Server copy: content: syy_web_page dest: /var/www/html/index.html #启动httpd,并加入开机自启动 - name: Start Httpd Server systemd: name: httpd state: started enabled: yes #启动防火墙 - name: Start Firewalld Server systemd: name: firewalld state: started enabled: yes #开启防火墙的80端口 - name: Config Firewalld Server firewalld: service: http immediate: yes permanent: yes state: enabled 打开浏览器访问网站: http://10.0.0.7 http://10.0.0.8
需求五:不一样的主机配置不一样的网站
目前来讲,想要根据不一样主机配置不一样的网站,咱们可使用多个play的方式, 可是在生产环境中,咱们须要写循环,来知足咱们的需求,多个play了解便可 - hosts: web_group #安装httpd tasks: - name: Install httpd Server yum: name: httpd state: present #启动httpd - name: Start Httpd Server systemd: name: httpd state: started enabled: yes #启动防火墙 - name: Start Firewalld Server systemd: name: firewalld state: started enabled: yes #开启防火墙的80端口 - name: Config Firewalld Server firewalld: service: http immediate: yes permanent: yes state: enabled #单独配置web01页面 - hosts: web01 tasks: - name: Config Httpd Server copy: content: zls_web01_page dest: /var/www/html/index.html #单独配置web02页面 - hosts: web02 tasks: - name: Config Httpd Server copy: content: zls_web02_page dest: /var/www/html/index.html [root@m01 httpd]# ansible-playbook /root/httpd/httpd.yml 打开浏览器访问网站: http://10.0.0.7 http://10.0.0.8 #一个playbook里面写多个play,会致使变量的重复获取,影响剧本的执行效率 #能够在content里指定重复获取的变量,web01(ansible_{{ansible}}),这样指定的话就能够避免变量的重复获取,提升剧本执行效率 [root@m01 ~]# ansible-playbook a.yml PLAY [web01] *********************************************************************************************** TASK [Gathering Facts] ******* #剧本中一个hosts(play),获取一次全部的变量 #变量的简单使用 [root@m01 ~]# vim a.yml - hosts: web01 tasks: - name: istall yum: name: - httpd state: present - name: started httpd service: name: httpd state: started enabled: yes - name: create page copy: content: syy_{{ ansible_fqdn }}_{{ ansible_default_ipv4['address'] }}_page dest: /var/www/html/index.html owner: www group: www mode: 0644 #用'.'调用字典中的变量 content: syy_{{ansible_fqdn}}_{{ ansible_default_ipv4.address }}_page #Python中变量的定义和调用 [root@m01 ~]# python >>> dic={'ip':'10.0.0.7','fqdn':'web01'} >>> print dic['ip'] 10.0.0.7 >>> print dic['fqdn'] web01 >>> quit()
主机名 | wanIP | lanIP | 服务 | 角色 |
---|---|---|---|---|
m01 | 10.0.0.61 | 172.16.1.61 | Ansible | 控制端 |
backup | 10.0.0.41 | 172.16.1.41 | rsync服务端 | 被控端 |
web01 | 10.0.0.7 | 172.16.1.7 | rsync客户端 | 被控端 |
web02 | 10.0.0.8 | 172.16.1.8 | rsync客户端 | 被控端 |
#安装ansible #编辑Ansible Inventory(配置主机清单) [root@m01 ~]# vim /etc/ansible/hosts #推送公钥
#web安装nginx - hosts: web_group tasks: - name: Install Nginx Server yum: name: nginx state: present #web配置nginx(须要提早修改控制端nginx配置文件) - name: Configure Nginx Conf copy: src: /root/ansible/nginx/nginx.conf dest: /etc/nginx/nginx.conf owner: root group: root mode: 0644 #web配置虚拟主机 - name: Configure Nginx Server copy: src: /root/ansible/nginx/wp.conf dest: /etc/nginx/conf.d/wp.conf owner: root group: root mode: 0644 #建立web的站点目录 - name: Create HTML Directory file: path: /code owner: www group: www mode: 0755 state: directory #web启动nginx - name: Start Nginx Server service: name: nginx state: started enabled: true #建立默认页面 - hosts: web01 tasks: - name: Create web01 index.html copy: content: web01_page dest: /code/index.html owner: www group: www mode: 0644 - hosts: web02 tasks: - name: Create web02 index.html copy: content: web02_page dest: /code/index.html owner: www group: www mode: 0644
主机名 | wanIP | lanIP | 服务 | 角色 |
---|---|---|---|---|
m01 | 10.0.0.61 | 172.16.1.61 | Ansible | 控制端 |
backup | 10.0.0.41 | 172.16.1.41 | rsync服务端 | 被控端 |
web01 | 10.0.0.7 | 172.16.1.7 | rsync客户端 | 被控端 |
web02 | 10.0.0.8 | 172.16.1.8 | rsync客户端 | 被控端 |
nfs | 10.0.0.31 | 172.16.131 | rsync客户端 | 被控端 |
#安装ansible #编辑Ansible Inventory(配置主机清单) [root@m01 ~]# vim /etc/ansible/hosts ... [install_rsync] web01 ansible_ssh_host=172.16.1.7 asible_ssh_user=root ansible_ssh_port=22 web02 ansible_ssh_host=172.16.1.8 asible_ssh_user=root ansible_ssh_port=22 web03 ansible_ssh_host=172.16.1.9 asible_ssh_user=root ansible_ssh_port=22 backup ansible_ssh_host=172.16.1.41 asible_ssh_user=root ansible_ssh_port=22 nfs ansible_ssh_host=172.16.1.31 asible_ssh_user=root ansible_ssh_port=22 #推送公钥
#建立rsync剧本存放目录 [root@m01 ~]# mkdir /root/ansible/rsync -p #编辑Inventory(主机清单) [root@m01 ~]# vim /etc/ansible/rsync/hosts #准备rsync配置文件 [root@m01 rsyncd]# vim /root/ansible/rsync/rsyncd.conf #################################### 服务相关配置 ########################### uid = www #指定rsync进程启动的用户(打工的),和传送文件的用户---------useradd gid = www #指定rsync进程启动的组 port = 873 #指定rsync使用的监听端口(默认873端口,能够改) fake super = yes #无需让rsync以root身份运行,容许接收文件的 完整属性(属主属组不变) use chroot = no #禁锢指定的目录(只能推到指定的目录,不紧固的话随便推) max connections = 200 #最大链接数(同时链接的主机数,减小服务端负载) timeout = 600 #超时时间 ignore errors #忽略报错 read only = false #不仅读(可读可写) list = false #不容许别人查看模块名 #################################### 命令相关配置 ########################### auth users = bck #传输文件的用户(至关于密码,没有实际意义),客户端认证1 secrets file = /etc/rsync.passwd #传输用户文件的密码文件,vim或echo/600,客户端认证2 log file = /var/log/rsyncd.log #日志文件,使用了rsync以后才会生成 [backupmk] #模块名,能够随便改,当心大写字母,空格,数字,多模块对应多主机(随便推?),客户端认证3 comment = welcome to oldboyedu backup! #注释(废物) path = /backup #备份的目录-------mkdir/权限属主属组,,客户端认证4
#rsync客户端定时备份脚本 vim /root/ansible/rsync/bf.sh #!/bin/bash #主机名: H=$(hostname) #内网IP: IP=$(hostname -I|awk '{print $2}') #备份到哪: (前面/加后面不加) na=/backup #当前时间: #年月日 时分 C=$(date +%F-%R) #年月日 D=$(date +%F) #年月日时分秒 E=$(date +%F-%T) cde=$D #备份哪一个目录:(先后都不要加根) A='backup' #以传参的方式定义一个目录 bf=${na}/${H}_${IP}_${D} [ -d $bf ]||mkdir -p $bf #校验 #清理 cd /$A && cd .. && \ tar zcf ${bf}/${H}_${IP}_${cde}.$A.tgz $A cd ${bf} && \ md5sum ${H}_${IP}_${cde}.$A.tgz >${H}_${IP}_${cde}.$A.tgz.md5sum.passwd export RSYNC_PASSWORD=123 rsync -az ${na}/ bck@10.0.0.41::backupmk find $na -mitime +7 ! -name '$na' |xargs rm -rf crontab -e # 备份重要配置文件 编辑时间 编辑人:xxx 00 1 * * * /usr/bin/sh /etc/profile.d/bfpzwj.sh >>/dev/null
一键部署rsync
#编写剧本 [root@m01 ~]# vim /root/ansible/rsync/rsyncd.yml - hosts: install_rsync tasks: #建立www组 - name: Create www Group group: name: www gid: 666 state: present #建立www用户 - name: Create www User user: name: www group: www uid: 666 create_home: false shell: /sbin/nologin state: present #启动防火墙 - name: Start Firewalld Server systemd: name: firewalld state: started enabled: yes #开启防火墙的80 873 443 端口,nfs服务 - name: Open 80 Port firewalld: port: 80/tcp immediate: yes permanent: yes state: enabled - name: Open 443 Port firewalld: port: 443/tcp immediate: yes permanent: yes state: enabled - name: Open 873 Port firewalld: port: 873/tcp immediate: yes permanent: yes state: enabled - name: Open nfs Port firewalld: service: nfs state: enabled permanent: no #关闭selinux - name: Stop SeLinux selinux: state: disabled - hosts: install_rsync tasks: #安装rsync - name: Install Rsyncd Server yum: name: rsync state: present - hosts: backup_group tasks: #推送rsync配置文件 - name: Scp Rsync Config copy: src: /root/ansible/rsync/rsyncd.conf dest: /etc/rsyncd.conf owner: root group: root mode: 0644 #建立密码文件并受权 - name: Create Passwd File copy: content: 'bck:123' dest: /etc/rsync.passwd owner: www group: www mode: 0600 #建立/backup目录 - name: Create backup Directory file: path: /backup state: directory mode: 0755 owner: www group: www recurse: yes - hosts: install_rsync tasks: #启动rsync服务,并加入开机自启 - name: Start Rsyncd Server systemd: name: rsyncd state: started enabled: yes #从新启动rsync服务 - name: reStart Rsyncd Server systemd: name: rsyncd state: restarted #推送定时任务脚本 - hosts: web_group tasks: - name: Scp Rsync Config copy: src: /root/ansible/rsync/bf.sh dest: /root/bf.sh owner: root group: root mode: 0644 #编辑定时任务 - name: create backup crond cron: name: "backup web data" job: "/bin/bash /root/bf.sh &>/dev/null" #检测语法 [root@m01 ~]# ansible-playbook --syntax-check /root/rsyncd/rsyncd.yml playbook: /root/rsyncd/rsyncd.yml #测试 [root@m01 ~]# ansible-playbook -C /root/rsyncd/rsyncd.yml
扩展需求:
1.给客户端推送脚本
2.加入crontab作备份
完成刚开始学架构阶段的rsync的实战案例
部署NFS
服务,NFS
服务端提供挂载点给web01
和web02
主机名 | wanIP | lanIP | 服务 | 角色 |
---|---|---|---|---|
m01 | 10.0.0.61 | 172.16.1.61 | Ansible | 控制端 |
nfs | 10.0.0.31 | 172.16.1.31 | nfs服务端 | 被控端 |
web01 | 10.0.0.7 | 172.16.1.7 | nfs客户端 | 被控端 |
web02 | 10.0.0.8 | 172.16.1.8 | nfs客户端 | 被控端 |
#安装ansible #编辑Ansible Inventory [root@m01 ~]# vim /etc/ansible/hosts ... [nfs_all:children] web_group nfs_group #推送公钥 #建立项目存放目录 [root@m01 ~]# mkdir /root/ansible/nfs -p #准备nfs配置文件 [root@m01 ~]# cat /root/ansible/nfs/nfs.exports /data 10.0.0.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
一键部署nfs
[root@m01 ~]# vim /root/nfs/nfs.yml - hosts: nfs_all tasks: #安装nfs - name: Install nfs-utils yum: name: nfs-utils state: present #建立www组 - name: Create www Group group: name: www gid: 666 #建立www用户 - name: Create www User user: name: www group: www uid: 666 create_home: false shell: /sbin/nologin #启动防火墙 - name: Start Firewalld Server systemd: name: firewalld state: started enabled: yes #开启防火墙的80端口 - name: Open 80 Port firewalld: port: 80/tcp immediate: yes permanent: yes state: enabled - name: Open 443 Port firewalld: port: 443/tcp immediate: yes permanent: yes state: enabled - name: Open 873 Port firewalld: port: 873/tcp immediate: yes permanent: yes state: enabled - name: Open nfs Port firewalld: service: nfs state: enabled permanent: no - hosts: nfs_group tasks: #推送配置文件 - name: Scp NFS Server copy: content: "/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)\n" dest: /etc/exports owner: root group: root mode: 0644 #建立挂载目录并受权 - name: Create data Directory file: path: /data state: directory owner: www group: www mode: 0755 recurse: yes #启动nfs-server - name: Start NFS Server systemd: name: nfs-server state: started enabled: yes #重启nfs-server - name: reStart NFS Server systemd: name: nfs-server state: restarted enabled: yes #web01和web02挂载目录 - hosts: web_group tasks: - name: Mount NFS Server mount: path: /opt src: 10.0.0.31:/data fstype: nfs opts: defaults state: mounted #推送备份脚本到nfs服务器 - name: Push NFS Backup Shell copy: src: /root/ansible/nfs/backup.sh dest: /root/backup.sh owner: root group: root mode: 0755 #添加定时任务 - name: Create Crond cron: name: NFS Backup Rsync job: '/bin/sh /root/backup.sh &>/dev/null' #检查语法 [root@m01 ~]# ansible-playbook --syntax-check /root/ansible/nfs/nfs.yml playbook: /root/nfs/nfs.yml #执行 [root@m01 ~]# ansible-playbook /root/ansible/nfs/nfs.yml
扩展需求:
1.给web提交做业代码
2.部署nfs,并挂载/var/www/html/upload目录
使用playbook
实现一套LAMP
架构。
1.反面教材以下
主机名 | wanIP | lanIP | 服务 | 角色 |
---|---|---|---|---|
m01 | 10.0.0.61 | 172.16.1.61 | Ansible | 控制端 |
web01 | 10.0.0.7 | 172.16.1.7 | nfs客户端 | 被控端 |
web02 | 10.0.0.8 | 172.16.1.8 | nfs客户端 | 被控端 |
web03 | 10.0.0.9 | 172.16.1.9 | nfs客户端 | 被控端 |
2.准备
由于这只是一个练习,因此咱们将apache mariadb php所有都写在一个yml文件中,而且放在一个目录下,
注意:在生产中,咱们是不会这么作的,咱们须要每个服务单独拎出来,解耦。
#建立项目目录 [root@m01 ~]# mkdir /root/lamp/ #编辑Inventory [root@m01 lamp]# cat /etc/ansible/hosts ... [nfs_all:children] web_group nfs_group #自定义变量(变量能够定义在剧本中,也能够定义在文件中) [root@m01 ~]# vim /root/lamp/web_group packages: - httpd - mariadb-server - php - php-mysql - php-pdo
3.编写剧本
[root@m01 ~]# vim /root/lamp/lamp.yml - hosts: web_group tasks: #安装指定服务和PHP - name: Install httpd mariadb php Server yum: name: "{{ packages }}" vars: packages: - httpd - mariadb-server - php - php-mysql - php-pdo #安装httpd - hosts: web_group tasks: - name: Install httpd Server yum: name: httpd state: present #启动httpd服务 - name: Start httpd Server systemd: name: httpd state: started enabled: yes #从新启动httpd服务 - name: reStart httpd Server systemd: name: httpd state: restarted enabled: yes #安装mariadb - hosts: mariadb_group tasks: - name: Install mariadb Server yum: name: mariadb-server state: present #启动mariadb服务 - name: Start httpd Server systemd: name: mariadb state: started enabled: yes #从新启动mariadb服务 - name: reStart httpd Server systemd: name: mariadb state: restarted enabled: yes #下载wordpress - name: Get Wordpress Package get_url: url: "http://test.driverzeng.com/Nginx_Code/wordpress-5.0.3-zh_CN.tar.gz" dest: /tmp #解压wordpress - name: Unarchive Wordpress Package unarchive: src: /var/www/html/wordpress-5.0.3-zh_CN.tar.gz dest: /var/www/html copy: no #检查语法 [root@m01 lamp]# ansible-playbook --syntax-check /root/lamp/lamp.yml playbook: /root/lamp/lamp.yml #执行 [root@m01 lamp]# ansible-playbook /root/lamp/lamp.yml 打开浏览器访问: http://10.0.0.7/wordpress/wp-admin/setup-config.php http://10.0.0.8/wordpress/wp-admin/setup-config.php
扩展需求:
1.使用php链接数据库
2.使用Ansible建立数据库wordpress
#相似于: create database wordpress
3.使用Ansible建立数据库用户wordpress
#相似于: grant all on *.* to wordpress@'%' identified by 'zls';