大致思路
先在一台机器上编译安装好nginx、打包,然后再用ansible去下发。
cd /etc/ansible # 进入ansible配置文件目录
mkdir nginx_install # 创建一个nginx_install的目录,方便管理
cd nginx_install
mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}
roles/ # 目录结构
├── common # 安装前的一些准备
│ ├── files # 安装时用到的一些文件
│ ├── handlers # 触发器
│ ├── meta # 说明信息,说明角色依赖等信息
│ ├── tasks # 核心的配置文件
│ ├── templates # 通常存一些配置文件,启动脚本等模板文件
│ └── vars # 定义的变量
└── install # 安装nginx的操作
├── files
├── handlers
├── meta
├── tasks
├── templates
└── vars
安装步骤
需要事先准备好安装用到的文件,具体如下:
1.将nginx的源码包放在/etc/ansible/nginx_install/roles/install/files/
命名为nginx-1.15.2.tar.gz
mv nginx-1.15.2.tar.gz /etc/ansible/nginx_install/roles/install/files/nginx-1.15.2.tar.gz
2.启动脚本、配置文件都要放到/etc/ansible/nginx_install/roles/install/templates
下面
cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates
3.定义common的tasks,nginx是需要一些依赖包的
# /etc/ansible/nginx_install/roles/common/tasks/main.yml
- name: Install initializtion require software
yum: name="zlib-devel,gcc,pcre-devel" state=installed
4.定义变量
# /etc/ansible/nginx_install/roles/install/vars/main.yml
nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx
5.首先要把所有用到的文档拷贝到目标机器
# /etc/ansible/nginx_install/roles/install/tasks/copy.yml
- name: Copy Nginx Software
copy: src=nginx-1.15.2.tar.gz dest=/tmp/nginx-1.15.2.tar.gz owner=root group=root
- name: Uncompression Nginx Software
shell: tar -zxf /tmp/nginx-1.15.2.tar.gz -C /tmp/
- name: Copy Nginx Start Script
template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
6.接下来会建立用户,启动服务,删除压缩包
# /etc/ansible/nginx_install/roles/install/tasks/install.yml
- name: Install nginx
shell: "cd /tmp/nginx-1.15.2 && ./configure --prefix={{ nginx_basedir }} --with-pcre && make && make install"
- name: Create Nginx User
user: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: Start Nginx Service
shell: /etc/init.d/nginx start
- name: Add Boot Start Nginx Service
shell: chkconfig --level 345 nginx on
- name: Delete Nginx compression files
shell: rm -rf /tmp/nginx.tar.gz
7.再创建main.yml并且把copy和install调用
# /etc/ansible/nginx_install/roles/install/tasks/main.yml
- include: copy.yml
- include: install.yml
8.到此两个roles:common和install就定义完成了,接下来要定义一个入口配置文件
# /etc/ansible/nginx_install/install.yml
---
- hosts: 192.168.127.129
remote_user: root
gather_facts: True
roles:
- common
- install
9.执行:
ansible-playbook /etc/ansible/nginx_install/install.yml