由于host01主机环境不纯净,决定弃用host01主机,编写剧本时要确保环境纯洁
(只做实验用途一台控制)
[root@ansible-server ~]# vim /etc/ansible/hosts
[webserver]
host02
1、在ansible端下载nginx源码包、编写index.php,以及lamp.yml文件
[root@ansible-server ~]# mkdir playbook
[root@ansible-server ~]# cd playbook/
[root@ansible-server playbook]# vim index.php
[root@ansible-server playbook]# cat index.php
<?php
phpinfo();
?>
[root@ansible-server playbook]#
[root@ansible-server playbook]# wget -c https://nginx.org/download/nginx-1.26.0.tar.gz
--2024-05-08 14:35:02-- https://nginx.org/download/nginx-1.26.0.tar.gz
正在解析主机 nginx.org (nginx.org)... 3.125.197.172, 52.58.199.22, 2a05:d014:5c0:2600::6, ...
正在连接 nginx.org (nginx.org)|3.125.197.172|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 206 Partial Content
长度:1244118 (1.2M),剩余 294449 (288K) [application/octet-stream]
正在保存至: “nginx-1.26.0.tar.gz”
nginx-1.26.0.tar.gz 100%[+++++++++++++++++++++++++++++++++++++++++=============>] 1.19M 18.2KB/s 用时 16s
2024-05-08 14:35:19 (18.2 KB/s) - 已保存 “nginx-1.26.0.tar.gz” [1244118/1244118])
[root@ansible-server playbook]# ls
index.html index.php nginx-1.26.0.tar.gz
[root@ansible-server playbook]#
#解压nginx,并拷贝一份配置文件到playbook目录下
[root@ansible-server playbook]# tar -xvf nginx-1.26.0.tar.gz -C /usr/local/
[root@ansible-server playbook]# cp /usr/local/nginx-1.26.0/conf/nginx.conf ./
[root@ansible-server playbook]#
修改nginx.conf目录让其支持php页面
[root@ansible-server playbook]# vim nginx.conf
43 location / {
44 root html;
45 index index.php index.html index.htm;
46 }
65 location ~ \.php$ {
66 root /var/www/html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
70 include fastcgi_params;
71 }
安装php,复制一份配置文件,需要修改其配置文件
[root@ansible-server ~]# yum -y install php*
[root@ansible-server ~]# cp /etc/php-fpm.d/www.conf ./playbook/
[root@ansible-server ~]# cd ./playbook/
[root@ansible-server playbook]# vim www.conf
24 user = nginx //改为nginx
25 ; RPM: Keep a group allowed to write in log dir.
26 group = nginx //改为nginx
38 listen = 127.0.0.1:9000 //listen改为本地IP加9000端口
编写lnmp.yml文件
[root@ansible-server playbook]# vim lnmp.yml
[root@ansible-server playbook]# cat lnmp.yml
# 定义要应用 playbook 的主机组,这里为 'webserver'
- hosts: webserver
tasks:
# 安装编译 nginx 和其他依赖所需的软件包
- name: "安装依赖包环境"
yum:
name: "{{ item }}" # 使用变量来迭代安装多个软件包
state: installed # 确保软件包处于已安装状态
with_items:
- gcc # C 编译器
- make # 编译工具
- gcc-c++ # C++ 编译器
- pcre # Perl Compatible Regular Expressions
- pcre-devel # PCRE 开发库
- zlib # 压缩和解压缩库
- zlib-devel # Zlib 开发库
- openssl # OpenSSL 加密库
- openssl-devel # OpenSSL 开发库
- php # PHP 解释器
- php-gd # PHP GD 库
- php-mysqlnd # PHP MySQL Native Driver
- php-fpm # PHP FastCGI 进程管理器
- mariadb # MariaDB 客户端
- mariadb-server # MariaDB 服务器
# 从本地文件系统中传输并解压 nginx 安装包到远程服务器
- name: "传输并解压安装包"
unarchive:
src: /root/playbook/nginx-1.26.0.tar.gz # 本地路径下的 nginx 安装包
dest: /usr/local # 解压到的目标目录
# 创建一个名为 'nginx' 的系统用户,不使用 shell 且不创建主目录
- name: "创建nginx用户"
user:
name: nginx # 用户名
state: present # 确保用户存在
shell: /sbin/nologin # 不为用户分配 shell
create_home: no # 不为用户创建主目录
# 编译并安装 nginx
- name: "编译安装nginx"
shell: | # 使用 | 来表示多行 shell 命令
cd /usr/local/nginx-1.26.0 && # 进入 nginx 解压后的目录
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_ssl_module && # 配置安装选项
make && # 编译
make install # 安装
# 分发 nginx 的配置文件到远程服务器
- name: "分发nginx配置文件"
copy:
src: /root/playbook/nginx.conf # 本地配置文件路径
dest: /usr/local/nginx/conf/nginx.conf # 远程服务器上的目标路径
# 分发主页面文件到远程服务器的 web 根目录
- name: "分发主页面"
copy:
src: /root/playbook/index.php # 本地主页面文件路径
dest: /var/www/html/index.php # 远程服务器上的目标路径
# 分发php文件
- name: "php文件"
copy:
src: www.conf
dest: /etc/php-fpm.d/www.conf
# 启动 nginx 服务
- name: "启动nginx"
shell: /usr/local/nginx/sbin/nginx # 使用 nginx 的可执行文件启动服务
# 重启 MariaDB 服务
- name: "启动MySQL"
service:
name: mariadb # 服务名
state: restarted # 重启服务
# 重启 php-fpm 服务
- name: "启动php-fpm"
service:
name: php-fpm # 服务名
state: restarted # 重启服务
# 关闭防火墙和 SELinux
- name: "关闭防火墙和SELinux"
block:
- shell: systemctl stop firewalld # 停止防火墙服务
ignore_errors: yes # 如果防火墙没有运行,忽略错误
- name: "尝试将SELinux设置为宽容模式"
shell: setenforce 0
ignore_errors: yes # 如果SELinux已经被禁用,忽略错误
[root@ansible-server playbook]# ansible-playbook lnmp.yml --syntax-check
playbook: lnmp.yml
#检查语法没有问题运行
[root@ansible-server playbook]#
开始执行剧本文件(中途如出现安装错误,检查本地仓库)
[root@ansible-server playbook]# ansible-playbook lnmp.yml
PLAY [webserver] *****************************************************************************************************************************
TASK [Gathering Facts] ***********************************************************************************************************************
ok: [host02]
TASK [安装依赖包环境] ************************************************************************************************************************
ok: [host02] => (item=gcc)
ok: [host02] => (item=make)
ok: [host02] => (item=gcc-c++)
ok: [host02] => (item=pcre)
ok: [host02] => (item=pcre-devel)
ok: [host02] => (item=zlib)
ok: [host02] => (item=zlib-devel)
ok: [host02] => (item=openssl)
ok: [host02] => (item=openssl-devel)
ok: [host02] => (item=php)
ok: [host02] => (item=php-gd)
ok: [host02] => (item=php-mysqlnd)
ok: [host02] => (item=php-fpm)
ok: [host02] => (item=mariadb)
ok: [host02] => (item=mariadb-server)
TASK [传输并解压安装包] **********************************************************************************************************************
ok: [host02]
TASK [创建nginx用户] *************************************************************************************************************************
ok: [host02]
TASK [编译安装nginx] *************************************************************************************************************************
changed: [host02]
TASK [分发nginx配置文件] *********************************************************************************************************************
ok: [host02]
TASK [分发主页面] ****************************************************************************************************************************
ok: [host02]
TASK [php文件] *******************************************************************************************************************************
ok: [host02]
TASK [启动nginx] *****************************************************************************************************************************
changed: [host02]
TASK [启动MySQL] *****************************************************************************************************************************
changed: [host02]
TASK [启动php-fpm] ***************************************************************************************************************************
changed: [host02]
TASK [shell] *********************************************************************************************************************************
changed: [host02]
TASK [尝试将SELinux设置为宽容模式] ***********************************************************************************************************
fatal: [host02]: FAILED! => {"changed": true, "cmd": "setenforce 0", "delta": "0:00:00.004292", "end": "2024-05-08 18:12:11.728180", "msg": "non-zero return code", "rc": 1, "start": "2024-05-08 18:12:11.723888", "stderr": "setenforce: SELinux is disabled", "stderr_lines": ["setenforce: SELinux is disabled"], "stdout": "", "stdout_lines": []}
...ignoring
PLAY RECAP ***********************************************************************************************************************************
host02 : ok=13 changed=6 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
[root@ansible-server playbook]#
打开浏览器访问测试