hexo-blog-deploy/2021/03/10/ansible自动部署/index.html

16 lines
38 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width"><meta name="theme-color" content="#222"><meta name="generator" content="Hexo 5.4.2"><link rel="apple-touch-icon" sizes="180x180" href="/images/apple-touch-icon-next.png"><link rel="icon" type="image/png" sizes="32x32" href="/images/favicon-32x32-next.png"><link rel="icon" type="image/png" sizes="16x16" href="/images/favicon-16x16-next.png"><link rel="mask-icon" href="/images/logo.svg" color="#222"><link rel="stylesheet" href="/css/main.css"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css" integrity="sha256-HtsXJanqjKTc8vVQjO4YMhiqFoXkfBsjBWcX91T1jr8=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.css" integrity="sha256-Vzbj7sDDS/woiFS3uNKo8eIuni59rjyNGtXfstRzStA=" crossorigin="anonymous"><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/pace/1.2.4/themes/blue/pace-theme-minimal.css"><script src="https://cdnjs.cloudflare.com/ajax/libs/pace/1.2.4/pace.min.js" integrity="sha256-gqd7YTjg/BtfqWSwsJOvndl0Bxc8gFImLEkXQT8+qj0=" crossorigin="anonymous"></script><script class="next-config" data-name="main" type="application/json">{"hostname":"kiki.kim","root":"/","images":"/images","scheme":"Gemini","darkmode":false,"version":"8.15.1","exturl":false,"sidebar":{"position":"left","display":"post","padding":18,"offset":12},"copycode":{"enable":true,"style":"flat"},"bookmark":{"enable":false,"color":"#222","save":"auto"},"mediumzoom":false,"lazyload":false,"pangu":false,"comments":{"style":"tabs","active":null,"storage":true,"lazyload":false,"nav":null},"stickytabs":false,"motion":{"enable":false,"async":false,"transition":{"menu_item":"fadeInDown","post_block":"fadeIn","post_header":"fadeInDown","post_body":"fadeInDown","coll_header":"fadeInLeft","sidebar":"fadeInUp"}},"prism":false,"i18n":{"placeholder":"搜索...","empty":"没有找到任何搜索结果:${query}","hits_time":"找到 ${hits} 个搜索结果(用时 ${time} 毫秒)","hits":"找到 ${hits} 个搜索结果"},"path":"/search.xml","localsearch":{"enable":true,"trigger":"auto","top_n_per_article":1,"unescape":false,"preload":false}}</script><script src="/js/config.js"></script><meta name="description" content="Ansible是一种IT自动化工具。它可以配置系统部署软件以及协调更高级的IT任务例如持续部署滚动更新。Ansible适用于管理企业IT基础设施从具有少数主机的小规模到数千个实例的企业环境。Ansible也是一种简单的自动化语言可以完美地描述IT应用程序基础结构。"><meta property="og:type" content="article"><meta property="og:title" content="ansible自动部署"><meta property="og:url" content="http://kiki.kim/2021/03/10/ansible%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2/index.html"><meta property="og:site_name" content="随言碎语"><meta property="og:description" content="Ansible是一种IT自动化工具。它可以配置系统部署软件以及协调更高级的IT任务例如持续部署滚动更新。Ansible适用于管理企业IT基础设施从具有少数主机的小规模到数千个实例的企业环境。Ansible也是一种简单的自动化语言可以完美地描述IT应用程序基础结构。"><meta property="og:locale" content="zh_CN"><meta property="og:image" content="https://halliday.oss-cn-nanjing.aliyuncs.com/image-20230427145616259.png"><meta property="article:published_time" content="2021-03-10T11:56:34.000Z"><meta property="article:modified_time" content="2023-05-02T14:25:36.494Z"><meta property="article:author" content="小梦同学的blog"><meta property="article:tag" content="Linux"><meta property="article:tag" content="ansible"><meta property="article:tag" content="自动部署"><meta name="twitter:card" content="summary"><meta name="twitter:image" content="https://halliday.oss-cn-nanjing.aliyuncs.com/image-20230427145616259.png"><link rel="canonical" href="http://kiki.kim/2021/03/10/ansible%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2/"><script class="next-config" data-name="page" type="application/json">{"sidebar":"","isHome":false,"isPost":true,"lang":"zh-CN","comments":true,"permalink":"http://kiki.kim/2021/03/10/ansible%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2/","path":"2021/03/10/ansible自动部署/","title":"ansible自动部署"}</script><script class="next-config" data-name="calendar" type="application/json">""</script><title>ansible自动部署 | 随言碎语</title><noscript><link rel="stylesheet" href="/css/noscript.css"></noscript><link rel="alternate" href="/atom.xml" title="随言碎语" type="application/atom+xml"><style>.darkmode--activated{--body-bg-color:#282828;--content-bg-color:#333;--card-bg-color:#555;--text-color:#ccc;--blockquote-color:#bbb;--link-color:#ccc;--link-hover-color:#eee;--brand-color:#ddd;--brand-hover-color:#ddd;--table-row-odd-bg-color:#282828;--table-row-hover-bg-color:#363636;--menu-item-bg-color:#555;--btn-default-bg:#222;--btn-default-color:#ccc;--btn-default-border-color:#555;--btn-default-hover-bg:#666;--btn-default-hover-color:#ccc;--btn-default-hover-border-color:#666;--highlight-background:#282b2e;--highlight-foreground:#a9b7c6;--highlight-gutter-background:#34393d;--highlight-gutter-foreground:#9ca9b6}.darkmode--activated img{opacity:.75}.darkmode--activated img:hover{opacity:.9}.darkmode--activated code{color:#69dbdc;background:0 0}button.darkmode-toggle{z-index:9999}.darkmode-ignore,img{display:flex!important}.beian img{display:inline-block!important}</style></head><body itemscope itemtype="http://schema.org/WebPage"><div class="headband"></div><main class="main"><div class="column"><header class="header" itemscope itemtype="http://schema.org/WPHeader"><div class="site-brand-container"><div class="site-nav-toggle"><div class="toggle" aria-label="切换导航栏" role="button"><span class="toggle-line"></span> <span class="toggle-line"></span> <span class="toggle-line"></span></div></div><div class="site-meta"><a href="/" class="brand" rel="start"><i class="logo-line"></i><p class="site-title">随言碎语</p><i class="logo-line"></i></a><p class="site-subtitle" itemprop="description">咕叽咕叽</p></div><div class="site-nav-right"><div class="toggle popup-trigger" aria-label="搜索" role="button"><i class="fa fa-search fa-fw fa-lg"></i></div></div></div><nav class="site-nav"><ul class="main-menu menu"><li class="menu-item menu-item-home"><a href="/" rel="section"><i class="fa fa-home fa-fw"></i>首页</a></li><li class="menu-item menu-item-tags"><a href="/tags/" rel="section"><i class="fa fa-tags fa-fw"></i>标签<span class="badge">63</span></a></li><li class="menu-item menu-item-archives"><a href="/archives/" rel="section"><i class="fa fa-archive fa-fw"></i>归档<span class="badge">55</span></a></li><li class="menu-item menu-item-talk"><a href="/talk/" rel="section"><i class="fa fa-commenting fa-fw"></i>碎语湖</a></li><li class="menu-item menu-item-guestbook"><a href="/guestbook/" rel="section"><i class="fa fa-book fa-fw"></i>留言板</a></li><li class="menu-item menu-item-about"><a href="/about/" rel="section"><i class="fa fa-user fa-fw"></i>关于</a></li><li class="menu-item menu-item-search"><a role="button" class="popup-trigger"><i class="fa fa-search fa-fw"></i>搜索</a></li></ul></nav><div class="search-pop-overlay"><div class="popup search-popup"><div class="search-header"><span class="search-icon"><i class="fa fa-search"></i></span><div class="search-input-container"><input autocomplete="off" autocapitalize="off" maxlength="80" placeholder="搜索..." spellcheck="false" type="search" class="search-input"></div><span class="popup-btn-close" role="button"><i class="fa fa-times-circle"></i></span></div><div class="search-result-container no-result"><div class="search-result-icon"><i class="fa fa-spinner fa-pulse fa-5x"></i></div></div></div></div><script type="text/javascript" src="/js/cursor/zjAdd.js"></script><div class="musicwyy2" style="top:200px;position:fixed;left:0;bottom:0;z-index:105;opacity:1;width:45px;height:45px;font-size:45px;font-family:'Long Cang'"><button type="button" style="top:200px;width:45px;height:45px;margin-top:10px;margin-bottom:10px;border-width:0;z-index:200;background:0 0;border-width:0;outline:0" onclick="musicChange()"><img src="/images/wy.svg"></button></div><div class="musicwyy1" style="position:fixed;top:200px;left:0;bottom:0;z-index:100;opacity:1;width:45px;height:45px;font-size:0"><div class="aplayer-miniswitcher" style="top:200px;height:110px;width:20px;display:inline-block;overflow:hidden"></div><div style="width:calc(100% - 30px);top:200px;height:110px;display:none" id="musicZJ"><div class="musicwyy1" style="position:fixed;top:200px;left:15px;bottom:0;z-index:100;opacity:1;width:300px;height:110px;font-size:0"><div class="aplayer-miniswitcher" style="top:200px;height:110px;width:20px;display:inline-block;overflow:hidden"></div><div style="width:calc(100% - 30px);top:200px;height:110px;display:inline-block" id="musicZJ"><iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width="330" height="450" src="//music.163.com/outchain/player?type=0&id=8009036598&auto=0&height=430"></iframe></div></div></div></div></header><aside class="sidebar"><div class="sidebar-inner sidebar-nav-active sidebar-toc-active"><ul class="sidebar-nav"><li class="sidebar-nav-toc">文章目录</li><li class="sidebar-nav-overview">站点概览</li></ul><div class="sidebar-panel-container"><div class="post-toc-wrap sidebar-panel"><div class="post-toc animated"><ol class="nav"><li class="nav-item nav-level-2"><a class="nav-link" href="#1-%E7%AE%80%E4%BB%8B"><span class="nav-number">1.</span> <span class="nav-text">1.简介</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#2-%E5%AE%89%E8%A3%85%E4%B8%8E%E4%BD%BF%E7%94%A8"><span class="nav-number">2.</span> <span class="nav-text">2.安装与使用</span></a></li><li class="nav-item nav-level-2"><a class="nav-link" href="#3-playbook"><span class="nav-number">3.</span> <span class="nav-text">3. playbook</span></a></li></ol></div></div><div class="site-overview-wrap sidebar-panel"><div class="site-author animated" itemprop="author" itemscope itemtype="http://schema.org/Person"><img class="site-author-image" itemprop="image" alt="小梦同学的blog" src="https://halliday.oss-cn-nanjing.aliyuncs.com/imagesbjx.png"><p class="site-author-name" itemprop="name">小梦同学的blog</p><div class="site-description" itemprop="description">欲买桂花同载酒,终不似,少年游。</div></div><div class="site-state-wrap animated"><nav class="site-state"><div class="site-state-item site-state-posts"><a href="/archives/"><span class="site-state-item-count">55</span> <span class="site-state-item-name">日志</span></a></div><div class="site-state-item site-state-tags"><a href="/tags/"><span class="site-state-item-count">63</span> <span class="site-state-item-name">标签</span></a></div></nav></div><div class="links-of-author animated"><span class="links-of-author-item"><a href="https://github.com/M-HALLIDAY" title="GitHub → https:&#x2F;&#x2F;github.com&#x2F;M-HALLIDAY" rel="noopener me" target="_blank"><i class="fab fa-github fa-fw"></i></a> </span><span class="links-of-author-item"><a href="mailto:halliday2023@163.com" title="E-Mail → mailto:halliday2023@163.com" rel="noopener me" target="_blank"><i class="fa fa-envelope fa-fw"></i></a> </span><span class="links-of-author-item"><a href="/atom.xml" title="RSS → &#x2F;atom.xml" rel="noopener me"><i class="fa fa-rss-square fa-fw"></i></a></span></div><div class="cc-license animated" itemprop="license"><a href="https://creativecommons.org/licenses/by-nc-sa/4.0/zh-CN" class="cc-opacity" rel="noopener" target="_blank"><img src="https://cdnjs.cloudflare.com/ajax/libs/creativecommons-vocabulary/2020.11.3/assets/license_badges/small/by_nc_sa.svg" alt="Creative Commons"></a></div></div></div></div></aside></div><div class="main-inner post posts-expand"><div class="post-block"><article itemscope itemtype="http://schema.org/Article" class="post-content" lang="zh-CN"><link itemprop="mainEntityOfPage" href="http://kiki.kim/2021/03/10/ansible%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2/"><span hidden itemprop="author" itemscope itemtype="http://schema.org/Person"><meta itemprop="image" content="https://halliday.oss-cn-nanjing.aliyuncs.com/imagesbjx.png"><meta itemprop="name" content="小梦同学的blog"></span><span hidden itemprop="publisher" itemscope itemtype="http://schema.org/Organization"><meta itemprop="name" content="随言碎语"><meta itemprop="description" content="欲买桂花同载酒,终不似,少年游。"></span><span hidden itemprop="post" itemscope itemtype="http://schema.org/CreativeWork"><meta itemprop="name" content="ansible自动部署 | 随言碎语"><meta itemprop="description" content=""></span><header class="post-header"><h1 class="post-title" itemprop="name headline">ansible自动部署</h1><div class="post-meta-container"><div class="post-meta"><span class="post-meta-item"><span class="post-meta-item-icon"><i class="far fa-calendar"></i> </span><span class="post-meta-item-text">发表于</span> <time title="创建时间2021-03-10 19:56:34" itemprop="dateCreated datePublished" datetime="2021-03-10T19:56:34+08:00">2021-03-10</time> </span><span class="post-meta-item"><span class="post-meta-item-icon"><i class="far fa-calendar-check"></i> </span><span class="post-meta-item-text">更新于</span> <time title="修改时间2023-05-02 22:25:36" itemprop="dateModified" datetime="2023-05-02T22:25:36+08:00">2023-05-02</time> </span><span class="post-meta-item" title="阅读次数" id="busuanzi_container_page_pv"><span class="post-meta-item-icon"><i class="far fa-eye"></i> </span><span class="post-meta-item-text">阅读次数:</span> <span id="busuanzi_value_page_pv"></span> </span><span class="post-meta-break"></span> <span class="post-meta-item" title="本文字数"><span class="post-meta-item-icon"><i class="far fa-file-word"></i> </span><span class="post-meta-item-text">本文字数:</span> <span>3.6k</span> </span><span class="post-meta-item" title="阅读时长"><span class="post-meta-item-icon"><i class="far fa-clock"></i> </span><span class="post-meta-item-text">阅读时长 &asymp;</span> <span>7 分钟</span></span></div></div></header><div class="post-body" itemprop="articleBody"><p>Ansible是一种IT自动化工具。它可以配置系统部署软件以及协调更高级的IT任务例如持续部署滚动更新。Ansible适用于管理企业IT基础设施从具有少数主机的小规模到数千个实例的企业环境。Ansible也是一种简单的自动化语言可以完美地描述IT应用程序基础结构。</p><span id="more"></span><h2 id="1-简介">1.简介</h2><ol><li><p>Ansible可以同时管理Redhat系的LinuxDebian系的Linux以及Windows主机。管理节点只在执行脚本时与远程主机连接没有特别的同步机制所以断电等异常一般不会影响ansbile。</p></li><li><p>ansible 基于Python开发集合了众多运维工具puppet、cfengine、chef、func、fabric的优点实现了批量系统配置、批量程序部署、批量运行命令等功能。ansible是基于模块工作的本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块ansible只是提供一种框架。主要包括</p><ul><li>连接插件connection plugins负责和被监控端实现通信</li><li>host inventory指定操作的主机是一个配置文件里面定义监控的主机</li><li>各种模块核心模块、command模块、自定义模块</li><li>借助于插件完成记录日志邮件等功能;</li><li>playbook剧本执行多个任务时非必需可以让节点一次性运行多个任务。</li></ul></li><li><p>示意图</p><p><img src="https://halliday.oss-cn-nanjing.aliyuncs.com/image-20230427145616259.png" alt="image-20230427145616259"></p></li></ol><h2 id="2-安装与使用">2.安装与使用</h2><ol><li>环境</li></ol><table><thead><tr><th>服务</th><th>主机名称</th><th>IP地址</th></tr></thead><tbody><tr><td>服务端</td><td>master</td><td>192.168.2.3</td></tr><tr><td>客户端</td><td>node1</td><td>192.168.2.4</td></tr><tr><td>客户端</td><td>node2</td><td>192.168.2.5</td></tr></tbody></table><ol start="2"><li><p>服务端安装ansible</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">yum install -y epel-release</span><br><span class="line">yum install ansible -y</span><br><span class="line"></span><br><span class="line">//查看ansible的版本</span><br><span class="line">ansible --version</span><br><span class="line"></span><br><span class="line">yum install -y tree</span><br><span class="line">tree /etc/ansible/</span><br><span class="line"></span><br></pre></td></tr></table></figure></li><li><p>配置公私钥</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"> ssh-keygen -t rsa</span><br><span class="line"> </span><br><span class="line"> 将生成的公钥发给所有机器,包括自己</span><br><span class="line"> ssh-copy-id root@192.168.2.3</span><br><span class="line"> ssh-copy-id root@192.168.2.4</span><br><span class="line"> ssh-copy-id root@192.168.2.5</span><br><span class="line"> </span><br><span class="line"> ---这样的话从3访问4和5就都不要输入密码了</span><br><span class="line"></span><br><span class="line">4. 配置hosts文件</span><br><span class="line"></span><br><span class="line"> ```shell</span><br><span class="line"> vim /etc/ansible/hosts</span><br><span class="line"> </span><br><span class="line"> [webserver]</span><br><span class="line"> 192.168.2.4</span><br><span class="line"> 192.168.2.5</span><br></pre></td></tr></table></figure></li><li><p>主机连通测试</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">ansible webserver -m ping</span><br><span class="line"></span><br><span class="line">[root@c1 ~]# ansible webserver -m ping</span><br><span class="line">192.168.2.4 | SUCCESS =&gt; &#123;</span><br><span class="line"> &quot;changed&quot;: false, </span><br><span class="line"> &quot;ping&quot;: &quot;pong&quot;</span><br><span class="line">&#125;</span><br><span class="line">192.168.2.4 | SUCCESS =&gt; &#123;</span><br><span class="line"> &quot;changed&quot;: false, </span><br><span class="line"> &quot;ping&quot;: &quot;pong&quot;</span><br><span class="line">&#125;</span><br><span class="line"></span><br></pre></td></tr></table></figure></li><li><p>常用命令</p><figure class="highlight shell"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line">ansible-doc -l #查看支持的模块</span><br><span class="line">ansible-doc -s MODEL_NAME #查看模块用法</span><br><span class="line">ansible命令应用基础</span><br><span class="line">ansible &lt;host-pattern&gt; [options]</span><br><span class="line">-f fork:启动并发 线程数</span><br><span class="line">-m model_name:要使用的模块</span><br><span class="line">-a args:特有的参数</span><br><span class="line"></span><br><span class="line">ansible all -m ping #查看client端是否正常ping通</span><br><span class="line">ansible webserver -m setup #查看客户端信息</span><br><span class="line">ansible webserver -m copy -a &#x27;src=/root/git_test/code.txt dest=/root/test&#x27; #copy文件到client端</span><br><span class="line">ansible webserver -m user -a &quot;name=test state=present&quot; #创建test用户</span><br><span class="line">ansible webserver -m user -a &quot;name=test state=absent&quot; #删除test用户</span><br><span class="line">ansible webserver -m yum -a &#x27;name=epel-relese state=latest&#x27; #yum安装</span><br><span class="line">ansible webserver -m systemd -a &#x27;name=httpd state=stopped enabled=no&#x27; #停止httpd服务</span><br><span class="line">ansible webserver -m script -a &#x27;/tmp/test,sh&#x27; #运行脚本</span><br><span class="line">ansible webserver -m command &#x27;date&#x27; #查看时间</span><br><span class="line"></span><br></pre></td></tr></table></figure><h2 id="3-playbook">3. playbook</h2><ul><li>执行一些简单的任务使用ad-hoc命令可以方便的解决问题但是有时一个设施过于复杂需要大量的操作的时候执行的ad-hoc命令是不合适的这时候最好使用playbook。</li><li>就像执行shell命令与写shell脚本一样也可以理解为批处理任务不过playbook有自己的语法格式</li><li>使用playbook可以方便的重复使用这些代码可以移植到不同的机器上面像函数一样最大化的利用代码。在你使用Ansible的过程中你也会发现你所处理的大部分操作都是编写playbook。可以把常见的应用都编写playbook之后管理服务器会变得很简单。</li></ul></li></ol><p>例如一个安装并运行nginx的任务:</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">---</span></span><br><span class="line"><span class="bullet">-</span> <span class="attr">hosts:</span> <span class="string">web</span></span><br><span class="line"> <span class="attr">remote_user:</span> <span class="string">root</span></span><br><span class="line"> <span class="attr">tasks:</span></span><br><span class="line"> </span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">install</span> <span class="string">nginx</span> <span class="comment">##安装模块需要在被控主机里加上nginx的源</span></span><br><span class="line"> <span class="attr">yum:</span> <span class="string">name=nginx</span> <span class="string">state=present</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">copy</span> <span class="string">nginx.conf</span> <span class="comment">##复制nginx的配置文件过去需要在本机的/tmp目录下编辑nginx.conf</span></span><br><span class="line"> <span class="attr">copy:</span> <span class="string">src=/tmp/nginx.conf</span> <span class="string">dest=/etc/nginx/nginx.conf</span> <span class="string">backup=yes</span></span><br><span class="line"> <span class="attr">notify:</span> <span class="string">reload</span> <span class="comment">#当nginx.conf发生改变时通知给相应的handlers</span></span><br><span class="line"> <span class="attr">tags:</span> <span class="string">reloadnginx</span> <span class="comment">#打标签</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">start</span> <span class="string">nginx</span> <span class="string">service</span> <span class="comment">#服务启动模块</span></span><br><span class="line"> <span class="attr">service:</span> <span class="string">name=nginx</span> <span class="string">state=started</span></span><br><span class="line"> <span class="attr">tags:</span> <span class="string">startnginx</span> <span class="comment">#打标签</span></span><br><span class="line"> </span><br><span class="line"> <span class="string">handlers</span></span><br><span class="line"> <span class="bullet">-</span> <span class="attr">name:</span> <span class="string">reload</span></span><br><span class="line"> <span class="attr">service:</span> <span class="string">name=nginx</span> <span class="string">state=restarted</span></span><br><span class="line"></span><br></pre></td></tr></table></figure><p>运行</p><figure class="highlight yaml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line">[<span class="string">root@ansible</span> <span class="string">ansible</span>]<span class="comment"># ansible-playbook nginx.yml </span></span><br><span class="line"> </span><br><span class="line"><span class="string">PLAY</span> [<span class="string">web</span>] <span class="string">*********************************************************************</span></span><br><span class="line"> </span><br><span class="line"><span class="string">TASK</span> [<span class="string">Gathering</span> <span class="string">Facts</span>] <span class="string">*********************************************************</span></span><br><span class="line"><span class="attr">ok:</span> [<span class="number">192.168</span><span class="number">.2</span><span class="number">.3</span>]</span><br><span class="line"> </span><br><span class="line"><span class="string">TASK</span> [<span class="string">install</span> <span class="string">nginx</span>] <span class="string">***********************************************************</span></span><br><span class="line"><span class="attr">changed:</span> [<span class="number">192.168</span><span class="number">.2</span><span class="number">.3</span>]</span><br><span class="line"> </span><br><span class="line"><span class="string">TASK</span> [<span class="string">copy</span> <span class="string">nginx.conf</span>] <span class="string">*********************************************************</span></span><br><span class="line"><span class="attr">ok:</span> [<span class="number">192.168</span><span class="number">.2</span><span class="number">.3</span>]</span><br><span class="line"> </span><br><span class="line"><span class="string">TASK</span> [<span class="string">start</span> <span class="string">nginx</span> <span class="string">service</span>] <span class="string">*****************************************************</span></span><br><span class="line"><span class="attr">changed:</span> [<span class="number">192.168</span><span class="number">.2</span><span class="number">.3</span>]</span><br><span class="line"> </span><br><span class="line"><span class="string">PLAY</span> <span class="string">RECAP</span> <span class="string">*********************************************************************</span></span><br><span class="line"><span class="attr">192.168.2.3 :</span> <span class="string">ok=4</span> <span class="string">changed=2</span> <span class="string">unreachable=0</span> <span class="string">failed=0</span> <span class="string">skipped=0</span> <span class="string">rescued=0</span> <span class="string">ignored=0</span> </span><br><span class="line"> </span><br><span class="line"> </span><br><span class="line"><span class="comment">##查看被控主机上的nginx服务</span></span><br><span class="line">[<span class="string">root@ansible</span> <span class="string">ansible</span>]<span class="comment"># ansible web -m shell -a &#x27;netstat -natp | grep nginx&#x27;</span></span><br><span class="line"><span class="number">192.168</span><span class="number">.2</span><span class="number">.3</span> <span class="string">|</span> <span class="string">CHANGED</span> <span class="string">|</span> <span class="string">rc=0</span> <span class="string">&gt;&gt;</span></span><br><span class="line"><span class="string">tcp</span> <span class="number">0</span> <span class="number">0</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span><span class="string">:80</span> <span class="number">0.0</span><span class="number">.0</span><span class="number">.0</span><span class="string">:*</span> <span class="attr">LISTEN 2720/nginx:</span> <span class="string">master</span> </span><br><span class="line"></span><br></pre></td></tr></table></figure><p>以上只是一个简单的实现使用ansible还能做更加复杂的事情。</p></div><footer class="post-footer"><div><div style="text-align:center;color:#ccc;font-size:24px;padding-top:10px">----- The End -----</div><div><center><link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/social-share.js/1.0.16/css/share.min.css"><div class="social-share" data-sites="weibo, qq, qzone,wechat"></div><script src="http://apps.bdimg.com/libs/jquery/1.8.2/jquery.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/social-share.js/1.0.16/js/social-share.min.js"></script></center></div></div><div class="post-copyright"><ul><li class="post-copyright-author"><strong>本文作者: </strong>小梦同学的blog</li><li class="post-copyright-link"><strong>本文链接:</strong> <a href="http://kiki.kim/2021/03/10/ansible%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2/" title="ansible自动部署">http://kiki.kim/2021/03/10/ansible自动部署/</a></li><li class="post-copyright-license"><strong>版权声明: </strong>本博客所有文章除特别声明外,均采用 <a href="https://creativecommons.org/licenses/by-nc-sa/4.0/zh-CN" rel="noopener" target="_blank"><i class="fab fa-fw fa-creative-commons"></i>BY-NC-SA</a> 许可协议。转载请注明出处!</li></ul></div><div class="post-tags"><a href="/tags/Linux/" rel="tag"><i class="fa fa-tag"></i> Linux</a> <a href="/tags/ansible/" rel="tag"><i class="fa fa-tag"></i> ansible</a> <a href="/tags/%E8%87%AA%E5%8A%A8%E9%83%A8%E7%BD%B2/" rel="tag"><i class="fa fa-tag"></i> 自动部署</a></div><script type="text/javascript">for(var tagsall=document.getElementsByClassName("post-tags"),i=tagsall.length-1;0<=i;i--)for(var tags=tagsall[i].getElementsByTagName("a"),j=tags.length-1;0<=j;j--){var r,g,b,golden_ratio=.618033988749895,s=.5,v=.999,h=golden_ratio+.8*Math.random()-.5,h_i=parseInt(6*h),f=6*h-h_i,p=v*(1-s),q=v*(1-f*s),t=v*(1-(1-f)*s);switch(h_i){case 0:r=v,g=t,b=p;break;case 1:r=q,g=v,b=p;break;case 2:r=p,g=v,b=t;break;case 3:r=p,g=q,b=v;break;case 4:r=t,g=p,b=v;break;case 5:r=v,g=p,b=q;break;default:b=g=r=1}tags[j].style.background="rgba("+parseInt(255*r)+","+parseInt(255*g)+","+parseInt(255*b)+",0.5)"}</script><div class="post-nav"><div class="post-nav-item"><a href="/2021/02/23/virtualbox+vagrant%E7%AE%A1%E7%90%86%E8%99%9A%E6%8B%9F%E6%9C%BA/" rel="prev" title="virtualbox+vagrant管理虚拟机"><i class="fa fa-chevron-left"></i> virtualbox+vagrant管理虚拟机</a></div><div class="post-nav-item"><a href="/2021/03/23/%E4%BD%BF%E7%94%A8ANT%E8%BF%9B%E8%A1%8C%E9%A1%B9%E7%9B%AE%E7%9A%84%E6%9E%84%E5%BB%BA%E5%92%8C%E6%89%93%E5%8C%85/" rel="next" title="使用ANT进行项目的构建和打包">使用ANT进行项目的构建和打包 <i class="fa fa-chevron-right"></i></a></div></div></footer></article></div></div></main><footer class="footer"><div class="footer-inner"><div class="beian"><a href="https://beian.miit.gov.cn/" rel="noopener" target="_blank">苏ICP备2021047152号-1 </a><img src="https://www.beian.gov.cn/img/new/gongan.png" alt=""><a href="http://www.beian.gov.cn/portal/registerSystemInfo?recordcode=%E7%94%B3%E8%AF%B7%E4%B8%AD" rel="noopener" target="_blank">申请中</a></div><div class="copyright">&copy; <span itemprop="copyrightYear">2023</span> <span class="with-love"><i class="fa fa-heart"></i> </span><span class="author" itemprop="copyrightHolder">小梦同学的blog</span></div><div class="busuanzi-count"><span class="post-meta-item" id="busuanzi_container_site_uv"><span class="post-meta-item-icon"><i class="fa fa-user"></i> </span><span class="site-uv" title="总访客量"><span id="busuanzi_value_site_uv"></span> </span></span><span class="post-meta-item" id="busuanzi_container_site_pv"><span class="post-meta-item-icon"><i class="fa fa-eye"></i> </span><span class="site-pv" title="总访问量"><span id="busuanzi_value_site_pv"></span></span></span></div><div class="powered-by"><a href="https://hexo.io/" rel="noopener" target="_blank">Hexo</a> & <a href="https://theme-next.js.org/" rel="noopener" target="_blank">NexT.Gemini</a> 强力驱动</div><span id="timeDate">载入天数...</span> <span id="times">载入时分秒...</span><script>var now=new Date;function createtime(){var n=new Date("03/01/2023 10:00:00");now.setTime(now.getTime()+250),days=(now-n)/1e3/60/60/24,dnum=Math.floor(days),hours=(now-n)/1e3/60/60-24*dnum,hnum=Math.floor(hours),1==String(hnum).length&&(hnum="0"+hnum),minutes=(now-n)/1e3/60-1440*dnum-60*hnum,mnum=Math.floor(minutes),1==String(mnum).length&&(mnum="0"+mnum),seconds=(now-n)/1e3-86400*dnum-3600*hnum-60*mnum,snum=Math.round(seconds),1==String(snum).length&&(snum="0"+snum),document.getElementById("timeDate").innerHTML="本站已安全运行 "+dnum+" 天 ",document.getElementById("times").innerHTML=hnum+" 小时 "+mnum+" 分 "+snum+" 秒."}setInterval("createtime()",250)</script></div></footer><div class="back-to-top" role="button" aria-label="返回顶部"><i class="fa fa-arrow-up fa-lg"></i> <span>0%</span></div><div class="reading-progress-bar"></div><a href="https://github.com/M-HALLIDAY" class="github-corner" title="在 GitHub 上关注我" aria-label="在 GitHub 上关注我" rel="noopener" target="_blank"><svg width="80" height="80" viewBox="0 0 250 250" aria-hidden="true"><path d="M0,0 L115,115 L130,115 L142,142 L250,250 L250,0 Z"></path><path d="M128.3,109.0 C113.8,99.7 119.0,89.6 119.0,89.6 C122.0,82.7 120.5,78.6 120.5,78.6 C119.2,72.0 123.4,76.3 123.4,76.3 C127.3,80.9 125.5,87.3 125.5,87.3 C122.9,97.6 130.6,101.9 134.4,103.2" fill="currentColor" style="transform-origin:130px 106px" class="octo-arm"></path><path d="M115.0,115.0 C114.9,115.1 118.7,116.5 119.8,115.4 L133.7,101.6 C136.9,99.2 139.9,98.4 142.2,98.6 C133.8,88.0 127.5,74.4 143.8,58.0 C148.5,53.4 154.0,51.2 159.7,51.0 C160.3,49.4 163.2,43.6 171.4,40.1 C171.4,40.1 176.1,42.5 178.8,56.2 C183.1,58.6 187.2,61.8 190.9,65.4 C194.5,69.0 197.7,73.2 200.1,77.6 C213.8,80.2 216.3,84.9 216.3,84.9 C212.7,93.1 206.9,96.0 205.4,96.6 C205.1,102.4 203.0,107.8 198.3,112.5 C181.9,128.9 168.3,122.5 157.7,114.1 C157.9,116.9 156.7,120.9 152.7,124.9 L141.0,136.5 C139.8,137.7 141.6,141.9 141.8,141.8 Z" fill="currentColor" class="octo-body"></path></svg></a><noscript><div class="noscript-warning">Theme NexT works best with JavaScript enabled</div></noscript><script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/3.2.1/anime.min.js" integrity="sha256-XL2inqUJaslATFnHdJOi9GfQ60on8Wx1C2H8DYiN1xY=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/next-theme-pjax/0.6.0/pjax.min.js" integrity="sha256-vxLn1tSKWD4dqbMRyv940UYw4sXgMtYcK6reefzZrao=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.4/jquery.min.js" integrity="sha256-oP6HI9z1XaZNBrJURtCoUT5SUnxFr8s3BzRl+cbzUq8=" crossorigin="anonymous"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/fancybox/3.5.7/jquery.fancybox.min.js" integrity="sha256-yt2kYMy0w8AbtF89WXb2P1rfjcP/HTHLT7097U8Y5b8=" crossorigin="anonymous"></script><script src="/js/comments.js"></script><script src="/js/utils.js"></script><script src="/js/next-boot.js"></script><script src="/js/pjax.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/hexo-generator-searchdb/1.4.1/search.js" integrity="sha256-1kfA5uHPf65M5cphT2dvymhkuyHPQp5A53EGZOnOLmc=" crossorigin="anonymous"></script><script src="/js/third-party/search/local-search.js"></script><script src="/js/third-party/fancybox.js"></script><script src="/js/third-party/pace.js"></script><script data-pjax async src="https://busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><script src="https://unpkg.com/darkmode-js@1.5.7/lib/darkmode-js.min.js"></script><script>var options = {
bottom: '64px',
right: 'unset',
left: '32px',
time: '0.5s',
mixColor: 'transparent',
backgroundColor: 'transparent',
buttonColorDark: '#100f2c',
buttonColorLight: '#fff',
saveInCookies: true,
label: '🌓',
autoMatchOsTheme: true
}
const darkmode = new Darkmode(options);
window.darkmode = darkmode;
darkmode.showWidget();</script><script async src="/js/cursor/love.min.js"></script><script type="text/javascript" src="//cdn.bootcss.com/canvas-nest.js/1.0.0/canvas-nest.min.js"></script></body></html>