news 2026/7/4 20:00:26

从零开始Ansible入门:一个“遥控器“搞定100台服务器(小白也能看懂)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从零开始Ansible入门:一个“遥控器“搞定100台服务器(小白也能看懂)

从零开始Ansible入门:一个"遥控器"搞定100台服务器(小白也能看懂)

前言

想象一下这个场景:你是一家公司的运维,手上有100台服务器,老板让你在每台机器上都装上Nginx。传统做法是什么?一台一台登录上去,敲命令、等安装、再敲下一台……运气好一天能搞完,运气不好中间出点错,可能得加班到半夜。

但如果有一个"遥控器",你按一下按钮,100台机器同时开始装Nginx,你会怎么选?

Ansible就是那个遥控器。

今天这篇文章,我就带大家从零开始,把Ansible这个"遥控器"彻底搞明白。全文都是大白话,不需要你有运维基础,跟着做就行。

一、Ansible到底是什么?

Ansible是一个开源的自动化运维工具,专门用来做配置管理、应用部署和任务自动化。

你只需要在一台电脑(叫"控制节点")上安装Ansible,然后通过SSH就能指挥所有其他服务器(叫"受控节点")干活。

Ansible最大的王牌优点:受控节点上不需要安装任何额外软件。只要能SSH连上,就能管。这就意味着你不用去每台机器上装Agent(代理程序),省去了大量前期准备工作。

一句话总结:Ansible = 一个通过SSH遥控多台服务器的自动化工具。

二、Ansible到底能干什么?——解决运维的5大"手酸"场景

很多小白以为Ansible只能装软件,那就大材小用了。在日常工作中,它主要帮你干掉下面这5类让人"手酸"的重复劳动:

场景1:系统环境标准化(再也不用"我这跑得好好的啊")

开发、测试、生产环境总是不一致?用Ansible写一个"系统初始化剧本",一键让所有机器的时区、DNS、内核参数、防火墙规则、Java环境统统变成一模一样的。彻底杜绝"环境不一致"导致的奇葩Bug。

场景2:应用一键部署(告别手动上传压缩包)

无论是Java的jar包、Python的Flask应用,还是前端静态资源,Ansible都能做到:从Git拉取代码 → 编译打包 → 分发到所有服务器 → 平滑重启服务。把发版时间从半小时缩短到1分钟。

场景3:批量系统维护(老板再也不用担心我加班)

  • 紧急漏洞爆发?一条命令给100台机器打补丁。

  • 日志把磁盘写满了?一条命令批量清理3天前的日志。

  • 需要新开账号?一条命令给所有机器创建deploy用户并配置SSH密钥。

场景4:配置漂移修复(服务器的"后悔药")

如果有人在线上机器胡乱改了什么配置,Ansible可以设定"定期执行剧本"。它会自动检查当前配置是否和剧本定义的一致,如果不一致,自动改回来。保证服务器永远处于"理想状态"。

场景5:云主机动态扩容

结合AWS、阿里云、腾讯云的API,当流量暴增时,Ansible可以自动创建云主机→ 自动加入负载均衡 → 自动部署好应用,全程无需人工介入。ansible架构图如图:

三、安装Ansible——3种方式任选

Ansible的安装非常简单,根据你的操作系统选择对应的命令即可。

🐧 方式一:CentOS / RHEL 系统

CentOS 7默认仓库没有Ansible,需要先添加EPEL源:

bash

# CentOS 7 sudo yum install epel-release -y sudo yum install ansible -y

CentOS 9及以上推荐使用dnf:

bash

# CentOS 9+ sudo dnf install epel-release -y sudo dnf install ansible -y

🐧 方式二:Ubuntu / Debian 系统

bash

sudo apt update sudo apt install ansible -y

🐍 方式三:使用pip安装(通用,推荐Python开发者)

bash

pip install ansible

✅ 验证安装是否成功

安装完成后,运行以下命令查看版本信息:

bash

ansible --version

如果能看到版本号输出(比如ansible 2.9.27),说明安装成功了!

四、核心概念——先记住这4个词

在开始使用之前,先理解Ansible的4个核心概念,后面实战就靠它们:

