Ansible项目实战lnmp
项目规划
通过ansible roles
配置lnmp
环境,Nginx
通过源码编译安装,PHP
通过源码编译安装,MysqL
通过yum
安装(MysqL
源码编译超级慢)支持系统(centos6.x
和centos7.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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。