ansible运维实战
通过学习ansible自动化运维,初步对ansible有了一定的了解,此次分享两个案例,希望对大家有所帮助
案例一:自动化安装nginx
本次案例目的是ansible自动化安装nginx并配置
首先创建如图所示目录

在主机上安装好nginx,如下:
使用wget下载nginx包,下载地址:http://mirrors.sohu.com/nginx/nginx-1.9.6.tar.gz
对nginx进行解压
tar -zxvf nginx-1.9.6.tar.gz -C /usr/local
cd /usr/local/nginx-1.9.6
./configure --prefix=/usr/local/nginx
若是报错,根据提示安装好缺少的依赖
make && makeinstall
修改/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_tempdaemon $NGINX_SBIN -c $NGINX_CONFRETVAL=$?echoreturn $RETVAL
}
stop()
{echo -n $"Stopping $prog: "killproc -p $NGINX_PID $NGINX_SBIN -TERMrm -rf /dev/shm/nginx_tempRETVAL=$?echoreturn $RETVAL
}
reload()
{echo -n $"Reloading $prog: "killproc -p $NGINX_PID $NGINX_SBIN -HUPRETVAL=$?echoreturn $RETVAL
}
restart()
{stopstart
}
configtest()
{$NGINX_SBIN -c $NGINX_CONF -treturn 0
}
case "$1" instart)start;;stop)stop;;reload)reload;;restart)restart;;configtest)configtest;;*)echo $"Usage: $0 {start|stop|reload|restart|configtest}"RETVAL=1
esac
exit $RETVAL
授予权限
chmod 777 /etc/init.d/nginx
清空该文件并进行如下配置/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;
}
}
}
启动服务
service nginx start

将nginx的压缩包移动至目标目录下,复制启动脚本和配置文件到目标目录下
mv nginx-1.9.6.tar.gz /etc/ansible/nginx_install/roles/install/files/
cp /usr/local/nginx/conf/nginx.conf /etc/ansible/nginx_install/roles/install/templates/
cp /etc/init.d/nginx /etc/ansible/nginx_install/roles/install/templates/
在nginx_install目录下编写启动文件install.yml
---
- hosts: testremote_user: rootgather_facts: Trueroles:- common- install

在roles/common/tasks/main.yml文件下编写需要安装的依赖文件
- name: install initialization require softwareyum: name={{ item }} state=installedwith_items:- zlib-devel- pcre-devel- gcc

在 roles/install/vars/main.yml文件下定义各种变量
nginx_user: www
nginx_port: 80
nginx_basedir: /usr/local/nginx

在roles/install/tasks/copy.yml文件下编写需要复制的文件
- name: Copy Nginx Software #复制nginx安装包copy: src=nginx-1.9.6.tar.gz dest=/tmp/nginx-1.9.6.tar.gz owner=root group=root
- name: Uncompression Nginx Software #解压nginxshell: tar zxf /tmp/nginx-1.9.6.tar.gz -C /usr/local/
- name: Configure Nginx #编译安装nginxshell: cd /usr/local/nginx-1.9.6 && ./configure --prefix=/usr/local/nginx
- name: Make Nginx #初始化nginxshell: cd /usr/local/nginx-1.9.6 && make && make install
- name: Copy Nginx Start Script #复制nginx启动脚本template: src=nginx dest=/etc/init.d/nginx owner=root group=root mode=0755
- name: Copy Nginx Config #复制nginx配置文件template: src=nginx.conf dest={{ nginx_basedir }}/conf/ owner=root group=root mode=0644

在roles/install/tasks/install.yml下编写启动文件
- name: create nginx useruser: name={{ nginx_user }} state=present createhome=no shell=/sbin/nologin
- name: start nginx serviceshell: /etc/init.d/nginx start
- name: add boot start nginx serviceshell: chkconfig --level 345 nginx on
- name: delete nginx compression filesshell: rm -rf /tmp/nginx-1.9.6.tar.gz
在 roles/install/tasks/main.yml中编写主要文件
- include: copy.yml
- include: install.yml
执行脚本,结果如图所示

在test主机中查看nginx是否启动

