• Ansible实战—使用playbook部署lamp


    Ansible实战—使用playbook部署lamp

    本次环境说明:

    系统平台 主机的IP地址 需要安装的服务
    redhat8 192.168.110.10 ansible
    redhat8 192.168.110.20 httpd
    redhat8 192.168.110.30 mysql
    redhat8 192.168.110.40 php

    准备工作

    给Ansible主控机配置yum源(阿里云官方镜像网站

    //配置centos源
    [root@ansible ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo
    [root@ansible ~]# sed -i -e '/mirrors.cloud.aliyuncs.com/d' -e '/mirrors.aliyuncs.com/d' /etc/yum.repos.d/CentOS-Base.repo
    [root@ansible ~]# sed -i 's|$releasever|8|' /etc/yum.repos.d/CentOS-Base.repo 
    
    //配置epel源
    [root@ansible ~]# yum install -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
    [root@ansible ~]# sed -i 's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
    [root@ansible ~]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*
    [root@ansible ~]# sed -i 's|$releasever|8|' /etc/yum.repos.d/epel*
    
    //清理yum缓存,建立缓存
    [root@ansible ~]# yum clean all
    [root@ansible ~]# yum makecach
    

    在Ansible主控机上设置三台受控机

    //映射主机名
    [root@ansible ~]# vim /etc/hosts
    
    127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
    ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
    192.168.110.10 ansible
    192.168.110.20 httpd
    192.168.110.30 mysql
    192.168.110.40 php
    
    //修改清单位置
    [root@ansible ~]# vim /etc/ansible/ansible.cfg 
    
    # some basic default values...
    
    inventory      = ./inventory
    
    //定义清单
    [root@ansible ~]# vim /etc/ansible/inventory 
    
    [web_group]
    httpd
    
    [databases_group]
    mysql
    
    [app_group]
    php
    

    生成密钥,给三台受控机设置免密登录

    [root@ansible ~]# ssh-keygen -t rsa     //生成密钥,直接回车即可
    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:OFB9SUGgUTf2KbgfrEnnDe5vDh0OE2AmqeOjC7UMsqw root@ansible
    The key's randomart image is:
    +---[RSA 3072]----+
    |      ++*+Bo     |
    |     ..*.=oo .   |
    |    ... ..o o    |
    |    o. . o o     |
    |o .. .o S B .    |
    |o= .o  o B O .   |
    |o.o. .  o = +    |
    |...      . ..    |
    |E ..      .+o    |
    +----[SHA256]-----+
    
    //设置主机免密登录
    [root@ansible ~]# ssh-copy-id root@httpd   //httpd主机
    [root@ansible ~]# ssh-copy-id root@mysql	//mysql主机
    [root@ansible ~]# ssh-copy-id root@php	//php主机
    

    测试能否ping通三台受控机

    [root@ansible ~]# ansible all -m ping
    mysql | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": false,
        "ping": "pong"
    }
    httpd | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": false,
        "ping": "pong"
    }
    php | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": false,
        "ping": "pong"
    }
    

    创建本次项目的目录

    //创建project文件夹
    [root@ansible ~]# mkdir /project
    [root@ansible ~]# cd /project/
    [root@ansible project]# ls
    [root@ansible project]# mkdir -p modules/yum/files
    [root@ansible project]# mkdir -p modules/webs/apache modules/databases/mysql modules/apps/php
    
    //把配置清单文件拷贝到当前目录,使project目录可以单独使用ansible命令
    [root@ansible project]# cp /etc/ansible/ansible.cfg .
    [root@ansible project]# cp /etc/ansible/inventory .
    
    //可以ping通
    [root@ansible project]# ansible all -m ping
    mysql | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": false,
        "ping": "pong"
    }
    httpd | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": false,
        "ping": "pong"
    }
    php | SUCCESS => {
        "ansible_facts": {
            "discovered_interpreter_python": "/usr/libexec/platform-python"
        },
        "changed": false,
        "ping": "pong"
    }
    

    项目结构

    [root@ansible project]# tree .
    .
    ├── ansible.cfg
    ├── inventory
    ├── lamp
    │   └── lamp.yml
    └── modules
        ├── apps
        │   └── php
        │       ├── php_install.yml
        │       └── vars
        │           └── var.yml
        ├── databases
        │   └── mysql
        │       ├── files
        │       │   └── mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
        │       ├── mysql_install.yml
        │       ├── templates
        │       │   ├── my.cnf.j2
        │       │   └── mysqld.service.j2
        │       └── vars
        │           └── var.yml
        ├── webs
        │   └── apache
        │       ├── files
        │       │   ├── apr-1.7.0.tar.gz
        │       │   ├── apr-util-1.6.1.tar.gz
        │       │   └── httpd-2.4.46.tar.bz2
        │       ├── httpd_install.yml
        │       ├── scripts
        │       │   └── install.sh
        │       ├── templates
        │       │   ├── httpd.conf.j2
        │       │   └── httpd.service.j2
        │       └── vars
        │           └── var.yml
        └── yum
            ├── files
            │   ├── Centos6-base.repo
            │   ├── Centos7-base.repo
            │   ├── Centos8-base.repo
            │   ├── epel-6.repo
            │   ├── epel-7.repo
            │   └── epel-8.repo
            └── main.yml
    
    

    开始部署

    给三台受控主机配置yum源

    本次使用的是阿里云的网络源

    //下载centos源
    [root@ansible files]# wget https://mirrors.aliyun.com/repo/Centos-6.repo
    [root@ansible files]# wget https://mirrors.aliyun.com/repo/Centos-7.repo
    [root@ansible files]# wget https://mirrors.aliyun.com/repo/Centos-8.repo
    
    //下载epel源
    [root@ansible files]# wget epel-6.repo http://mirrors.aliyun.com/repo/epel-6.repo
    [root@ansible files]# wget epel-7.repo http://mirrors.aliyun.com/repo/epel-7.repo
    [root@ansible files]# wget epel-release-latest-8.noarch.rpm https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
    
    //查看下载好的源
    [root@ansible files]# ls
    Centos-6.repo  Centos-8.repo  epel-7.repo
    Centos-7.repo  epel-6.repo    epel-release-latest-8.noarch.rpm
    
    //安装centos8的epel的rpm包
    [root@ansible files]# rpm -ivh epel-release-latest-8.noarch.rpm 
    Verifying...                          ################################# [100%]
    Preparing...                          ################################# [100%]
    	package epel-release-8-10.el8.noarch is already installed   //因为本机是安装了centos8的epel源
    
    //拷贝到当前目录
    [root@ansible files]# cp /etc/yum.repos.d/epel.repo .
    
    //删除centos8的epel源
    [root@ansible files]# rm -f epel-release-latest-8.noarch.rpm 
    
    //改名为epel-8.repo
    [root@ansible files]# mv epel.repo epel-8.repo
    
    //查看下载好的源
    [root@ansible files]# ls
    Centos-6.repo  Centos-7.repo  Centos-8.repo  epel-6.repo  epel-7.repo  epel-8.repo
    

    配置centos源

    //配置centos源
    [root@ansible files]# sed -i 's|$releasever|6|' Centos-6.repo 
    [root@ansible files]# sed -i 's|$releasever|7|' Centos-7.repo 
    [root@ansible files]# sed -i 's|$releasever|8|' Centos-8.repo 
    [root@ansible files]# ls
    Centos-6.repo  Centos-7.repo  Centos-8.repo  epel-6.repo  epel-7.repo  epel-8.repo
    [root@ansible files]# mv Centos-6.repo Centos6-base.repo
    [root@ansible files]# mv Centos-7.repo Centos7-base.repo
    [root@ansible files]# mv Centos-8.repo Centos8-base.repo
    

    编写yum的playbook

    [root@ansible modules]# vim yum/main.yml 
    ---
    - hosts: all
      tasks:
        - name: CentOS 7_base
          yum_repository:
            name: base
            baseurl: https://mirrors.aliyun.com/centos/7/os/x86_64/
            enabled: yes
            gpgcheck: no
            mode: 0644
            file: base
            description: base
            state: present
          when:
            - ansible_facts["distribution"] == "CentOS"
            - ansible_facts["distribution_major_version"] == "7"
    
        - name: CentOS 7_epel
          yum_repository:
            name: epel
            description: epel
            file: epel
            baseurl: https://mirrors.aliyun.com/epel/7/x86_64
            gpgcheck: no
            mode: 0644
            state: present
          when:
            - ansible_facts["distribution"] == "CentOS"
            - ansible_facts["distribution_major_version"] == "7"
    
        - name: yum_RedHat 8 yum_CentOS 8
          loop:
            - AppStream
            - BaseOS
          yum_repository:
            name: "{{ item }}"
            description: "{{ item }}"
            file: "{{ item }}"
            baseurl: https://mirrors.aliyun.com/centos/8/{{ item }}/x86_64/os/
            gpgcheck: no
            mode: 0644
            state: present
          when: >
            ( ansible_facts["distribution"] == "RedHat" and
              ansible_facts["distribution_major_version"] == "8" )
             or
            ( ansible_facts["distribution"] == "CentOS" and
              ansible_facts["distribution_major_version"] == "8" )
    
        - name: epel_RedHat 8 epel_CentOS 8
          yum_repository:
            name: epel
            description: epel
            file: epel
            baseurl: https://mirrors.aliyun.com/epel/8/Everything/x86_64/
            gpgcheck: no
            mode: 0644
            state: present
          when: >
            ( ansible_facts["distribution"] == "RedHat" and
              ansible_facts["distribution_major_version"] == "8" )
             or
            ( ansible_facts["distribution"] == "CentOS" and
              ansible_facts["distribution_major_version"] == "8" )
    
        - name: selinux
          lineinfile:
            path: /etc/selinux/config
            regexp: '^SELINUX='
            line: SELINUX=disabled
    
        - name: set selinux
          command: setenforce 0
    
    

    安装apache

    下载需要的软件包

    //当前目录的位置
    [root@ansible files]# pwd
    /project/modules/webs/apache/files
    
    //开始下载,可以使用wget下载,也可以使用xftp传进来
    [root@ansible files]# wget https://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.7.0.tar.gz
    [root@ansible files]# wget https://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-util-1.6.1.tar.gz
    [root@ansible files]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/httpd/httpd-2.4.46.tar.bz2
    
    //查看
    [root@ansible files]# ls
    apr-1.7.0.tar.gz  apr-util-1.6.1.tar.gz  httpd-2.4.46.tar.bz2
    

    配置变量的yml文件

    //创建vars目录
    [root@ansible apache]# mkdir vars
    
    //编写var.yml
    [root@ansible apache]# vim vars/var.yml
    depend_pkg:
       - "@Development Tools"
       - openssl-devel
       - pcre-devel
       - expat-devel
       - libxml2-devel
       - libtool
       - gcc
       - gcc-c++
       - bzip2
       - make
    

    编写安装脚本

    //创建存放脚本的目录
    [root@ansible apache]# mkdir scripts
    
    //编写安装脚本的批处理
    [root@ansible apache]# vim scripts/install.sh 
    #!/bin/bash
    
    if [ ! -d /usr/local/apache ];then
    rm -rf /usr/local/apr*
    
    # uzip 
    cd /usr/src
    tar xf apr-1.7.0.tar.gz
    tar xf apr-util-1.6.1.tar.gz
    tar xf httpd-2.4.46.tar.bz2
    cd apr-1.7.0
    sed -i '/$RM "$cfgfile"/d' configure
    
    # install apr
    ./configure --prefix=/usr/local/apr && make && make install && 
    cd ../apr-util-1.6.1
    
    # install apr-util
    ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && 
    make && make install && 
    cd ../httpd-2.4.46
    
    # install httpd
    ./configure --prefix=/usr/local/apache 
            --sysconfdir=/etc/httpd24 
            --enable-so 
            --enable-ssl 
            --enable-cgi 
            --enable-rewrite 
            --with-zlib 
            --with-pcre 
            --with-apr=/usr/local/apr 
            --with-apr-util=/usr/local/apr-util/ 
            --enable-modules=most 
            --enable-mpms-shared=all 
            --with-mpm=prefork && 
            make && make install
    
    # echo path
    echo 'export PATH=/usr/local/apache/bin:$PATH' > /etc/profile.d/apache.sh
    
    cd /usr/src
    rm -rf apr-1.7.0 apr-util-1.6.1 httpd-2.4.46
    fi
    

    编辑httpd.service.j2模板文件

    [root@ansible apache]# vim templates/httpd.service.j2 
    
    [Unit]
    Description=Start httpd
    
    [Service]
    Type=forking
    ExecStart=/usr/local/apache/bin/apachectl
    ExecReload=/usr/local/apache/bin/apachectl -s reload
    ExecStop=/usr/local/apache/apachectl -s stop
    
    [Install]
    WantedBy=multi-user.target
    

    编写apache的playbook

    [root@ansible apache]# vim httpd_install.yml 
    ---
    - hosts: httpd
      vars_files:
        - vars/var.yml
      tasks:
        - name: install depend on apache
          yum:
            name: "{{ depend_pkg }}"
            state: present
    
        - name: create user apache
          user:
            name: apache
            shell: /sbin/nologin
            create_home: false
            system: yes
            state: present
    
        - name: download packages
          copy:
            src: files/
            dest: /usr/src
    
        - name: install apache
          script: scripts/install.sh
    
        - name: start the service
          template:
            src: templates/httpd.service.j2
            dest: /usr/lib/systemd/system/httpd.service
    
        - name: reload daemon for httpd
          shell: systemctl daemon-reload 
    

    编辑httpd.conf.j2模板文件

    [root@ansible apache]# vim templates/httpd.conf.j2
    //搜索AddType
        AddType application/x-compress .Z
        AddType application/x-gzip .gz .tgz
        AddType application/x-httpd-php .php           //添加此行
        AddType application/x-httpd-php-source .phps       //添加此行
      
    //搜索proxy.so
    #LoadModule remoteip_module modules/mod_remoteip.so
    LoadModule proxy_module modules/mod_proxy.so                  //取消注释
    #LoadModule proxy_connect_module modules/mod_proxy_connect.so
    #LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
    #LoadModule proxy_http_module modules/mod_proxy_http.so
    LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so      //取消注释
    
    //搜索index.html
    DirectoryIndex index.php  index.html #添加index.php
    
    //在最后一行加上如下配置
    <VirtualHost *:80>
        DocumentRoot "/usr/local/apache/htdocs/"
        ServerName leidazhuang.com
        ProxyRequests Off
        ProxyPassMatch ^/(.*.php)$ fcgi://192.168.110.40:9000/var/www/html/$1
        <Directory "/usr/local/apache/htdocs/">
            Options none
            AllowOverride none
            Require all granted
        </Directory>
    </VirtualHost>
    

    安装mysql

    下载需要的包

    //当前目录的位置
    [root@ansible files]# pwd
    /project/modules/databases/mysql/files
    
    //下载包
    [root@ansible files]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
    
    //查看一下
    [root@ansible files]# ls
    mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
    

    配置变量的yml文件

    //创建vars目录
    [root@ansible mysql]# mkdir vars
    
    //编写var.yml文件
    [root@ansible mysql]# vim vars/var.yml 
    
    basedir: /usr/local
    datadir: /opt/data
    depend_pkg:
      - ncurses-compat-libs
      - ncurses-devel
      - openssl-devel
      - openssl
      - cmake
      - mariadb-devel
      - ncurses-compat-libs
    

    编辑my.cnf.j2模板文件

    [root@ansible mysql]# vim templates/my.cnf.j2 
    
    [mysqld]
    basedir = {{ basedir }}/mysql
    datadir = {{ datadir }}
    socket = /tmp/mysql.sock
    port = 3306
    pid-file = {{ datadir }}/mysql.pid
    user = mysql
    skip-name-resolve
    

    编辑mysqld.service.j2模板文件

    [root@ansible mysql]# vim templates/mysqld.service.j2 
    
    [Unit]
    Description=MySQL Server
    Documentation=man:mysqld(8)
    Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
    After=network.target
    After=syslog.target
    
    [Install]
    WantedBy=multi-user.target
    [Service]
    User=mysql
    Group=mysql
    Type=forking
    PIDFile={{ datadir }}/mysqld.pid
    TimeoutSec=0
    PermissionsStartOnly=true
    ExecStart={{ basedir }}/mysql/bin/mysqld --daemonize --pid-file={{ datadir }}/mysqld.pid $MYSQLD_OPTS
    LimitNOFILE = 5000
    Restart=on-failure
    RestartPreventExitStatus=1
    PrivateTmp=false
    

    编写mysql的playbook

    [root@ansible mysql]# vim mysql_install.yml 
    
    ---
    - hosts: mysql
      vars_files:
        - vars/var.yml
      tasks:
        - name: install depend on mysql
          yum:
            name: "{{ depend_pkg }}"
            state: present
    
        - name: create user mysql
          user:
            name: mysql
            system: yes
            create_home: false
            shell: /sbin/nologin
            state: present
    
        - name: unzip package
          unarchive:
            src: files/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
            dest: '{{ basedir }}/'
            owner: mysql
            group: mysql
    
        - name: create soft link
          file:
            src: '{{ basedir }}/mysql-5.7.31-linux-glibc2.12-x86_64'
            dest: '{{ basedir }}/mysql'
            owner: mysql
            group: mysql
            state: link
    
        - name: create datadir
          file:
            path: '{{ datadir }}'
            owner: mysql
            group: mysql
            state: directory
    
        - name: initialize mysql
          shell: '{{ basedir }}/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir={{ datadir }}'
          ignore_errors: yes
    
        - name: config for mysql
          template:
            src: templates/my.cnf.j2
            dest: /etc/my.cnf
    
        - name: start the service
          template:
            src: templates/mysqld.service.j2
            dest: /usr/lib/systemd/system/mysqld.service
    
        - name: reload daemon for mysql
          shell: systemctl daemon-reload
    

    安装php

    配置变量的配置文件

    [root@ansible php]# vim vars/var.yml 
    
    packages:
      - libxml2
      - libxml2-devel
      - openssl
      - openssl-devel
      - bzip2
      - bzip2-devel
      - libcurl
      - libcurl-devel
      - libicu-devel
      - libjpeg
      - libjpeg-devel
      - libpng
      - libpng-devel
      - openldap-devel
      - pcre-devel
      - freetype
      - freetype-devel
      - gmp
      - gmp-devel
      - libmcrypt
      - libmcrypt-devel
      - readline
      - readline-devel
      - libxslt
      - libxslt-devel
      - mhash
      - mhash-devel
      - php-mysqlnd
      - php-*
    

    编写php的playbook

    [root@ansible php]# vim php_install.yml 
    
    ---
    - hosts: php
      vars_files:
        - vars/var.yml
      tasks:
          - name: install package
            dnf:
              name: '{{ packages }}'
              state: present
    
          - name: set conf
            lineinfile:
              path: /etc/php-fpm.d/www.conf
              regexp: '^listen = /run/php-fpm/www.sock'
              line: 'listen = 0.0.0.0:9000'
              state: present
    

    注意:以上都是通用型配置,下面我们要单独部署lamp项目

    部署lamp项目

    编写lamp项目的架构和playbook

    ---
    - name: yum part
      import_playbook: ../modules/yum/main.yml
    
    - name: httpd part
      import_playbook: ../modules/webs/apache/httpd_install.yml
    
    - name: mysql part
      import_playbook: ../modules/databases/mysql/mysql_install.yml
    
    - name: php part
      import_playbook: ../modules/apps/php/php_install.yml
    
    - hosts: httpd
      vars_files:
        - ../modules/webs/apache/vars/var.yml
      tasks:
        - name: httpd config file
          template:
            src: ../modules/webs/apache/templates/httpd.conf.j2
            dest: /etc/httpd24/httpd.conf
    
        - name: start httpd
          service:
            name: httpd
            enabled: yes
            state: started
    
    - hosts: mysql
      vars_files:
        - ../modules/databases/mysql/vars/var.yml
      tasks:
        - name: start mysql
          service:
            name: mysqld
            enabled: yes
            state: started
    
    - hosts: php
      tasks:
        - name: index.php
          file:
            path: /var/www/html/index.php
            owner: apache
            group: apache
            state: touch
    
        - name: test index
          lineinfile:
            path: /var/www/html/index.php
            line: |
                <?php
                phpinfo();
                ?>
            state: present
    
        - name: allow access to IP
          lineinfile:
            path: /etc/php-fpm.d/www.conf
            regexp: '^listen.allowed_clients = 127.0.0.1'
            line: listen.allowed_clients = 192.168.110.20
    
        - name: start php
          service:
            name: php-fpm
            state: started
            enabled: yes
    
    

    运行lamp的剧本文件

    [root@ansible project]# ansible-playbook lamp/lamp.yml 
    
    PLAY [all] *************************************************************************
    
    TASK [Gathering Facts] *************************************************************
    ok: [php]
    ok: [httpd]
    ok: [mysql]
    
    TASK [CentOS 7_base] ***************************************************************
    skipping: [httpd]
    skipping: [mysql]
    skipping: [php]
    
    TASK [CentOS 7_epel] ***************************************************************
    skipping: [httpd]
    skipping: [mysql]
    skipping: [php]
    
    TASK [yum_RedHat 8 yum_CentOS 8] ***************************************************
    changed: [mysql] => (item=AppStream)
    changed: [httpd] => (item=AppStream)
    changed: [php] => (item=AppStream)
    changed: [mysql] => (item=BaseOS)
    changed: [php] => (item=BaseOS)
    changed: [httpd] => (item=BaseOS)
    
    TASK [epel_RedHat 8 epel_CentOS 8] *************************************************
    changed: [httpd]
    changed: [php]
    changed: [mysql]
    
    TASK [stop firewalld] **************************************************************
    changed: [php]
    changed: [mysql]
    changed: [httpd]
    
    TASK [selinux] *********************************************************************
    changed: [php]
    changed: [mysql]
    changed: [httpd]
    
    TASK [set selinux] *****************************************************************
    changed: [mysql]
    changed: [httpd]
    changed: [php]
    
    PLAY [httpd] ***********************************************************************
    
    TASK [Gathering Facts] *************************************************************
    ok: [httpd]
    
    TASK [install depend on apache] ****************************************************
    changed: [httpd]
    
    TASK [create user apache] **********************************************************
    changed: [httpd]
    
    TASK [download packages] ***********************************************************
    changed: [httpd]
    
    TASK [install apache] **************************************************************
    changed: [httpd]
    
    TASK [start the service] ***********************************************************
    changed: [httpd]
    
    TASK [reload daemon for httpd] *****************************************************
    changed: [httpd]
    
    PLAY [mysql] ***********************************************************************
    
    TASK [Gathering Facts] *************************************************************
    ok: [mysql]
    
    TASK [install depend on mysql] *****************************************************
    changed: [mysql]
    
    TASK [create user mysql] ***********************************************************
    changed: [mysql]
    
    TASK [unzip package] ***************************************************************
    changed: [mysql]
    
    TASK [create soft link] ************************************************************
    changed: [mysql]
    
    TASK [create datadir] **************************************************************
    changed: [mysql]
    
    TASK [initialize mysql] ************************************************************
    changed: [mysql]
    
    TASK [config for mysql] ************************************************************
    changed: [mysql]
    
    TASK [start the service] ***********************************************************
    changed: [mysql]
    
    TASK [reload daemon for mysql] *****************************************************
    changed: [mysql]
    
    PLAY [php] *************************************************************************
    
    TASK [Gathering Facts] *************************************************************
    ok: [php]
    
    TASK [install package] *************************************************************
    changed: [php]
    
    TASK [set conf] ********************************************************************
    changed: [php]
    
    PLAY [httpd] ***********************************************************************
    
    TASK [Gathering Facts] *************************************************************
    ok: [httpd]
    
    TASK [httpd config file] ***********************************************************
    changed: [httpd]
    
    TASK [start httpd] *****************************************************************
    changed: [httpd]
    
    PLAY [mysql] ***********************************************************************
    
    TASK [Gathering Facts] *************************************************************
    ok: [mysql]
    
    TASK [start mysql] *****************************************************************
    changed: [mysql]
    
    PLAY [php] *************************************************************************
    
    TASK [Gathering Facts] *************************************************************
    ok: [php]
    
    TASK [index.php] *******************************************************************
    changed: [php]
    
    TASK [test index] ******************************************************************
    changed: [php]
    
    TASK [allow access to IP] **********************************************************
    changed: [php]
    
    TASK [start php] *******************************************************************
    changed: [php]
    
    PLAY RECAP *************************************************************************
    httpd                      : ok=16   changed=13   unreachable=0    failed=0    skipped=2    rescued=0    ignored=0   
    mysql                      : ok=18   changed=15   unreachable=0    failed=0    skipped=2    rescued=0    ignored=0   
    php                        : ok=14   changed=11   unreachable=0    failed=0    skipped=2    rescued=0    ignored=0  
    

    在三台受控机上验证一下

    httpd主机

    [root@localhost ~]# ss -antl
    State     Recv-Q     Send-Q         Local Address:Port         Peer Address:Port    
    LISTEN    0          128                  0.0.0.0:22                0.0.0.0:*       
    LISTEN    0          128                  0.0.0.0:80                0.0.0.0:*       
    LISTEN    0          128                     [::]:22                   [::]:* 
    

    mysql主机

    [root@localhost ~]# ss -antl
    State     Recv-Q     Send-Q         Local Address:Port         Peer Address:Port    
    LISTEN    0          128                  0.0.0.0:22                0.0.0.0:*       
    LISTEN    0          128                     [::]:22                   [::]:*       
    LISTEN    0          80                         *:3306                    *:*
    

    php主机

    [root@localhost ~]# ss -antl
    State     Recv-Q     Send-Q         Local Address:Port         Peer Address:Port    
    LISTEN    0          128                  0.0.0.0:9000              0.0.0.0:*       
    LISTEN    0          128                  0.0.0.0:22                0.0.0.0:*       
    LISTEN    0          128                     [::]:22                   [::]:* 
    

    测试网页

  • 相关阅读:
    iPhone开发教程之retain/copy/assign/setter/getter
    关于block使用的5点注意事项
    Block的引用循环问题 (ARC & non-ARC)
    浅谈iOS中MVVM的架构设计与团队协作
    JS学习笔记(不断更新)
    神经网络介绍
    JAVA WEB WITH IDEA
    百度地图标注多个点
    脑筋急转弯——Google 面试
    决策树分类器
  • 原文地址:https://www.cnblogs.com/leixixi/p/14258568.html
Copyright © 2020-2023  润新知