playbook安装分布式lnmp

Posted 爱show的小卤蛋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了playbook安装分布式lnmp相关的知识,希望对你有一定的参考价值。


搭建本地yum仓库,使用http发布

yum -y install httpd
systemctl start httpd
cd /var/www/html
mkdir myrepo

yum -y install createrepo
createrepo myrepo
[root@host103 html]# ls myrepo/repodata/

cd myrepo
#下载rpm 包
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
rpm -Uvh http://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libargon2-20161029-3.el7.x86_64.rpm
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

yum install --downloadonly --downloaddir=/var/www/html/myrepo \\
php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache pcre-devel


编写yum仓库配置

[root@host103 opt]# cat nginx.repo 
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

[root@host103 opt]# cat my.repo 
[myrepo]
name=myrepo
baseurl=http://192.168.23.103/myrepo
enabled=1
gpgcheck=0


配置nginx配置文件,设置nginx支持php解析

[root@host103 opt]# egrep -nv '^$|#' default.conf 
1:server {
2:    listen       80;
3:    server_name  localhost;
7:    location / {
8:        root   /usr/share/nginx/html;
         #修改 ,配置文首页文件
9:        index  index.html index.php;
10:    }
16:    error_page   500 502 503 504  /50x.html;
17:    location = /50x.html {
18:        root   /usr/share/nginx/html;
19:    }
       #修改
29:    location ~ \\.php$ {
30:        root           html;
          #修改,配置php主机ip和默认端口
31:        fastcgi_pass   192.168.23.107:9000;
32:        fastcgi_index  index.php;
           #修改
33:        fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name; 
34:        include        fastcgi_params;
35:    }
43:}


配置php首页文件

[root@host103 opt]# vim index.php 
<?php
#配置连接数据的 ip 地址,用户,密码
$link=mysqli_connect('192.168.23.106','root','Admin@123');
if($link) echo "<h1>Success!!</h1>";
else echo "Fail!!";
?>


配置nginx和mysql主机的nfs共享配置文件


[root@host103 opt]# cat nginx_exports 
/usr/share/nginx/html 192.168.23.0/24(rw,no_root_squash)

[root@host103 opt]# cat mysql_exports 
/var/lib/mysql/ 192.168.23.0/24(rw,no_root_squash)


[root@host107 html]# cat www.conf | grep -v '^;' | grep -v '^$'
[www]
#修改,配置用户和组为nginx
user = nginx 
group = nginx
#修改,配置监听地址php的地址和端口
listen = 192.168.23.107:9000
#修改,设置为nginx主机的地址
listen.allowed_clients = 192.168.23.105
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path]    = /var/lib/php/session
php_value[soap.wsdl_cache_dir]  = /var/lib/php/wsdlcache
[root@host107 html]# cat /etc/php.ini | egrep 'mysqli.default_socket|date.timezone'
; http://php.net/date.timezone
#修改,设置时区
date.timezone = Asia/Shanghai
#修改,设置mysql的套接字文件路径
mysqli.default_socket = /var/lib/mysql/mysql.sock


编写playbook前准备

#先配置免密登录
ssh-keygen  
ssh-copy-id 192.168.23.105
ssh-copy-id 192.168.23.106
ssh-copy-id 192.168.23.107

#配置主机清单
[root@host103 opt]# egrep -v '^$|#'  /etc/ansible/hosts  | grep -A1 'servers'
[phpservers]
192.168.23.107
[webservers]
192.168.23.105 
[dbservers]
192.168.23.106 


playbook文件

- name: for all 
  gather_facts: false
  hosts: webservers dbservers phpservers
  remote_user: root
  tasks: 
    - name: stop  firewalld
      service: name=firewalld state=stopped enabled=no

    - name: stop selinux
      selinux:
        policy: targeted
        state:
          disabled

    - name: make yumrepo
      copy: src=/opt/my.repo dest=/etc/yum.repos.d/my.repo
    
- name: for nginx
  gather_facts: false
  hosts: webservers
  remote_user: root
  tasks: 

    - name: modify yum repository
      copy: src=/opt/nginx.repo dest=/etc/yum.repos.d/nginx.repo

    - name: install nginx
      yum: name=nginx state=latest 

    - name: start nginx
      service: name=nginx state=started enabled=yes

    - name: install nfs
      yum: 
        name:
          - rpcbind
          - nfs-utils
   
    - name: chmod 
      file: path=/usr/share/nginx/html mode=0777
 
    - name: modify share directory
      copy: src=/opt/nginx_exports dest=/etc/exports
  
    - name: start nfs
      service: 
        name: "{{item}}"
        state: started
        enabled: yes
      with_items:
        - rpcbind
        - nfs

    - name: modify index.php
      copy: src=/opt/index.php dest=/usr/share/nginx/html/index.php

    - name: for nginx  support  php 
      copy: src=/opt/default.conf dest=/etc/nginx/conf.d/default.conf
      notify: restart nginx

  handlers: 
    - name: restart nginx
      service: name=nginx state=restarted
 