概念大白话解释
控制节点安装Ansible的那台电脑,你是"指挥官"
受控节点被管理的服务器,啥都不用装,能SSH就行
Inventory(清单)记录所有受控节点IP和分组的"花名册"
模块(Module)Ansible的"工具箱",每个工具干一件具体的事
Playbook(剧本)把多个任务写成一个YAML文件,一键执行

五、Ansible项目的"全家桶"——各个文件到底是干嘛的?(⭐重点)

很多新手刚接触Ansible时,看到一堆文件和文件夹就懵了。别慌,这里帮你把最核心、最常见的8个文件/目录一次性搞清楚。

我们先看一个标准的Ansible项目目录结构长什么样:

text

my-ansible-project/ # 你的项目文件夹 ├── ansible.cfg # ① 主配置文件(Ansible的"系统设置") ├── inventory.ini # ② 主机清单文件(你的"服务器通讯录") ├── deploy-nginx.yml # ③ Playbook剧本(核心"执行脚本") ├── nginx.conf # ④ 普通静态配置文件 ├── templates/ # ⑤ 模板文件夹(动态配置) │ └── nginx.conf.j2 └── roles/ # ⑥ 角色文件夹("乐高积木块",高级玩法) └── nginx/ ├── tasks/ │ └── main.yml # ⑦ 任务列表(具体要干的事) ├── handlers/ │ └── main.yml # ⑧ 触发器(发生变化时重启/重载服务) └── vars/ └── main.yml # ⑨ 变量文件(可变的参数)

下面逐一解读(小白请重点看前4个,后面4个先了解即可):

