让我们在你的系统上安装并运行 Ansible。本指南将使用 Ubuntu,但 Ansible 兼容大多数操作系统。


# 更新软件包列表
sudo apt update

# 安装 Ansible
sudo apt install ansible -y

# 验证安装
ansible --version

如果你看到版本信息,恭喜你!你已经迈出了自动化世界的第一步。

清单:你的服务器通讯录

在我们开始自动化之前,Ansible 需要知道要管理哪些服务器。这就是清单文件的作用。可以把它看作是 Ansible 的联系人列表。

创建一个名为 inventory.ini 的文件,并添加你的服务器:


[webservers]
192.168.1.10
192.168.1.11

[dbservers]
192.168.1.20

小贴士:如果你喜欢,也可以使用主机名代替 IP 地址。

你的第一个剧本:你好,自动化世界!

现在 Ansible 知道了你的服务器,是时候告诉它该做什么了。进入剧本——描述要在服务器上执行的一组任务的 YAML 文件。

让我们创建一个简单的剧本来安装和启动 Apache。创建一个名为 install_apache.yml 的文件:


---
- name: 安装并启动 Apache
  hosts: webservers
  become: yes
  tasks:
    - name: 安装 Apache
      apt:
        name: apache2
        state: present

    - name: 启动并启用 Apache
      service:
        name: apache2
        state: started
        enabled: yes

要运行此剧本,使用以下命令:


ansible-playbook -i inventory.ini install_apache.yml

如果一切顺利,你应该会看到 Apache 已安装并在你的 web 服务器上运行。是不是很神奇?

提升:高级 Ansible 功能

现在你已经掌握了基础知识,让我们来探索一些 Ansible 的更强大功能。

变量:一个剧本统治所有

Ansible 中的变量允许你编写更灵活和可重用的剧本。以下是如何使用变量的示例:


---
- name: 安装软件包
  hosts: webservers
  vars:
    packages:
      - apache2
      - nginx
      - php
  tasks:
    - name: 安装指定的软件包
      apt:
        name: "{{ item }}"
        state: present
      loop: "{{ packages }}"

此剧本将安装 packages 变量中列出的所有软件包。需要添加或删除软件包?只需更新变量即可!

模板:配置文件的增强版

Ansible 的 Jinja2 模板引擎允许你创建动态配置文件。以下是一个简单的示例:

创建一个名为 nginx.conf.j2 的模板文件:


server {
    listen 80;
    server_name {{ domain_name }};

    location / {
        proxy_pass http://{{ backend_ip }};
    }
}

现在,在你的剧本中使用此模板:


- name: 部署 Nginx 配置
  template:
    src: nginx.conf.j2
    dest: /etc/nginx/sites-available/default
  vars:
    domain_name: example.com
    backend_ip: 192.168.1.100

这将根据你的变量创建一个自定义的 Nginx 配置文件。不再需要复制粘贴和手动编辑配置文件!

处理器:懒人的服务重启器

Ansible 中的处理器是只有在其他任务通知时才运行的任务。它们非常适合在必要时才重启服务:


---
- name: 更新配置并重启服务
  hosts: webservers
  tasks:
    - name: 部署新配置文件
      copy:
        src: new_config.conf
        dest: /etc/myapp/config.conf
      notify:
        - 重启 MyApp

  handlers:
    - name: 重启 MyApp
      service:
        name: myapp
        state: restarted

在此示例中,只有在配置文件实际更改时,MyApp 才会重启。效率至上!

Ansible 注意事项:需要注意什么

尽管 Ansible 很棒,但它也有一些小问题。以下是一些需要注意的事项:

  • 缩进很重要: YAML 对空格非常敏感。使用空格而不是制表符,并保持缩进一致。
  • 幂等性是关键: 始终努力使你的任务具有幂等性(即多次运行它们不应在第一次运行后改变结果)。
  • 注意引号: 在字符串中使用变量时,请始终使用引号以避免 YAML 解析错误。

总结:为什么 Ansible 很棒

Ansible 不仅仅是你 DevOps 工具包中的另一个工具;它是一个游戏规则改变者。原因如下:

  • 它是无代理的,因此你不需要在目标服务器上安装任何东西。
  • 学习曲线平缓——如果你能读懂 YAML,你就已经成功了一半。
  • 它很灵活——从简单任务到复杂编排,Ansible 都能胜任。
  • 社区庞大,这意味着当你需要时,有大量的模块、角色和帮助。

那么,你还在等什么?今天就开始使用 Ansible 进行自动化,并观察你的生产力飙升(以及你的咖啡休息时间延长)。

“预测未来的最佳方式就是自动化它。”——虽然不是 Alan Kay 说的,但也差不多。

附加:Ansible 资源

想深入了解 Ansible 的世界吗?查看这些资源:

记住,能力越大,责任越大。明智地使用 Ansible,并愿你的服务器始终处于理想状态!