可以看到启动成功
案例二:管理nginx配置文件
首先创建如下目录:

roles目录下分为new目录和old目录,new目录表示需要更新的配置文件,old目录为备份的文件。在做配置文件的时候,备份非常重要,在执行update.yml文件前应该备份好当前配置文件,出现错误时可以及时的回滚操作。
rsync -av /etc/ansible/nginx_config/roles/new/ /etc/ansible/nginx_config/roles/old/
使用该命令可以将new目录中的配置文件备份到old目录中
files目录中表示的是配置文件,可以自行添加,此处放置的为空目录。
handlers目录中表示的是重启服务,内容如下
- name: restart nginx #用于重新加载nginx服务shell: /etc/init.d/nginx reload
tasks目录中就是主要的命令,内容如下:
- name: copy conf file #复制.conf和hosts文件copy: src={{ item.src }} dest={{ nginx_basedir }}/{{ item.dest }} backup=yes owner=root group=root mode=0644with_items:- { src: nginx.conf, dest: conf/nginx.conf }- { src: vhosts, dest: conf/ }notify: restart nginx
vars目录中表示变量,内容如下:
nginx_basedir: /usr/local/nginx #定义变量
update.yml文件为更新文件,内容为:
---
- hosts: test #入口文件user: rootroles:- new #这里只有new
执行命令,结果如下:

