1、使用ansible的playbook实现自动化安装httpd
1)首先配置好ansible的hosts文件,让其对应主机能够受ansible控制
提示:我们在主机清单上配置了所管控的主机地址,但是直接用ansible的ping模块去探测主机的存活情况,却显示权限拒绝。从提示上说让我们要指定用什么验证。默认情况ansible是通过ssh的key验证的,所以我们在ansible的主机清单中配置了管控主机的ip是不够的,还要配置ssh基于KEY验证
2)配置管控主机能够基于SSH key验证
[root@test ~]# ip a s enp2s0 2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:30:18:51:af:3c brd ff:ff:ff:ff:ff:ff inet 192.168.0.99/24 brd 192.168.0.255 scope global noprefixroute enp2s0 valid_lft forever preferred_lft forever inet 172.16.1.2/16 brd 172.16.255.255 scope global noprefixroute enp2s0:0 valid_lft forever preferred_lft forever inet6 fe80::230:18ff:fe51:af3c/64 scope link valid_lft forever preferred_lft forever [root@test ~]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/root/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:UORxi5JhiKDBOhZP3FsbsZfyCjqUcjwqdl1qcnTyGsw root@test The key's randomart image is: +---[RSA 2048]----+ |+.....oo= . | |.+.o.o B.+.. | |o + *o=o. | |o..... ++ | |.o * + oS. | | = B B . | |.o = E o | |o . = o | | . | +----[SHA256]-----+ [root@test ~]# ssh-copy-id 192.168.0.99 -p 41319 /bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host '[192.168.0.99]:41319 ([192.168.0.99]:41319)' can't be established. ECDSA key fingerprint is SHA256:W2pD2PA2K9tGKGVK+weiINcVESkUaHjsTI263OVqBh4. ECDSA key fingerprint is MD5:3a:f8:c9:b1:63:c6:c1:ae:e0:6e:e2:ca:17:4a:20:7a. Are you sure you want to continue connecting (yes/no)"ssh -p '41319' '192.168.0.99'" and check to make sure that only the key(s) you wanted were added. [root@test ~]# scp -r .ssh 192.168.0.10:~/ The authenticity of host '192.168.0.10 (192.168.0.10)' can't be established. ECDSA key fingerprint is SHA256:EG9nua4JJuUeofheXlgQeL9hX5H53JynOqf2vf53mII. ECDSA key fingerprint is MD5:57:83:e6:46:2c:4b:bb:33:13:56:17:f7:fd:76:71:cc. Are you sure you want to continue connecting (yes/no)"https://www.jb51.net/article/180381.htm">https://www.jb51.net/article/180381.htm测试:用ansible主机通过ssh远程客户端主机
[root@test ~]# ssh 192.168.0.10 Last login: Mon Jan 27 04:58:46 2020 from 192.168.0.99 [root@test-centos7-node1 ~]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:f2:82:0c brd ff:ff:ff:ff:ff:ff inet 192.168.0.10/24 brd 192.168.0.255 scope global ens33 valid_lft forever preferred_lft forever inet6 fe80::20c:29ff:fef2:820c/64 scope link valid_lft forever preferred_lft forever [root@test-centos7-node1 ~]# exit 登出 Connection to 192.168.0.10 closed. [root@test ~]#提示:可以看到ansible主机能够正常免密登录远端主机,接下我们在用ansible的ping模块去探测下被管控主机的存活
提示:能够看到用ansible的ping模块去探测远端主机的存活,返回的状态是SUCCESS,数据是pong说明对端主机上存活的
到此ansible的环境就准备好了,接下来写playbook来安装httpd
[root@test ~]# cat install_httpd.yml --- - hosts: websers remote_user: root tasks: - name: copy epel file copy: src=/etc/yum.repos.d/CentOS-Base.repo dest=/etc/yum.repos.d/CentOS-Base.repo - name: install httpd yum: name=httpd - name: start httpd service: name=httpd state=started enabled=yes [root@test ~]# ansible-playbook -C install_httpd.yml PLAY [websers] *********************************************************************************************************** TASK [copy epel file] **************************************************************************************************** changed: [192.168.0.10] TASK [install httpd] ***************************************************************************************************** changed: [192.168.0.10] TASK [start httpd] ******************************************************************************************************* changed: [192.168.0.10] PLAY RECAP *************************************************************************************************************** 192.168.0.10 : ok=3 changed=3 unreachable=0 failed=0 [root@test ~]#提示:以上playbook的主要内容是把本机的yum源复制到远端服务器上,然后通过yum去安装httpd包,最后启动httpd;在写好playbook后,我们用ansible-playbook -C install_httpd.yml 命令对我们写的playbook进行了测试,没有问题,接下来我们使用ansible-playbook来安装httpd
[root@test ~]# ansible-playbook install_httpd.yml PLAY [websers] *********************************************************************************************************** TASK [copy epel file] **************************************************************************************************** changed: [192.168.0.10] TASK [install httpd] ***************************************************************************************************** changed: [192.168.0.10] TASK [start httpd] ******************************************************************************************************* changed: [192.168.0.10] PLAY RECAP *************************************************************************************************************** 192.168.0.10 : ok=3 changed=3 unreachable=0 failed=0 [root@test ~]#提示:从ansible-playbook 对playbook的执行状态来看是成功了,接下来我们直接使用浏览器来访问192.168.0.10,看看httpd是否已经能够正常访问,如果能正常访问说明httpd已经安装好了
提示:可以看到我们用浏览器是直接可以访问到192.168.0.10的测试页面,说明httpd在192.168.0.10上安装成功
2、建立httpd服务器,要求提供两个基于名称的虚拟主机:
(1)www.X.com,页面文件目录为/web/vhosts/x;错误日志为/var/log/httpd/x.err,访问日志为/var/log/httpd/x.access
新建虚拟主机www.X.com的配置文件
[root@test ~]# cat x_com.conf <VirtualHost *:80> ServerName www.X.com DocumentRoot "/web/vhosts/x" <Directory "/web/vhosts/x"> Options None AllowOverride None Require all granted </Directory> ErrorLog "logs/x.err" CustomLog "logs/x.access" combined </VirtualHost> [root@test ~]#提示:我们在ansible主机上把配置文件建立好,待会直接用ansible把文件推送到对应主机的对应目录下即可使用
(2)www.Y.com,页面文件目录为/web/vhosts/y;错误日志为/var/log/httpd/www2.err,访问日志为/var/log/httpd/y.access
新建虚拟主机www.Y.com的配置文件
[root@test ~]# cat y_com.conf <VirtualHost *:80> ServerName www.Y.com DocumentRoot "/web/vhosts/y" <Directory "/web/vhosts/y"> Options None AllowOverride None Require all granted </Directory> ErrorLog "logs/www2.err" CustomLog "logs/y.access" combined </VirtualHost> [root@test ~]#(3)为两个虚拟主机建立各自的主页文件index.html,内容分别为其对应的主机名
[root@test ~]# cat x_index.html <h1> www.X.com</h1> [root@test ~]# cat y_index.html <h1> www.Y.com</h1> [root@test ~]#提示:以上文件在ansible主机上准备好了以后,我们接下来写一个playbook把对应的文件直接推送到远端主机即可
[root@test ~]# cat set_virtualhost_conf_file.yml --- - hosts: websers remote_user: root tasks: - name: mkdir virtualhost documentroot directory shell: mkdir -p /web/vhosts/{x,y} - name: copy x_com.conf to remotehost copy: src=/root/x_com.conf dest=/etc/httpd/conf.d/x_com.conf - name: copy x_com index file copy: src=/root/x_index.html dest=/web/vhosts/x/index.html - name: copy y_com.conf to remotehost copy: src=/root/y_com.conf dest=/etc/httpd/conf.d/y_com.conf - name: copy y_com index file copy: src=/root/y_index.html dest=/web/vhosts/y/index.html [root@test ~]#提示:以上文件的内容主要把我们建立好的配置文件推送到对应主机的对应目录,接下来我们来检查下我们写的playbook是否语法问题
[root@test ~]# ansible-playbook -C set_virtualhost_conf_file.yml PLAY [websers] *********************************************************************************************************** TASK [mkdir virtualhost documentroot directory] ************************************************************************** skipping: [192.168.0.10] TASK [copy x_com.conf to remotehost] ************************************************************************************* changed: [192.168.0.10] TASK [copy x_com index file] ********************************************************************************************* changed: [192.168.0.10] TASK [copy y_com.conf to remotehost] ************************************************************************************* changed: [192.168.0.10] TASK [copy y_com index file] ********************************************************************************************* changed: [192.168.0.10] PLAY RECAP *************************************************************************************************************** 192.168.0.10 : ok=4 changed=4 unreachable=0 failed=0 [root@test ~]#提示:测试playbook没有问题,接下来我们来运行playbook,把对应的文件推送到httpd服务器上,然后在服务器上检查我们写的配置文件是否正确
[root@test ~]# ansible-playbook set_virtualhost_conf_file.yml PLAY [websers] *********************************************************************************************************** TASK [mkdir virtualhost documentroot directory] ************************************************************************** [WARNING]: Consider using file module with state=directory rather than running mkdir changed: [192.168.0.10] TASK [copy x_com.conf to remotehost] ************************************************************************************* changed: [192.168.0.10] TASK [copy x_com index file] ********************************************************************************************* changed: [192.168.0.10] TASK [copy y_com.conf to remotehost] ************************************************************************************* changed: [192.168.0.10] TASK [copy y_com index file] ********************************************************************************************* changed: [192.168.0.10] PLAY RECAP *************************************************************************************************************** 192.168.0.10 : ok=5 changed=5 unreachable=0 failed=0 [root@test ~]#提示:从上面的返回状态看,都是成功的,只是第一个任务提示我们使用file模块去创建目录会更好一些,接下来我们使用ansible的shell模块去检查远端服务器上的配置文件的语法是否正确
[root@test ~]# ansible websers -m shell -a 'httpd -t' 192.168.0.10 | SUCCESS | rc=0 AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::20c:29ff:fef2:820c. Set the 'ServerName' directive globally to suppress this message Syntax OK [root@test ~]#提示:我们利用ansible在远程主机上检查httpd的配置文件语法是没有问题,它提示我们没有servername,这个提示可以不用管它,如果你觉得非要处理一下也可以,在httpd的主配置文件中找到ServerName 把对应的servername配置上就好了;接下来我们重启httpd,然后在客户机上访问两个虚拟主机
[root@test ~]# ansible websers -m shell -a 'systemctl restart httpd' 192.168.0.10 | SUCCESS | rc=0 [root@test ~]#在客户端上更改/etc/hosts文件,让其访问www.X.com 和www.Y.com 能够解析到远程主机
[root@test ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.0.10 www.X.com www.Y.com [root@test ~]#测试:利用curl 分别访问两个虚拟主机,看看对应的主页文件内容是否不同
[root@test ~]# curl http://www.X.com/index.html <h1> www.X.com</h1> [root@test ~]# curl http://www.Y.com/index.html <h1> www.Y.com</h1> [root@test ~]#提示:我们利用curl对其各自虚拟主机的主页文件访问,都能看到对应的主页文件内容,当然你也可以更改Windows的hosts文件,把对应的解析内容写进去,然后通过Windows浏览器也是可以的,如下所示:
提示:在windows上找到hosts文件,然后把对应的记录添加进去,如下
提示:接下来我们利用Windows的浏览器来访问下两个虚拟主机
接下我们在看看httpd服务器的日志是否都已生成
[root@test ~]# ansible websers -m shell -a 'ls -l /var/log/httpd' 192.168.0.10 | SUCCESS | rc=0 总用量 16 -rw-r--r--. 1 root root 2668 1月 27 06:30 access_log -rw-r--r--. 1 root root 2940 1月 27 07:34 error_log -rw-r--r--. 1 root root 0 1月 27 07:38 www2.err -rw-r--r--. 1 root root 500 1月 27 07:52 x.access -rw-r--r--. 1 root root 0 1月 27 07:38 x.err -rw-r--r--. 1 root root 500 1月 27 07:52 y.access [root@test ~]# ansible websers -m shell -a 'cat /var/log/httpd/x.access' 192.168.0.10 | SUCCESS | rc=0 192.168.0.99 - - [27/Jan/2020:07:39:15 -0500] "GET /index.html HTTP/1.1" 200 20 "-" "curl/7.29.0" 192.168.0.232 - - [27/Jan/2020:07:52:31 -0500] "GET / HTTP/1.1" 200 20 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" 192.168.0.232 - - [27/Jan/2020:07:52:31 -0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://www.x.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" [root@test ~]# ansible websers -m shell -a 'cat /var/log/httpd/y.access' 192.168.0.10 | SUCCESS | rc=0 192.168.0.99 - - [27/Jan/2020:07:39:19 -0500] "GET /index.html HTTP/1.1" 200 20 "-" "curl/7.29.0" 192.168.0.232 - - [27/Jan/2020:07:52:48 -0500] "GET / HTTP/1.1" 200 20 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" 192.168.0.232 - - [27/Jan/2020:07:52:48 -0500] "GET /favicon.ico HTTP/1.1" 404 209 "http://www.y.com/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36" [root@test ~]#提示:可以看到httpd服务器上都已经生成了对应名称的日志文件。
总结
以上所述是小编给大家介绍的Linux系统实现ansible自动化安装配置httpd的方法,希望对大家有所帮助!
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。