ansible-playbook实战——nginx

一、安装nginx

(1)准备环境(两个节点)!!

cd /etc/ansible
yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl-devel 

(否则会出现错误)

错误:

make: *** No rule to make target `build', needed by `default'.  Stop.

(出现错误需要重新 ./configure)

(2)下载解压nginx包

wget http://mirrors.sohu.com/nginx/nginx-1.9.6.tar.gz
tar -zxf nginx-1.9.6.tar.gz
cd nginx-1.9.6
./configure --prefix=/usr/local/nginx
make && make install

(3)编辑nginx文件

vi /etc/init.d/nginx
内容:

#!/bin/bash
# chkconfig: - 30 21
# description: http service.
# Source Function Library
. /etc/init.d/functions
# Nginx Settings
NGINX_SBIN="/usr/local/nginx/sbin/nginx"
NGINX_CONF="/usr/local/nginx/conf/nginx.conf"
NGINX_PID="/usx/local/nginx/logs/nginx.pid"
RETVAL=0
prog="Nginx"

start()
{
        echo -n $"Starting $prog: "
        mkdir -p /dev/shm/nginx_temp
        daemon $NGINX_SBIN -c $NGINX_CONF
        RETVAL=$?
        echo
        return $RETVAL
}
stop()
{
        echo -n $"Stopping $prog: "
        killproc -p $NGINX_PID $NGINX_SBIN -TERM
        rm -rf /dev/shm/nginx_temp
        RETVAL=$?
        echo
        return $RETVAL
}
reload()
{
        echo -n $"Reloading $prog: "
        killproc -p $NGINX_PID $NGINX_SBIN -HUP
        RETVAL=$?
        echo
        return $RETVAL
}
restart()
{
        stop
        start
}
configtest()
{
        $NGINX_SBIN -c $NGINX_CONF -t
        return 0
}
case "$1" in
        start)
                start
                ;;
        stop)
                stop
                ;;
        reload)
                reload
                ;;
        restart)
                restart
                ;;
        configtest)
                configtest
                ;;
        *)
                echo $"Usage: $0 {start|stop|reload|restart|configtest}"
                RETVAL=1
esac
exit $RETVAL

(4)清空配置并重新编辑

> /usr/local/nginx/conf/nginx.conf
vi /usr/local/nginx/conf/nginx.conf

内容(注释尽量删掉,可能会报错):

user nobody nobody;		//定义nginx运行的用户和用户组
worker_processes 2;		//nginx进程数,一般为CPU总核心数
error_log /usr/local/nginx/logs/nginx_error.log crit;	//全局错误日志定义类型
pid /usr/local/nginx/logs/nginx.pid;	//进程文件
worker_rlimit_nofile 51200;
events		//工作模式与连接数上限
{
use epoll;
worker_connections 6000;
}
http		//http下的一些配置
{
include mime.types;		//文件扩展名与文件类型映射表
default_type application/octet-stream;		//默认文件类型
server_names_hash_bucket_size 3526;
server_names_hash_max_size 4096;
log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
'$host "$request_uri" $status'
'"$http_referer" "$http_user_agent"';
sendfile on;		//开启高效文件传输模式
tcp_nopush on;		//防止网络阻塞
keepalive_timeout 30;		//长连接超时时间,单位为秒
client_header_timeout 3m;
client_body_timeout 3m;
send_timeout 3m;
connection_pool_size 256;
client_header_buffer_size 1k;
large_client_header_buffers 8 4k;
request_pool_size 4k;
output_buffers 4 32k;
postpone_output 1460;
client_max_body_size 10m;
client_body_buffer_size 256k;
client_body_temp_path /usr/local/nginx/client_body_temp;
proxy_temp_path /usr/local/nginx/proxy_temp;
fastcgi_temp_path /usr/local/nginx/fastcgi_temp;
fastcgi_intercept_errors on;
tcp_nodelay on;		//防止网络阻塞
gzip on;		//开启gzip压缩输出
gzip_min_length 1k;
gzip_buffers 4 8k;
gzip_comp_level 5;
gzip_http_version 1.1;
gzip_types text/plain application/x-javascript text/css text/htm
application/xml;
server		//虚拟主机配置
{
listen 80;
server_name localhost;
index index.html index.htm index.php;
root /usr/local/nginx/html;
location ~ \.php$
{
include fastcgi_params;
fastcgi_pass unix:/tmp/php-fcgi.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/1ocal/nginx/html$fastcgi_script_name;
}
}
}

(5)可以用命令检查配置是否正确

/usr/local/nginx/sbin/nginx -t

在这里插入图片描述

(6)启动nginx服务

service nginx start

显示权限不够,增加权限

chmod 777 /etc/init.d/nginx

如果httpd服务开启的话,端口被占用,需要先关闭httpd
然后再启动,完成

二、环境准备

1.把文件和脚本复制

首先创建安装目录

cd /etc/ansible/
mkdir nginx_install
cd nginx_install
mkdir -p roles/{common,install}/{handlers,files,meta,tasks,templates,vars}