由于此处的files目录中放置的是空目录,所以结果没有任何改变,可以自行添加配置文件进行修改。
相关文章:
ansible运维实战
通过学习ansible自动化运维,初步对ansible有了一定的了解,此次分享两个案例,希望对大家有所帮助 案例一:自动化安装nginx 本次案例目的是ansible自动化安装nginx并配置 首先创建如图所示目录 在主机上安装好nginx,如…...
DDOS分布式拒绝服务攻击
DDOS分布式拒绝服务攻击 简单来说 传统的DOS就是一台或者多台服务对一个受害目标(服务器,路由,ip,国家)进行攻击,当范围过大时就是DDOS。目的就是通过大规模的网络流量使得正常流量不能访问受害目标&…...
如何使用 Python 实现 UDP 通信?
1. UDP通信基础 UDP(用户数据报协议)是一种无连接的传输层协议,它提供了一种不可靠的数据传输服务,但具有较低的延迟和较小的开销。在Python中,可以使用socket模块来实现UDP通信。 2. 实现UDP服务端 import socketd…...
MTK 配置文件梳理
文章目录 MTK 日常配置总结屏幕默认横竖屏显示ro.build.characteristics 属性修改修改点一:build\core\product_config.mk修改点二:build\make\core\main.mk修改是否成功,adb 验证 配置部分系统app handheld_product.mk配置系统属性、第三方应…...
论文笔记:Treat Visual Tokens as Text? But Your MLLM Only Needs Fewer Efforts to See
2024 10月的arxiv 1 主要idea 针对多模态大模型(如LLaVA),提出了一系列高效的剪枝策略 在显著降低计算开销(多达 88%)的同时,保持了模型在多模态任务中的性能表现 2 目前的问题 与文本 token 相比&…...
软考高级架构 —— 10.6 大型网站系统架构演化实例 + 软件架构维护
10.6 大型网站系统架构演化实例 大型网站的技术挑战主要来自于庞大的用户,高并发的访问和海量的数据,主要解决这类问题。 1. 单体架构 特点: 所有资源(应用程序、数据库、文件)集中在一台服务器上。适用场景: 小型网站&am…...
2024美赛数学建模C题:网球比赛中的动量,用马尔可夫链求解!详细分析
文末获取历年美赛数学建模论文,交流思路模型 接下来讲解马尔可夫链在2024年C题中的运用 1. 马尔科夫链的基本原理 马尔科夫链是描述随机过程的一种数学模型,其核心特征是无记忆性。 简单来说,系统在某一时刻的状态只取决于当前状态&#x…...
23种设计模式之状态模式
目录 1. 简介2. 代码2.1 State (定义抽象状态接口)2.2 StartState (实现具体状态类)2.3 EndState (实现具体状态类)2.4 Context (定义上下文类)2.5 Test (测试类…...
Elasticsearch Serverless 中的数据流自动分片
作者:来自 Elastic Andrei Dan 在 Elastic Cloud Serverless 中,我们根据索引负载自动为数据流配置最佳分片数量,从而使用户无需摆弄分片。 传统上,用户会更改数据流的分片配置,以处理各种工作负载并充分利用可用资源。…...
YOLOv10改进,YOLOv10添加U-Netv2分割网络中SDI信息融合模块+GSConv卷积,助力小目标
理论介绍 完成本篇需要参考以下两篇文章,并已添加到YOLOv10代码中 YOLOv10改进,YOLOv10添加U-Netv2分割网络中SDI信息融合模块,助力小目标检测YOLOv10改进,YOLOv10添加GSConv卷积+Slim-neck,助力小目标检测,二次创新C2f结构下文都是手把手教程,跟着操作即可添加成功 目…...
xshell连接虚拟机,更换网络模式:NAT->桥接模式
NAT模式:虚拟机通过宿主机的网络访问外网。优点在于不需要手动配置IP地址和子网掩码,只要宿主机能够访问网络,虚拟机也能够访问。对外部网络而言,它看到的是宿主机的IP地址,而不是虚拟机的IP。但是,宿主机可…...
sql的where条件中使用case when
场景: 1、使用oracle数据库,数据类型为number,需要正无穷值。 2、数据表中有两个金额值,最大值和最小值, 如10~20, 30 ~40,40以上,数据库中这样设计 id name min max 1 j 10 20 2 …...
MacOS 上以源码形式安装 MySQL 5.7
以下是在 macOS 上从源码安装 MySQL 5.7 的步骤: 前置条件 安装 Homebrew:如果你还没有安装 Homebrew,可以在终端中运行以下命令进行安装: /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install…...
MySQL 事务隔离级别详解
一、事务的基本概念 (一)什么是事务 事务是一个逻辑工作单元,由一组数据库操作组成。这些操作要么全部成功执行,要么全部回滚,以确保数据库的一致性。事务具有以下四个特性,通常被称为 ACID 特性ÿ…...
C语言——高精度问题
1、高精度计算的本质:竖式计算; 2、适用解决超出long long int 范围的大整数计算 #include<stdio.h> #include<string.h> #define N 100 char str1[N4]{0},str2[N4]{0}; int arr1[N4]{0},arr2[N4]{0}; int ans[N5]{0};//将字符串转化成整型…...
aippt:AI 智能生成 PPT 的开源项目
aippt:AI 智能生成 PPT 的开源项目 在现代办公和学习中,PPT(PowerPoint Presentation)是一种非常重要的展示工具。然而,制作一份高质量的PPT往往需要花费大量的时间和精力。为了解决这一问题,aippt项目应运…...
【Qt之·类QSettings·参数保存】
系列文章目录 文章目录 前言一、概述1.1 QSetting是什么1.2 为什么学习QSetting是重要的 二、不同存储位置的优缺点三、 QSetting的高级用法四、实例演示总结 前言 在当今的应用程序开发中,设置管理是一个至关重要的方面。应用程序的设置包括用户偏好、配置选项和其…...
location重定向和nginx代理
文章目录 1 location重定向1.1 概述1.2 rewrite跳转1.3 用例1.4 实验1.4.1 基于域名的跳转1.4.2 基于ip的跳转1.4.3 基于后缀名的跳转 2 nginx的代理2.1 nginx内置变量2.2 正向代理2.2.1 固定正向代理2.2.2 自动代理 2.3 反向代理2.3.1 负载均衡的算法2.3.2 负载均衡的特点2.3.…...
iptables详解
华子目录 什么是防火墙分类netfilter(数据包过滤)定义netfilter分析内容 防火墙无法完成的任务netfilter策略管理工具netfilter的5类hook函数防火墙规则策略匹配原则iptablesiptables流量处理动作iptables表5种规则表 安装iptablesiptables策略文件 ipta…...
Edge SCDN深度解析,边缘安全加速的创新实践
边缘安全加速(Edge Secure Content Delivery Network,SCDN)是酷盾安全推出的边缘集分布式 DDoS 防护、CC 防护、WAF 防护、BOT 行为分析为一体的安全加速解决方案。通过边缘缓存技术,智能调度使用户就近获取所需内容,为…...
【模块化设计-14】深入解析 RT-Thread syswatch 系统监控模块:保障系统稳定的核心卫士
在嵌入式系统开发中,系统的稳定性是重中之重。RT-Thread 提供的 syswatch(系统监控)模块,专为解决线程异常阻塞、保障系统持续运行设计。本文将从模块设计理念、核心功能、配置项、工作流程到实际测试,全方位解析 sysw…...
Android自动化测试代理droidrun-agent:原理、实现与工程实践
1. 项目概述:一个面向Android应用的自动化测试代理在移动应用开发与测试领域,自动化测试是保障应用质量、提升迭代效率的核心环节。对于Android平台,虽然官方提供了Espresso、UI Automator等成熟的测试框架,但在面对复杂业务场景、…...
透视 Mission Control 源码:如何构建高性能的 Agent 实时监控架构?
在 AI Agent 爆火的当下,我们正从“对话式 AI”迈向“行为式 AI”。然而,当数十个 Agent 同时运行,处理复杂的链上交易或长程任务时,开发者面临的最大挑战往往是:观测性(Observability)。你无法…...
如何通过LizzieYzy围棋AI分析工具在30天内实现棋力突破:从入门到实战的完整指南
如何通过LizzieYzy围棋AI分析工具在30天内实现棋力突破:从入门到实战的完整指南 【免费下载链接】lizzieyzy LizzieYzy - GUI for Game of Go 项目地址: https://gitcode.com/gh_mirrors/li/lizzieyzy 在围棋AI技术飞速发展的今天,LizzieYzy作为一…...
如何快速部署开源捉妖雷达Web版:面向新手的完整实时妖怪追踪指南
如何快速部署开源捉妖雷达Web版:面向新手的完整实时妖怪追踪指南 【免费下载链接】zhuoyao_radar 捉妖雷达 web版 项目地址: https://gitcode.com/gh_mirrors/zh/zhuoyao_radar 捉妖雷达Web版是一款基于现代Web技术开发的实时妖怪追踪工具,专为捉…...
别再对着示波器数NOP了!用STM32的SPI+DMA驱动WS2812灯带,一个CubeMX配置就搞定
用STM32的SPIDMA高效驱动WS2812灯带:告别手动调时序的工程化方案 在嵌入式开发中,驱动WS2812灯带一直是个让人又爱又恨的挑战。这种智能RGB灯带以其简单的单线控制和丰富的色彩表现广受欢迎,但精确的时序要求也让不少开发者头疼不已。传统方法…...
使用Taotoken CLI工具一键配置团队开发环境与统一模型端点
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken CLI工具一键配置团队开发环境与统一模型端点 当团队需要统一接入多个大模型时,为每位成员手动配置API密钥…...
自指递归系统的唯一最优几何形态:黄金螺旋本征解必然性定理的严格证明(世毫九实验室原创研究)
自指递归系统的唯一最优几何形态:黄金螺旋本征解必然性定理的严格证明(世毫九实验室原创研究)作者:方见华 单位:世毫九实验室 摘要 针对自然界跨尺度普遍涌现的黄金螺旋结构是否仅为经验巧合或审美投射的长期争议&…...
NocoDB企业数据管理平台:如何用可视化数据库解决业务协作难题
NocoDB企业数据管理平台:如何用可视化数据库解决业务协作难题 【免费下载链接】nocodb 🔥 🔥 🔥 A Free & Self-hostable Airtable Alternative 项目地址: https://gitcode.com/GitHub_Trending/no/nocodb 在数字化转型…...
Chrome for Testing:如何用3个核心策略解决Web自动化测试的版本管理困境
Chrome for Testing:如何用3个核心策略解决Web自动化测试的版本管理困境 【免费下载链接】chrome-for-testing 项目地址: https://gitcode.com/gh_mirrors/ch/chrome-for-testing 在Web自动化测试领域,版本兼容性问题每年导致企业损失数千小时的…...
