首页 > 其他 > 详细

Ansible playbook 分离部署lamp

时间:2021-01-10 22:43:22      阅读:26      评论:0      收藏:0      [点我收藏+]

准备4台服务器

安装的环境 IP/主机名
ansible 192.168.220.10/apache
apache 192.168.220.20/apache
mysql 192.168.220.30/mysql
php 192.168.220.40/php

 

 

 

 

 

 

 

关闭关闭防火墙和selinux:

 systemctl stop firewalld
 setenforce 0

安装ansible:

//配置yum源
[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#g  /etc/yum.repos.d/CentOS-Base.repo
[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#g  /etc/yum.repos.d/epel.repo
 
//安装ansible
[root@ansible ~]# yum -y install ansible
 
//查看ansible版本
[root@ansible ~]#  ansible  --version
ansible 2.9.16
  config file = /etc/ansible/ansible.cfg
  configured module search path = [/root/.ansible/plugins/modules, /usr/share/ansible/plugins/modules]
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, Dec  5 2019, 15:45:45) [GCC 8.3.1 20191121 (Red Hat 8.3.1-5)]
 
//ssh免密登录
[root@ansible lamp]# vim /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.220.10  ansible
192.168.220.20  apache
192.168.220.30  mysql
192.168.248.40  php
 
[root@ansible ~]# ssh-keygen -t rsa
[root@ansible ~]# ssh-copy-id  root@apache
[root@ansible ~]# ssh-copy-id  root@mysql
[root@ansible ~]# ssh-copy-id  root@php

 将被控机IP加入到主控机清单:

[root@ansible ~]# mkdir lamp
[root@ansible ~]# cd lamp
[root@ansible lamp]# cp /etc/ansible/ansible.cfg  .
 //创建清单文件
[root@ansible lamp]# vim inventory
[group_apache]
apache
 
[group_mysql]
mysql
 
[group_php]
php

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

 

搭建源

[root@ansible lamp]# vim  yum.yml
---
- hosts: all
  tasks:
    - name: copy yum
      copy:
        src: /etc/yum.repos.d/
        dest: /etc/yum.repos.d/
    - name: copy key
      copy:
        src: /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8
        dest: /etc/pki/rpm-gpg
    - name: clean
      command: yum clean all
    - name: makecache
      command: yum makecache
[root@ansible lamp]# ansible-playbook  yum.yml

apache安装:

//已经下载的安装包
[root@ansible ~]# ls
anaconda-ks.cfg    apr-util-1.6.1.tar.gz  lamp
apr-1.7.0.tar.bz2  httpd-2.4.46.tar.gz    mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz

playbook安装apache:

//安装
[root@ansible lamp]# vim apache/scripts/apr.sh
#!/bin/bash
tar -xf /root/apr-1.7.0.tar.bz2
sed -i s/\$RM "$cfgfile"/\#\$RM "$cfgfile"/ /root/apr-1.7.0/configure
cd /root/apr-1.7.0
./configure  --prefix=/usr/local/apr
make && make install
 
[root@ansible lamp]# vim apache/scripts/apr_util.sh
#!/bin/bash
tar -xf /root/apr-util-1.6.1.tar.gz
cd /root/apr-util-1.6.1
./configure  --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
 
[root@ansible lamp]# vim apache/scripts/httpd.sh
#!/bin/bash
tar -xf /root/httpd-2.4.46.tar.gz
cd /root/httpd-2.4.46
./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
 
[root@ansible lamp]# vim apache/scripts/config.sh
#!/bin/bash
#variable
echo export PATH=/usr/local/apache/bin:$PATH > /etc/profile.d/httpd.sh
source /etc/profile.d/httpd.sh
#include
ln -s /usr/local/apache/include/ /usr/include/httpd
#config
sed -i /proxy.so/ s/#//g  /etc/httpd24/httpd.conf
sed -i /fcgi.so/ s/#//g /etc/httpd24/httpd.conf
sed -i /index.html/ s/index.html/index.php index.html/g  /etc/httpd24/httpd.conf
sed -i s|AddType application/x-gzip .gz .tgz|AddType application/x-gzip .gz .tgz\n    AddType application/x-httpd-php .php\n    AddType application/x-httpd-php-source .phps| /etc/httpd24/httpd.conf
#set virtualhost
echo -e <VirtualHost *:80>\n    DocumentRoot "/usr/local/apache/htdocs/"\n    ServerName chouyu.com\n    ProxyRequests Off\n    ProxyPassMatch ^/(.*\.php)$ fcgi://192.168.220.40:9000/var/www/html/$1\n    <Directory "/usr/local/apache/htdocs/">\n        Options none\n        AllowOverride none\n        Require all granted\n    </Directory>\n</VirtualHost> >> /etc/httpd24/httpd.conf
#start
apachectl start
 
 
 
[root@ansible lamp]# vim apache/httpd.yml
---
- hosts: httpd
  vars:
    package: openssl-devel,pcre-devel,expat-devel,libtool,gcc,gcc-c++,make
  tasks:
    - name: install
      yum:
        name: {{ package }}
        state: present
    - name: package group
      yum:
        name: "@Development tools"
        state: present
    - name: create user
      user:
        name: apache
        system: yes
        create_home: no
        shell: /sbin/nologin
        state: present
    - name: copy apr-util
      copy:
        src: /root/apr-util-1.6.1.tar.gz
        dest: /root
    - name: copy apr
      copy:
        src: /root/apr-1.7.0.tar.bz2
        dest: /root/
    - name: copy httpd
      copy:
       src: /root/apr-1.7.0.tar.bz2
        dest: /root/
    - name: copy httpd
      copy:
        src: /root/httpd-2.4.46.tar.gz
        dest: /root/
    - name: install apr
      script: /root/lamp/apache/scripts/apr.sh
    - name: install apr-util
      script: /root/lamp/apache/scripts/apr_util.sh
    - name: install httpd
      script: /root/lamp/apache/scripts/httpd.sh
    - name: set config start
      script: /root/lamp/apache/scripts/config.sh
                                                                                      
//执行playbook
[root@ansible lamp]# ansible-playbook  apache/httpd.yml

mysql安装:

[root@ansible ~]# ls
anaconda-ks.cfg  lamp  mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
 
//写入配置
[root@ansible lamp]# vim mysql/scripts/install.sh
#!/bin/bash
#uncompress
tar  -xf /root/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz -C /usr/local/
#link
ln -s /usr/local/mysql-5.7.31-linux-glibc2.12-x86_64/  /usr/local/mysql
#chown
chown -R mysql.mysql /usr/local/mysql*
#variable
echo export PATH=/usr/local/mysql/bin:$PATH > /etc/profile.d/myslq.sh
source /etc/profile.d/myslq.sh
#include
ln -s /usr/local/mysql/include/  /usr/include/mysql
#lib
echo /usr/local/mysql/lib > /etc/ld.so.conf.d/msqly.conf
ldconfig
#initizlize mysql
/usr/local/mysql/bin/mysqld  --initialize  --user=mysql   --datadir=/mydata > /root/password 2>&1
#start script
cp /usr/local/mysql/support-files/mysql.server  /etc/init.d/mysqld
sed -ri s#^(basedir=).*#\1/usr/local/mysql#g /etc/init.d/mysqld
sed -ri s#^(datadir=).*#\1/mydata#g /etc/init.d/mysqld
#start mysql
service mysqld start
#set password
/usr/local/mysql/bin/mysql  -uroot -p"$(awk  ‘/password/{print$NF}‘ /root/password)"  --connect-expired-password -e "set password = password(\"root123\");"
 
//配置musql的模板
[root@ansible lamp]# vim mysql/templates/my.cnf
[mysqld]
basedir = /usr/local/mysql
datadir = /mydata
socket = /tmp/mysql.sock
port = 3306
pid-file = /mydata/mysql.pid
user = mysql
skip-name-resolve
        
            
#playbook
[root@ansible lamp]# vim  mysql/mysql.yml
---
- hosts: mysql
  vars:
    depend: ncurses-devel,openssl-devel,openssl,cmake,mariadb-devel,ncurses-compat-libs
  tasks:
    - name: install package
      yum:
       name: {{ depend }}
       state: present
    - name: copy mysql
      copy:
        src: /root/mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz
        dest: /root/
    - name: create user
      user:
        name: mysql
        system: yes
        create_home: no
        shell: /sbin/nologin
        state: present
    - name: create datadir
      file:
        path: /mydata
        owner: mysql
        group: mysql
        state: directory
    - name: my.cnf
      template:
        src: /root/lamp/mysql/templates/my.cnf
        dest: /etc/
    - name: script
      script: /root/lamp/mysql/scripts/install.sh
 
//执行playbook
[root@ansible lamp]# ansible-playbook    mysql/mysql.yml
//测试
[root@mysql ~]# mysql -uroot -proot123
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type help; or \h for help. Type \c to clear the current input statement.

mysql>

 

php安装

#配置php
[root@ansible lamp]# vim php/scripts/phpcfg.sh
#!/bin/bash
echo -e  "<?php\n\tphpinfo();\n?>" > /var/www/html/index.php
chown -R apache.apache  /var/www/html/index.php
sed -i s#listen = /run/php-fpm/www.sock#listen=0.0.0.0:9000# /etc/php-fpm.d/www.conf
sed -i s#127.0.0.1#192.168.220.20# /etc/php-fpm.d/www.conf
 
#playbook
 
 
---
- hosts: php
  vars:
     package: 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
  tasks:
    - name: install depend
      yum:
        name: {{ package }}
        state: present
    - name: install php
      yum:
        name: php-*
        state: present
    - name: config
      script: /root/lamp/php/scripts/phpcfg.sh
    - name: start php-fpm
      service:
        name: php-fpm
        state: started
 
//执行playbook
[root@ansible lamp]# ansible-playbook  php/php.yml

 

测试

技术分享图片

 

 

 

 

技术分享图片

 

Ansible playbook 分离部署lamp

原文:https://www.cnblogs.com/lichouluoyu/p/14259483.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!