Ansible--项目实践

原创
小哥 3年前 (2022-11-02) 阅读数 12 #PHP
文章标签 PHP

Ansible--项目实战

Ansible项目实战lnmp #

项目规划 #

通过 ansible roles 配置 lnmp 环境, nginx 通过源代码编译和安装, php 通过源代码编译和安装, mysql 通过 yum 安装( mysql 源码编译超慢)支持系统( centos6.xcentos7.x 系列)

说明: 将nginx和php源代码包被放置在相应的角色文件下files目录,vars/main.yml控制安装的版本和路径。具体情况如下:

[root@ansible roles]# cat nginx/vars/main.yml DOWNLOAD_DIR: "/usr/local/src/" #复制到目标主机的包的存储路径。 INSTALL_DIR: "/usr/local/" #安装路径 NGINX_VERSION: "1.12.2" #程序包版本 USER: "nginx" #用户运行 GROUP: "nginx" #运行的组

环境配置参考

角色编写 #

这里的角色都是统一的。 /etc/ansible/roles

安装和编译所需的依赖项包

[root@ansible ~]# cd /etc/ansible/roles/

[root@ansible roles]# cat init_pkg.yml

安装源代码编译php、nginx需要使用的依赖项包。


  • hosts: all remote_user: root

    tasks:

    • name: Install Package yum: name={{ item }} state=installed with_items:
      • gcc-c++
      • glibc
      • glibc-devel
      • glib2
      • glib2-devel
      • pcre
      • pcre-devel
      • zlib
      • zlib-devel
      • openssl
      • openssl-devel
      • libpng
      • libpng-devel
      • freetype
      • freetype-devel
      • libxml2
      • libxml2-devel
      • bzip2
      • bzip2-devel
      • ncurses
      • curl
      • gdbm-devel
      • libXpm-devel
      • libX11-devel
      • gd-devel
      • gmp-devel
      • readline-devel
      • libxslt-devel
      • expat-devel
      • xmlrpc-c
      • libcurl-devel

nginx roles #

1)创建适当的文件夹

[root@ansible roles]# mkdir -p nginx/{files,handlers,tasks,templates,vars}

2)最终写作效果

[root@ansible roles]# tree nginx nginx ├── files │   ├── nginx-1.12.2.tar.gz │   └── nginx-1.16.0.tar.gz ├── handlers │   └── main.yml ├── tasks │   ├── config.yml │   ├── copypkg.yml │   ├── group.yml │   ├── install.yml │   ├── main.yml │   ├── service.yml │   └── user.yml ├── templates │   ├── nginx.conf.j2 │   ├── nginx_init.j2 │   └── nginx.service.j2 └── vars └── main.yml

5 directories, 14 files

php roles #

1)创建适当的文件夹

[root@ansible roles]# mkdir -p php/{files,handlers,tasks,templates,vars}

2)最终写作效果

[root@ansible roles]# tree php php ├── files │   └── php-5.6.40.tar.gz ├── handlers │   └── main.yml ├── tasks │   ├── config.yml │   ├── copypkg.yml │   ├── group.yml │   ├── install.yml │   ├── main.yml │   ├── service.yml │   └── user.yml ├── templates │   ├── php-fpm.conf.j2 │   ├── php-fpm.init.j2 │   ├── php-fpm.service.j2 │   └── php.ini.j2 └── vars └── main.yml

5 directories, 14 files

mysql roles #

1)创建适当的文件夹

[root@ansible roles]# mkdir -p mysql/{files,handlers,tasks,templates,vars}

2)最终写作效果

[root@ansible roles]# tree mysql mysql ├── files ├── handlers │   └── main.yml ├── tasks │   ├── config.yml │   ├── install.yml │   ├── main.yml │   └── service.yml ├── templates │   ├── my.cnf6.j2 │   └── my.cnf7.j2 └── vars

5 directories, 7 files

角色执行playbook文件编写 #

[root@ansible roles]# cat nginx_roles.yml

源代码编译和安装nginx


  • hosts: all remote_user: root roles:
    • role: nginx

[root@ansible roles]# cat php_roles.yml

源代码编译和安装nginx


  • hosts: all remote_user: root roles:
    • role: php

[root@ansible roles]# cat mysql_roles.yml

yum安装MySQL


  • hosts: all remote_user: root roles:
    • role: mysql

[root@ansible roles]# cat lnmp.yml