- name: for mysql
  gather_facts: false
  hosts: dbservers
  remote_user: root
  tasks:

    - name: remove mariadb and 
      yum: name=mariadb*  state=absent
    
    - name: install mysql57
      yum: name=mysql57-community-release-el7-10.noarch

    - name: install mysql
      yum: name=mysql-community-server

    - name: start mysqld
      service: name=mysqld state=started enabled=yes

    - name: initialize mysql
      shell: a=$(grep "password" /var/log/mysqld.log | awk 'NR==1{print $NF}') &&  mysqladmin -u root -p"$a" password 'Admin@123' || echo 'OK'
       
    - name: Configuring Authorized Users 
      shell: mysql -uroot -p'Admin@123' -e "grant all privileges on *.* to root@'%' identified by 'Admin@123' with grant option;" -e "flush privileges;"  || echo 'OK'

    - name: remove mysql57-community
      yum: name=mysql57-community-release-el7-10.noarc state=absent

    - name: install nfs
      yum:
        name:
          - rpcbind
          - nfs-utils

    - name: modify share directory
      copy: src=/opt/mysql_exports dest=/etc/exports

    - name: start nfs
      service:
        name: "{{item}}"
        state: started
        enabled: yes
      with_items:
        - rpcbind
        - nfs
          
          
- name: for php
  gather_facts: false
  hosts: phpservers
  remote_user: root
  tasks: 
    - name: stop  firewalld
      service: name=firewalld state=stopped enabled=no

    - name: stop selinux
      shell: setenforce 0
      ignore_errors: yes
    - name: make yumrepo for php
      copy: src=/opt/my.repo  dest=/etc/yum.repos.d/my.repo

    - name: useradd nginx
      user: name=nginx state=present

    - name: install nfs
      yum:
        name: 
          - rpcbind
          - nfs-utils
    - name: start nfs
      service: name=rpcbind state=started enabled=yes

    - name: make dir for nginx
      shell: ls /usr/share/nginx/html || mkdir -p /usr/share/nginx/html
  
    - name: make dir for mysql.sock
      shell: ls /var/lib/mysql/ || mkdir -p /var/lib/mysql

    - name: mount nfs for nginx
      mount:
        path: /usr/share/nginx/html
        src: 192.168.23.105:/usr/share/nginx/html
        fstype: nfs
        state: mounted

    - name: mount nfs for mysql
      mount:
        path: /var/lib/mysql
        src: 192.168.23.106:/var/lib/mysql
        fstype: nfs
        state: mounted

    - name: download libargon2 epel webtatic-release
      yum:
        name:
          - libargon2
          - epel-release 
          - webtatic-release

    - name: install php
      yum: 
        name:
          - php72w
          - php72w-cli
          - php72w-common
          - php72w-devel
          - php72w-embedded
          - php72w-gd
          - php72w-mbstring
          - php72w-pdo
          - php72w-xml
          - php72w-fpm
          - php72w-mysqlnd
          - php72w-opcache

    - name: modify php.ini
      copy: src=/opt/php.ini dest=/etc/php.ini

    - name: modify www.conf
      copy: src=/opt/www.conf dest=/etc/php-fpm.d/www.conf


    - name: start php
      service: name=php-fpm state=started enabled=yes      


- php72w-fpm
      - php72w-mysqlnd
      - php72w-opcache

- name: modify php.ini
  copy: src=/opt/php.ini dest=/etc/php.ini

- name: modify www.conf
  copy: src=/opt/www.conf dest=/etc/php-fpm.d/www.conf


- name: start php
  service: name=php-fpm state=started enabled=yes      

以上是关于playbook安装分布式lnmp的主要内容,如果未能解决你的问题,请参考以下文章

playbook安装分布式lnmp

编写playbook实现LNMP架构基于源码方式变量,加密文件

Jenkins+GitLab+Ansible playbook安装与基本使用

ansible应用进阶playbook--LNMP+WordPress

ansible-playbook通过github拉取部署Lnmp环境

大环境