文件/文件夹大白话解释核心作用
ansible.cfgAnsible软件的"个性化设置"定义SSH超时时间、是否记录日志、是否开启主机密钥检查等。一般放项目根目录,不配置就使用系统默认的/etc/ansible/ansible.cfg
inventory.ini你的"服务器花名册"明确告诉Ansible:去管哪些IP?哪些是Web组?哪些是DB组?是否需要用普通用户sudo提权?
xxx.yml(Playbook)最重要的"总导演剧本"这是你写的YAML文件(比如deploy-nginx.yml)。它定义了"在哪台机器上(hosts)"、"以什么身份(become)"、"依次执行哪几个任务(tasks)"。你平时写得最多的就是这个。
④ 普通配置文件(如nginx.conf直接"复制粘贴"的固定内容这些文件不需要修改,Ansible直接原封不动地拷贝到远程服务器的指定目录。适用于所有机器都一样的配置。
templates/文件夹带"填空"功能的配置文件里面的文件后缀一般是.j2(Jinja2模板)。它和普通文件不同的是,它包含变量(比如CPU核心数={{ ansible_processor_cores }})。8G内存的机器拿到模板自动填8G,16G的机器填16G。一份模板,适配不同硬件。
roles/文件夹专业的"乐高积木块"当你的Playbook越来越长(超过200行),就把不同功能拆分成"角色"。比如roles/nginx/专门管Nginx,roles/mysql/专门管MySQL。这是大项目、团队协作的标准写法。
tasks/main.yml角色里的"干活清单"写在角色里具体要执行的任务序列(安装、启动等)。
handlers/main.yml角色里的"警报器/触发器"只有当任务真的改变了系统状态(比如修改了配置文件),才会触发这里。最常见的用途:配置文件变了,自动重启Nginx。避免每次执行剧本都无故重启服务。
vars/main.yml角色里的"参数配置页"把端口号、路径、用户名这些变化的东西抽离出来放在这里,将来修改时就不用去翻冗长的tasks文件了。

小白速记口诀
ansible.cfg管设置,inventory管机器,
Playbook(.yml)管流程,templates做动态配置,
roles是大积木,handlers出事后重启。

六、第一步实战:配置Inventory清单文件

Inventory文件就是你的"服务器通讯录",告诉Ansible要去管哪些机器。

默认情况下,Inventory文件位于/etc/ansible/hosts。但我们更推荐在项目目录下自己创建一个inventory.ini,方便管理。

基础写法

ini

[webservers] 192.168.1.10 192.168.1.11 192.168.1.12 [databases] 192.168.1.20 192.168.1.21

上面定义了两个组:webservers(3台Web服务器)和databases(2台数据库服务器)。

进阶写法(带连接参数)

ini

[webservers] web01 ansible_host=192.168.1.10 ansible_user=root web02 ansible_host=192.168.1.11 ansible_user=root [databases] db01 ansible_host=192.168.1.20 ansible_user=mysql ansible_become=yes

这样可以为不同机器指定不同的SSH用户、端口、密钥等参数。

小贴士:执行命令时用-i参数指定你的清单文件,比如ansible -i inventory.ini all -m ping

七、常用模块——先学会这7个

Ansible有几千个模块,但新手先掌握下面7个就够用了。

1. ping模块——测试连通性

最简单的模块,用来测试能否连接到远程主机:

bash

ansible all -m ping

返回"pong"就说明连接成功。

2. command / shell模块——执行命令

在远程主机上执行命令:

bash

# command(不支持管道、重定向等shell特性) ansible webservers -m command -a "ls -l /tmp" # shell(支持管道、重定向) ansible webservers -m shell -a "echo 'Hello' > /tmp/test.txt"

3. copy模块——复制文件

把文件从控制节点复制到远程主机:

bash

ansible webservers -m copy -a "src=/local/nginx.conf dest=/etc/nginx/nginx.conf mode=0644"

4. file模块——管理文件和目录

创建目录、修改权限、删除文件等:

bash

# 创建目录 ansible webservers -m file -a "path=/opt/myapp state=directory mode=0755" # 删除文件 ansible webservers -m file -a "path=/tmp/old.log state=absent"

5. yum / apt模块——安装软件包

安装、卸载、更新软件包:

bash

# CentOS用yum ansible webservers -m yum -a "name=nginx state=present" # Ubuntu用apt ansible webservers -m apt -a "name=nginx state=present"

6. service模块——管理服务

启动、停止、重启服务,设置开机自启:

bash

ansible webservers -m service -a "name=nginx state=started enabled=yes"

7. user模块——管理用户

创建、删除、修改用户:

bash

ansible webservers -m user -a "name=deploy state=present shell=/bin/bash"

八、Playbook——把任务写成"剧本"

如果每次只执行一条命令,那Ansible的优势还没完全发挥出来。Playbook才是Ansible的精髓

Playbook是一个YAML格式的文件,可以把多个任务按顺序写在一起,一键执行。

第一个Playbook:Hello World

创建一个文件hello.yaml

yaml

--- - name: 我的第一个Playbook hosts: all tasks: - name: 打印Hello信息 debug: msg: "Hello, Ansible!"

执行:

bash

ansible-playbook hello.yaml

实战Playbook:在Web服务器上部署Nginx

yaml

--- - name: 部署Nginx到Web服务器 hosts: webservers become: yes tasks: - name: 安装Nginx yum: name: nginx state: present - name: 复制配置文件 copy: src: ./nginx.conf dest: /etc/nginx/nginx.conf mode: '0644' backup: yes - name: 启动Nginx并设置开机自启 service: name: nginx state: started enabled: yes

执行后,所有在webservers组里的机器会依次完成:安装Nginx → 复制配置 → 启动服务。

九、更多实战场景——看看还能做什么

以下是一些真实的业务场景,感受一下Ansible的威力:

场景1:批量创建用户

yaml

- hosts: all become: yes tasks: - name: 创建deploy用户 user: name: deploy state: present shell: /bin/bash

几秒钟,所有机器都有了deploy用户。

场景2:批量修改主机名

yaml

- hosts: webservers become: yes tasks: - name: 设置主机名 hostname: name: "web-{{ inventory_hostname }}"

不用再一台台去敲hostnamectl了。

场景3:批量安装Git

yaml

- hosts: all become: yes tasks: - name: 安装Git yum: name: git state: present

场景4:批量检查磁盘使用情况

yaml

- hosts: all tasks: - name: 检查磁盘使用情况 shell: df -h register: disk_info - debug: var: disk_info.stdout_lines

所有机器的磁盘信息一次性刷出来。

场景5:统一设置时区

yaml

- hosts: all become: yes tasks: - name: 设置时区为上海 timezone: name: Asia/Shanghai

十、小白学习路线图

给完全零基础的同学一份可执行的时间表:

阶段内容预计时间
第1天安装Ansible + 学会ping模块1小时
第2-3天掌握Inventory配置 + 5个常用模块2-3小时
第4-5天写第一个Playbook + 理解YAML语法2小时
第1周模仿实战场景写3-5个Playbook3-4小时
第2周学习变量、条件、循环等进阶内容持续学习

十一、总结

Ansible并没有想象中那么复杂。现在回过头来,我们把整个知识串一遍:

  • ansible.cfg调整了SSH连接等基础设置;

  • inventory.ini定义了要管理的服务器IP和分组;

  • Playbook里写好了部署Nginx的详细步骤;

  • 静态配置文件(如nginx.conf)被原封不动复制过去;

  • templates负责根据不同机器硬件动态生成配置;

  • handlers则确保了配置更新后Nginx能被优雅重启。

文件虽多,但各司其职,分工明确。

记住这几句话就够了:

  1. Ansible是遥控器,能同时指挥多台服务器

  2. 被控机器啥都不用装,只要能SSH

  3. Inventory是花名册,告诉Ansible要管哪些机器

  4. 模块是工具箱,每个模块干一件事

  5. Playbook是剧本,把任务写成YAML一键执行

从今天开始,试着在你的测试环境里装一个Ansible,跑一个ansible all -m ping,你就已经迈出了自动化运维的第一步。


参考资源

  • Ansible官方文档:https://docs.ansible.com

  • 安装遇到问题?检查SSH是否能连通目标机器,这是99%的问题根源。

如果这篇文章帮到了你,欢迎点赞、收藏、转发,让更多小白少走弯路!😊

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/29 0:33:06

ai-infra-introduction

AI Infra 是让大模型从实验室走向生产环境的技术底座。本文将从零开始,帮你建立对这个领域的全景认知。 📑 目录 1. 什么是 AI Infra2. 为什么 AI Infra 越来越重要3. AI Infra 技术栈全景4. 硬件层:算力基础5. 系统软件层:让硬…

作者头像 李华
网站建设 2026/6/29 0:36:14

Codex 用得越来越多,ChatGPT 充值到底选 Plus 还是 Pro?

最近很多人在搜索 ChatGPT 充值、GPT 充值、Codex 使用额度时,容易把几个概念混在一起。 有人以为开通 ChatGPT 会员,就等于有了 API 余额;也有人只是偶尔写几段代码,却一上来就纠结要不要直接升级 Pro。 其实,是否选…

作者头像 李华
网站建设 2026/6/29 0:33:18

B站视频想下载收藏?这款软件UP主视频列表一键扒,4K画质随便下!

刷B站看到宝藏UP主的视频想保存?收藏夹里的神作怕哪天失效?追番追到一半想下载到本地慢慢看?但B站官方不提供下载按钮,在线录屏画质渣到哭,第三方工具要么只支持单视频、要么看不到UP主全部作品……如果你也受够了这种…

作者头像 李华
网站建设 2026/6/29 0:33:12

单片机的结构原理:基础组成和内部结构

单片机的结构原理:基础组成和内部结构1. 引言2. 51系列单片机2.1. 51子系列特点2.2. 52子系列。3. 51 基本机构3. 51 内部结构4. 总结1. 引言 国际上把单片机成为嵌入式控制器(Embedded Micro Controller Unit ,EMCU)。或微控制器&#xff0…

作者头像 李华
网站建设 2026/6/29 0:33:33

2026远程控制软件一站式选购指南:办公设计游戏运维家庭一篇讲清

2026远程控制软件一站式选购指南:办公设计游戏运维家庭一篇讲清 我属于那种"一台软件想解决所有问题"的人。 日常工作需要远程连接公司电脑办公(每天大概6-8小时),偶尔父母电脑出问题了要远程帮忙看看,周末有…

作者头像 李华