配置lnmp,创建虚拟主机


  • hosts: all remote_user: root roles:

    • role: nginx
    • role: php
    • role: mysql

    vars: PORT: 8081 WEBDIR: "/opt/www" CONFIGDIR: "/usr/local/nginx/conf/conf.d"

    tasks:

    • name: create vhost dir file: name={{ WEBDIR }} state=directory owner=www group=www mode=755

    • name: create vhost conf template: src=vhost.conf.j2 dest={{ CONFIGDIR }}/vhost.conf notify: Restart Nginx

    • name: create index.php shell: "echo <?php phpinfo(); ?> > {{ WEBDIR }}/index.php"

    handlers:

    • name: Restart Nginx service: name=nginx state=restarted

hostslist便于执行的文档准备可在中执行playbook指定要运行的计算机。

[root@ansible roles]# cat hostlist 192.168.1.31 192.168.1.32 192.168.1.33 192.168.1.36

查看所有文件

[root@ansible roles]# ll 总用量 28 -rw-r--r--. 1 root root 53 6月 4 22:37 hostlist -rw-r--r--. 1 root root 824 6月 5 10:53 init_pkg.yml -rw-r--r--. 1 root root 646 6月 5 12:05 lnmp.yml drwxr-xr-x. 7 root root 77 6月 5 10:44 mysql -rw-r--r--. 1 root root 81 6月 5 10:06 mysql_roles.yml drwxr-xr-x. 7 root root 77 6月 4 15:37 nginx -rw-r--r--. 1 root root 89 6月 4 17:10 nginx_roles.yml drwxr-xr-x. 7 root root 77 6月 4 17:18 php -rw-r--r--. 1 root root 87 6月 4 17:37 php_roles.yml -rw-r--r--. 1 root root 811 6月 5 11:53 vhost.conf.j2

查看所有文件 #

[root@ansible roles]# tree . ├── hostlist ├── init_pkg.yml ├── lnmp.yml ├── mysql │   ├── files │   ├── handlers │   │   └── main.yml │   ├── tasks │   │   ├── config.yml │   │   ├── install.yml │   │   ├── main.yml │   │   └── service.yml │   ├── templates │   │   ├── my.cnf6.j2 │   │   └── my.cnf7.j2 │   └── vars ├── mysql_roles.yml ├── nginx │   ├── files │   │   ├── nginx-1.12.2.tar.gz │   │   └── nginx-1.16.0.tar.gz │   ├── handlers │   │   └── main.yml │   ├── tasks │   │   ├── config.yml │   │   ├── copypkg.yml │   │   ├── group.yml │   │   ├── install.yml │   │   ├── main.yml │   │   ├── service.yml │   │   └── user.yml │   ├── templates │   │   ├── nginx.conf.j2 │   │   ├── nginx_init.j2 │   │   └── nginx.service.j2 │   └── vars │   └── main.yml ├── nginx_roles.yml ├── php │   ├── files │   │   └── php-5.6.40.tar.gz │   ├── handlers │   │   └── main.yml │   ├── tasks │   │   ├── config.yml │   │   ├── copypkg.yml │   │   ├── group.yml │   │   ├── install.yml │   │   ├── main.yml │   │   ├── service.yml │   │   └── user.yml │   ├── templates │   │   ├── php-fpm.conf.j2 │   │   ├── php-fpm.init.j2 │   │   ├── php-fpm.service.j2 │   │   └── php.ini.j2 │   └── vars │   └── main.yml ├── php_roles.yml └── vhost.conf.j2

18 directories, 42 files

执行说明 #

1)单机安装nginx

[root@ansible roles]# ansible-playbook -i hostlist nginx_roles.yml --limit 192.168.1.31

2)单机安装php

[root@ansible roles]# ansible-playbook -i hostlist php_roles.yml --limit 192.168.1.31

3)单机安装mysql

[root@ansible roles]# ansible-playbook -i hostlist mysql_roles.yml --limit 192.168.1.31

4)单机部署lnmp

[root@ansible roles]# ansible-playbook -i hostlist lnmp.yml --limit 192.168.1.31

5)所有机器部署php

[root@ansible roles]# ansible-playbook php_roles.yml

6)所有机器部署nginx

[root@ansible roles]# ansible-playbook nginx_roles.yml

7)所有机器部署mysql

[root@ansible roles]# ansible-playbook mysql_roles.yml

8)所有机器部署lnmp

[root@ansible roles]# ansible-playbook lnmp.yml

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除