利用ansible playbook部署LNMP架构

接:ansible批量运维管理-CSDN博客

由于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]# 

 打开浏览器访问测试

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值