说明: roles目录下有两个角色,common为一些准备操作,install为安装nginx的操作。每个角色下面又有几个目录,handlers下面是当发生改变时要执行的操作,通常用在配置文件发生改变,重启服务。files为安装时用到的一些文件,meta为说明信息,说明角色依赖等信息,tasks里面是核心的配置文件,templates通常存一些配置文件,启动脚本等模板文件,vars下为定义的变量.

在nginx所在目录下将nginx文件打包成tar包,将nginx.tar.gz复制到/etc/ansible/nginx_install/roles/install/files下

cd /etc/ansible/
tar -zcvf nginx.tar.gz nginx-1.9.6
mv nginx.tar.gz /etc/ansible/nginx_install/roles/install/files/
cp nginx-1.9.6/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/
cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/

2.编辑配置文件

(1)定义common的taskes

vim /etc/ansible/nginx_install/roles/common/tasks/main.yml

内容

- name: Install initializtion require software
  yum: name={{ item }} state=installed
  with_items:
    - zlib-devel
    - pcre-devel

(2)定义变量

vim /etc/ansible/nginx_install/roles/install/vars/main.yml 

内容:

nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx

(3)拷贝用到的文件

vim /etc/ansible/nginx_install/roles/install/tasks/copy.yml

内容:

- name: Copy Nginx Software
  copy: src=nginx.tar.gz dest=/tmp/nginx.tar.gz owner=root group=root
- name: Uncompression Nginx Software
  shell: tar zxf /tmp/nginx.tar.gz -C /usr/local/
- name: Copy Nginx Start Script
  template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
- name: Copy Nginx Config
  template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644

(4)建立用户,启动服务,删除安装包

vim /etc/ansible/nginx_install/roles/install/tasks/install.yml 

内容:

- 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

(5)调用copy和install

vim /etc/ansible/nginx_install/roles/install/tasks/main.yml

内容:

- include: copy.yml
- include: install.yml

(6)定义一个入口配置文件

vim  /etc/ansible/nginx_install/install.yml 

内容

---
- hosts: testhost
  remote_user: root
  gather_facts: True
  roles:
    - common
    - install

3.执行

ansible-playbook /etc/ansible/nginx_install/install.yml

在这里插入图片描述
如果最后二节点启动不了nginx,看看/usr/local/nginx下的配置文件是否复制过来了,重新在一节点将nginx.tar.gz 移到/etc/ansible/nginx_install/roles/install/files

4、管理配置文件

(1)创建目录放置管理文件

mkdir -p /etc/ansible/nginx_config/roles/{new,old}/{files,handlers,vars,tasks}

说明:
其中new为更新时用到的,old为回滚时用到的,files下面为nginx.conf和vhosts目录,handlers为重启nginx服务的命令
关于回滚,需要在执行playbook之前先备份一下旧的配置,所以对于老配置文件的管理一定要严格,千万不能随便去修改线上机器的配置,并且要保证new/files下面的配置和线上的配置一致

(2)创建、复制文件

进入/usr/local/nginx/conf并创建vhosts目录

cd /usr/local/nginx/conf/
mkdir vhosts
cd vhosts
touch 1.conf

在nginx.conf文件下最后一个大括号前添加:(在02节点也操作)

 include /usr/local/nginx/conf/vhosts/*.conf;

在这里插入图片描述
复制nginx.conf 文件和 vhosts目录

cp -r nginx.conf vhosts/ /etc/ansible/nginx_config/roles/new/files/

(3).编辑文件重新加载服务

vim /etc/ansible/nginx_config/roles/new/handlers/main.yml

内容:

- name: restart nginx
  shell: /etc/init.d/nginx reload

(4).编辑复制.conf和hosts的文件

vim /etc/ansible/nginx_config/roles/new/tasks/main.yml 

内容:

- name: copy conf file
  copy: src={{ item.src }} dest={{ nginx_basedir }}/{{ item.dest }} backup=yes owner=root group=root mode=0644
  with_items: 
    - { src: nginx.conf, dest: conf/nginx.conf }
    - { src: vhosts, dest: conf/ }
  notify: restart nginx

(5).编辑变量文件

vim /etc/ansible/nginx_config/roles/new/vars/main.yml 

内容:

nginx_basedir: /usr/local/nginx

(6).编辑更新的入口文件

cd /etc/ansible/nginx_config/
vim update.yml

这是更新的入口文件
内容:

---
- hosts: testhost
  user: root
  roles:
  - new

(7)编辑回滚的入口文件

**说明:**回滚操作就是把旧的配置覆盖,然后重新加载nginx服务, 每次改动nginx配置文件之前先备份到old里,对应目录为/etc/ansible/nginx_config/roles/old/files

vim backup.yml

内容:

---
- hosts: testhost
  user: root
  roles:
  - old

(8)执行

 ansible-playbook /etc/ansible/nginx_config/update.yml

在这里插入图片描述
执行回滚前,先备份旧的文件

rsync -av  /etc/ansible/nginx_config/roles/new/ /etc/ansible/nginx_config/roles/old/

在这里插入图片描述
然后执行
ansible-playbook /etc/ansible/nginx_config/backup.yml
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值