新服务器配置太麻烦?Ansible自动化运维入门

新服务器配置太麻烦?Ansible自动化运维入门

你还在手动配服务器吗?

先问你一个问题:上次配置一台新服务器,你花了多久?

如果只有一台,半小时可能还能忍。但如果你公司有10台、20台服务器呢?每台重复同样的操作——更新系统、装Nginx、配PHP、改防火墙、传文件、重启服务。枯燥,而且容易出错。

有人统计过,手动配置服务器时,每10台机器至少有1台的配置会和其他的不一样。少装了一个扩展,忘了开某个端口,配置文件复制错了路径。这些差异平时看不出来,一出问题,排查难度直接翻倍。

这就是为什么需要Ansible。


Ansible是什么?怎么工作?

Ansible是一个自动化运维工具。它做的事情就是:你写好一份配置清单,告诉它“服务器应该装什么软件、配置文件放哪里、哪些服务要启动”,然后它SSH连上服务器,自动帮你搞定。

几个特点:

  • 不需要在被控服务器上装任何东西,只要SSH能连上,Python环境有就行了(Linux默认都有)。这一点比很多其他运维工具方便很多。
  • 用YAML写配置,就是纯文本文件,可以放进Git仓库里管理。
  • 执行是幂等的,同一个配置跑多次,结果一样。不会因为你多跑一遍就重复装软件、重复重启服务。

安装与基础配置

第一步:控制机安装Ansible

控制机可以是你自己的电脑,也可以是公司的一台跳板机。

Ubuntu/Debian:

bash

sudo apt update
sudo apt install ansible -y

CentOS/RHEL:

bash

sudo yum install epel-release -y
sudo yum install ansible -y

装完之后验证一下:

bash

ansible --version

第二步:配置SSH免密登录

Ansible靠SSH连接服务器,所以要提前配好免密登录(之前的文章讲过,ssh-keygen + ssh-copy-id)。配完之后测试一下:

bash

ssh root@你的服务器IP

不需要输密码,就对了。

第三步:定义服务器清单

编辑/etc/ansible/hosts,把你要管理的服务器写进去。可以按功能分组:

ini

[web]
192.168.1.10
192.168.1.11

[db]
192.168.1.20

[all:vars]
ansible_user=root

测试连通性:

bash

ansible all -m ping

每台机器返回"pong",说明Ansible可以连上它们了。


单次任务:用Ad-hoc命令

写完整剧本之前,先试试单条命令。比如批量查看时间:

bash

ansible web -m command -a "date"

批量安装Nginx:

bash

ansible web -m apt -a "name=nginx state=present"

批量重启服务:

bash

ansible web -m service -a "name=nginx state=restarted"

这些命令适合做一次性操作。日常工作大部分场景还是用Playbook。


核心功能:写Playbook

Playbook是Ansible的配置文件,YAML格式。下面是一个配置Web服务器的例子。

创建一个文件setup-web.yml

yaml

---
- name: 配置Web服务器
  hosts: web
  become: yes

  tasks:
    - name: 更新apt缓存
      apt:
        update_cache: yes

    - name: 安装Nginx和PHP
      apt:
        name:
          - nginx
          - php8.1-fpm
        state: present

    - name: 创建网站目录
      file:
        path: /var/www/mysite
        state: directory
        owner: www-data
        group: www-data
        mode: '0755'

    - name: 复制Nginx配置文件
      copy:
        src: ./files/mysite.conf
        dest: /etc/nginx/sites-available/mysite.conf

    - name: 启用站点
      file:
        src: /etc/nginx/sites-available/mysite.conf
        dest: /etc/nginx/sites-enabled/mysite.conf
        state: link

    - name: 启动Nginx
      service:
        name: nginx
        state: started
        enabled: yes

执行这个playbook:

bash

ansible-playbook setup-web.yml

Ansible会按照顺序执行每个任务:更新缓存→安装软件→创建目录→复制配置→启用站点→启动服务。如果某台机器已经装过了,Ansible会跳过,不会重复执行。


常用的几个模块

模块用途示例
copy把本地文件传到服务器src=./file dest=/remote/path
file创建目录或设置权限path=/tmp/dir state=directory
apt / yum安装软件包name=nginx state=present
service启停服务、设置开机自启name=nginx state=started enabled=yes
shell执行shell命令cmd="df -h"
lineinfile修改配置文件中的某一行替换或添加配置项

每个模块的详细用法都可以用ansible-doc 模块名查看。


生产环境建议

如果你要把Ansible用到实际工作中,有几个建议:

1. 用目录结构管理

text

ansible/
├── inventory/           # 环境区分
│   ├── production
│   └── staging
├── playbooks/           # 剧本文件
├── roles/               # 角色(复用配置)
└── files/               # 需分发的文件

2. Playbook写完后先测试

加了--check参数,只模拟不执行:

bash

ansible-playbook setup-web.yml --check

3. 只对单台机器执行

--limit参数:

bash

ansible-playbook setup-web.yml --limit 192.168.1.10

4. 把playbook纳入Git管理

配置文件就是文档。团队里谁改了配置,commit记录一目了然。


总结

Ansible的核心价值就三点:

  • 一致性:同一份playbook,任何机器执行结果一样
  • 可重复:新服务器上线,跑一遍playbook就行
  • 可审计:playbook本身就是配置文档

初次配置Ansible环境大概要1小时。之后每新来一台服务器,运行一遍playbook,5分钟内就能完成初始化。

如果你的服务器数量超过3台,Ansible带来的效率提升是值得投入这个时间的。

实操指南知识库

MySQL/MariaDB 从入门到上手:安装、配置与日常维护

2026-3-19 15:38:05

知识库

Nginx vs Apache:你的网站该用哪个Web服务器?

2026-4-14 14:52:46

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