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..tar.gz
│   └── nginx-1.16..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 directories, 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..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 directories, 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 directories, 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:
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= - 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
总用量
-rw-r--r--. root root 6月 : hostlist
-rw-r--r--. root root 6月 : init_pkg.yml
-rw-r--r--. root root 6月 : lnmp.yml
drwxr-xr-x. root root 6月 : mysql
-rw-r--r--. root root 6月 : mysql_roles.yml
drwxr-xr-x. root root 6月 : nginx
-rw-r--r--. root root 6月 : nginx_roles.yml
drwxr-xr-x. root root 6月 : php
-rw-r--r--. root root 6月 : php_roles.yml
-rw-r--r--. root root 6月 : 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..tar.gz
│   │   └── nginx-1.16..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..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 directories, 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

如需源码及软件包联系我

Ansible--项目实战的更多相关文章

  1. 项目实战10.1—企业级自动化运维工具应用实战-ansible

    实战环境: 公司计划在年底做一次大型市场促销活动,全面冲刺下交易额,为明年的上市做准备.公司要求各业务组对年底大促做准备,运维部要求所有业务容量进行三倍的扩容,并搭建出多套环境可以共开发和测试人员做测 ...

  2. Python+Django+ansible playbook自动化运维项目实战☝☝☝

    Python+Django+ansible playbook自动化运维项目实战☝☝☝  一.入门引导 DevOPSDevOps(英文Development和Operations的组合)是一组过程.方法 ...

  3. Python+Django+ansible playbook自动化运维项目实战✍✍✍

    Python+Django+ansible playbook自动化运维项目实战  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受 ...

  4. Python+Django+Ansible Playbook自动化运维项目实战

    Python+Django+AnsiblePlaybook自动化运维项目实战 整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频的感受,单 ...

  5. 【SSH项目实战三】脚本密钥的批量分发与执行

    [SSH项目实战]脚本密钥的批量分发与执行 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载, ...

  6. Linux运维项目实战系列

    Linux运维项目实战系列 项目实战1-LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2-项目实战2-实现基于LVS负载均衡集群的电商网站架构 2.1项目实战2.1-nginx 反向 ...

  7. 【SSH项目实战】脚本密钥的批量分发与执行【转】

    [TOC] 前言 <项目实战>系列为<linux实战教学笔记>第二阶段内容的同步教学配套实战练习,每个项目循序衔接最终将组成<Linux实战教学笔记>第二阶段核心教 ...

  8. Linux运维企业架构项目实战系列

    Linux运维企业架构项目实战系列 项目实战1—LNMP的搭建.nginx的ssl加密.权限控制的实现 项目实战2—LVS.nginx实现负载均衡系列2.1 项目实战2.1—实现基于LVS负载均衡集群 ...

  9. Jenkins CI&CD 自动化发布项目实战(下篇)

    Jenkins CI&CD 自动化发布项目实战(下篇) 作者 刘畅 时间 2020-12-04 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...

  10. Jenkins CI&CD 自动化发布项目实战(上篇)

    Jenkins CI&CD 自动化发布项目实战(上篇) 作者 刘畅 时间 2020-11-28 实验环境 centos7.5 主机名 ip 服务配置 软件 gitlab 172.16.1.71 ...

随机推荐

  1. word2vec学习总结

    目录 1.简介 2.从统计语言模型开始 2.1序列概率模型 2.2 N元统计模型 3.深度序列模型 3.1神经概率模型 3.2 one-hot向量表示法 3.3 word2vec 3.4word2ve ...

  2. 怎样把excel整列单元格批量改为文本格式

    选中整列,进入“数据”菜单栏,点击“分列”,[列数据格式]选“文本”,点击“完成”即可.

  3. cad.net 定义lisp

    首先是传参型lisp的定义: (addLine (getpoint)) //定义lisp传入参数的例子 //复制到命令栏运行: (addLine (getpoint)) [LispFunction(& ...

  4. cad.net 图元延迟显示,动画效果,编辑器延迟发送提示.

    public class Command_test { [CommandMethod("tt", CommandFlags.Modal | CommandFlags.UsePick ...

  5. ElasticSearch 线程池类型分析之 ResizableBlockingQueue

    ElasticSearch 线程池类型分析之 ResizableBlockingQueue 在上一篇文章 ElasticSearch 线程池类型分析之 ExecutorScalingQueue的末尾, ...

  6. [终极巨坑]golang+vue开发日记【一】,环境搭建篇

    写在前面 这个golang+vue大部分的内容是基于bydmm(橙卡)大佬的视频学来的,我在这里只是做一下个人开发的笔记,就是图一个乐,毕竟我只是个应届毕业生,如果真的要学请:bydmm的b站空间. ...

  7. 小知识点 之 JVM -XX:SurvivorRatio

    JVM参数之-XX:SurvivorRatio 最近面试过程中遇到一些问JVM参数的,本着没用过去学习的办法看了些博客写得不准确,参考oracle的文档记录一下,争取每天记录一点知识点 -XX:Sur ...

  8. Luogu5611 Ynoi2013 D2T2/牛客挑战赛32F 最大子段和 分块、分治

    传送门 之前一直咕着的,因为一些特殊的原因把这道题更掉算了-- 有一个对值域莫队+线段树的做法,复杂度\(O(n\sqrt{n} \log n)\)然而牛客机子实在太慢了没有希望(Luogu上精细实现 ...

  9. Phenix.NET for CSLA & WF4,企业级、分布式、符合领域建模的OOP软件快速开发平台

    2014-5-20版本: Phenix.NET for CSLA & WF 开发平台: http://download.csdn.net/download/phenixiii/7390405 ...

  10. hibernate Criteria中多个or和and的用法 and ( or or)

    /s筛选去除无效数据 /*      detachedCriteria.add( Restrictions.or( Restrictions.like("chanpin", &qu ...