24. 使用 Ansible 自动设置 Ubuntu Server:实用指南

简介

手动设置和管理服务器可能是一个繁琐且容易出错的过程,尤其是在拥有多台服务器或重复配置任务的环境中。Ansible 是一款强大的开源 IT 自动化工具,它可以让你轻松自动完成服务器置备、配置和管理,从而简化这一过程。在本指南 《24. 使用 Ansible 自动设置 Ubuntu Server:实用指南》 中,我们将带你了解使用 Ansible 自动设置和配置 Ubuntu Server 的基础知识。读完本文,你将学会如何编写和执行 Ansible Playbook,以简化常见的服务器任务、提高效率,并确保整个基础架构的一致性。


往期文章:

01. Ubuntu Server 简介 – SysOSX: AI & Cloud

02. 如何搭建你的第一台 Ubuntu Server:初学者指南 – SysOSX: AI & Cloud

03. 掌握 Ubuntu Server 的 Linux 命令行 – SysOSX: AI & Cloud

04. Ubuntu Server 用户与权限管理:全面指南 – SysOSX: AI & Cloud

05. Ubuntu Server 网络基础:全面指南 – SysOSX: AI & Cloud

06. 在 Ubuntu Server 上安装和管理软件:完整指南 – SysOSX: AI & Cloud

07.Ubuntu Server 补丁与更新:全面指南 – SysOSX: AI & Cloud

08. 保护你的 Ubuntu Server:加固与防护的实用步骤 – SysOSX: AI & Cloud

09. Ubuntu 服务器审计与日志记录

10. Ubuntu Server 系统监控工具:全面指南 – SysOSX: AI & Cloud

11. Ubuntu 服务器集中式日志记录:必读指南 – SysOSX: AI & Cloud

12. Ubuntu Server 审计与合规:最佳实践 – SysOSX: AI & Cloud

13. 为托管和 Web 应用设置你的 Ubuntu Server:终极指南 – SysOSX: AI & Cloud

14. 在一台 Ubuntu Server 上托管多个网站:实用技巧 – SysOSX: AI & Cloud

15. Ubuntu Server 存储与磁盘管理:简明指南 – SysOSX: AI & Cloud

16. 在 Ubuntu Server 上设置文件共享服务:完整指南 – SysOSX: AI & Cloud

17. 在 Ubuntu 上设置安全的数据库服务器:MySQL 与 MariaDB 对比 – SysOSX: AI & Cloud

18. 如何在 Ubuntu Server 上配置和使用 LVM:全面指南 – SysOSX: AI & Cloud

19. KVM 虚拟化入门:Ubuntu Server 初学者指南 – SysOSX: AI & Cloud

20. 如何在 Ubuntu Server 上安装 Docker:容器化分步指南 – SysOSX: AI & Cloud

21. LXD 入门:轻松安装容器 + 速查表 – SysOSX: AI & Cloud

22. Ubuntu Server 上 Podman 入门:完整指南 – SysOSX: AI & Cloud

23. 在云端部署 Ubuntu Server:分步指南 – SysOSX: AI & Cloud



为什么使用 Ansible 进行服务器自动化?

Ansible 因其简单易用和功能强大而被广泛用于服务器自动化。以下是它成为首选的原因:

  • 无代理:Ansible 不需要在目标服务器上安装任何代理软件。它使用 SSH 进行通信。
  • 声明式语法:Ansible Playbook 使用 YAML,这是一种人类可读的语法,可以轻松定义期望状态。
  • 可复用的配置:一次编写 Playbook,即可在多台服务器上复用。
  • 幂等性:Ansible 确保任务仅在必要时执行,避免冗余操作。
  • 可扩展性:Ansible 支持多种模块,可处理软件包安装、文件管理和服务配置等任务。

前提条件

在深入了解如何使用 Ansible 自动设置 Ubuntu Server 之前,请确保你具备以下条件:

  1. 控制节点:安装了 Ansible 的机器(你的本地系统或专用服务器)。
  2. 目标服务器:你想要配置的 Ubuntu 服务器(本地或云端)。
  3. SSH 访问:确保控制节点与目标服务器之间已设置免密 SSH 访问。

步骤 1:安装 Ansible

1.1 在控制节点上安装 Ansible

在你的控制节点(例如运行 Ubuntu 的本地机器)上安装 Ansible:

sudo apt update  
sudo apt install ansible -y  

1.2 验证安装

检查已安装的 Ansible 版本,确保安装正确:

ansible --version  

示例输出:

ansible 2.10.8
  config file = None
  configured module search path = ['/home/uadmin/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3/dist-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.10.12 (main, Feb  4 2025, 14:57:36) [GCC 11.4.0]


步骤 2:设置 SSH 访问

Ansible 通过 SSH 与目标服务器通信。你需要设置从控制节点到目标服务器的免密 SSH 访问。

2.1 生成 SSH 密钥对

如果你还没有 SSH 密钥对,请生成一个:

ssh-keygen -t rsa -b 2048  

2.2 将 SSH 密钥复制到目标服务器

使用以下命令将你的公钥复制到目标服务器:

ssh-copy-id ubuntu@<target-server-ip>  

测试 SSH 访问,确保无需密码即可正常工作:

ssh ubuntu@<target-server-ip>  


步骤 3:定义清单

Ansible 使用 清单文件 来定义要管理的目标服务器。

3.1 创建清单文件

在工作目录中创建一个名为 inventory 的文件:

nano inventory  

添加目标服务器的 IP 地址或主机名。例如:

[ubuntu_servers]  
192.168.50.42  
192.168.50.145

保存并退出文件(Ctrl+O,然后按 Ctrl+X)。

3.2 测试连通性

使用 ping 模块测试与目标服务器的连通性:

ansible -i inventory ubuntu_servers -m ping  

示例输出:

192.168.50.145 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}
192.168.50.42 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}


步骤 4:编写你的第一个 Ansible Playbook

Ansible Playbook 是定义你想要自动执行的任务的 YAML 文件。让我们创建一个 Playbook 来自动完成 Ubuntu Server 的设置。

4.1 创建 Playbook 文件

创建一个名为 setup.yml的文件:

nano setup.yml  

4.2 定义 Playbook

将以下内容添加到 Playbook 中:

---  
- name: Configure Ubuntu Server  
  hosts: ubuntu_servers  
  become: true  

  tasks:  
    - name: Update and upgrade apt packages  
      apt:  
        update_cache: yes  
        upgrade: dist  

    - name: Install common packages  
      apt:  
        name:  
          - curl  
          - wget  
          - git  
          - build-essential  
        state: present  

    - name: Enable UFW and allow SSH  
      ufw:  
        rule: allow  
        name: OpenSSH  
        state: enabled  

    - name: Create a new user  
      user:  
        name: devuser  
        password: "{{ 'password123' | password_hash('sha512') }}"  
        state: present  
        groups: sudo  

任务说明

  1. 更新和升级软件包:确保服务器拥有最新的更新和安全补丁。
  2. 安装常用软件包:安装以下必备工具: curl、 wget和 git。
  3. 启用 UFW:配置防火墙以允许 SSH 访问。
  4. 创建新用户:添加具有 sudo 权限的新用户。
  5. 设置主机名:配置服务器的主机名。

保存并退出文件。


步骤 5:运行 Playbook

执行 Playbook 以应用配置:

ansible-playbook -i inventory setup.yml  

Ansible 会记录每个任务的进度。如果所有任务都成功完成,你的 Ubuntu Server 将完成全部配置。

输出如下:

uadmin@u2204-001:~$ sudo ansible-playbook -i inventory setup.yml

PLAY [Configure Ubuntu Server] ***************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.50.145]
ok: [192.168.50.42]

TASK [Update and upgrade apt packages] *******************************************************************************
^X^C [ERROR]: User interrupted execution
uadmin@u2204-001:~$ sudo nano setup.yml
uadmin@u2204-001:~$ sudo ansible-playbook -i inventory setup.yml

PLAY [Configure Ubuntu Server] ***************************************************************************************

TASK [Gathering Facts] ***********************************************************************************************
ok: [192.168.50.145]
ok: [192.168.50.42]

TASK [Update and upgrade apt packages] *******************************************************************************
ok: [192.168.50.42]
ok: [192.168.50.145]

TASK [Install common packages] ***************************************************************************************
changed: [192.168.50.145]
changed: [192.168.50.42]

TASK [Enable UFW and allow SSH] **************************************************************************************
changed: [192.168.50.145]
changed: [192.168.50.42]

TASK [Create a new user] *********************************************************************************************
changed: [192.168.50.42]
changed: [192.168.50.145]

PLAY RECAP ***********************************************************************************************************
192.168.50.145             : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0
192.168.50.42              : ok=5    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0



步骤 6:验证配置

6.1 检查已安装的软件包

登录其中一台目标服务器,验证常用软件包是否已安装:

curl --version  
git --version  

6.2 检查防火墙状态

验证防火墙已启用:

sudo ufw status  

6.3 检查新用户

确保新用户已创建:

cat /etc/passwd | grep devuser  


高级用例

熟悉基本 Playbook 后,你可以探索更高级的用例:

  • 部署应用:使用 Ansible 安装和配置 Web 服务器(例如 Nginx、Apache)或数据库(例如 MySQL、PostgreSQL)。
  • 管理多个环境:分别为预发布、生产和开发环境创建单独的清单文件。
  • 使用角色:将 Playbook 组织成可复用的角色,以应对复杂的设置。
  • 与 CI/CD 集成:将服务器设置自动化作为 CI/CD 流水线的一部分。

参考:

Ansible 文档——Ansible 社区文档


结论

Ansible 是自动完成服务器设置和配置的强大工具。在本指南中,我们介绍了:

  • 在控制节点上安装 Ansible。
  • 设置对目标服务器的 SSH 访问。
  • 编写并执行一个基本的 Playbook,以自动完成 Ubuntu Server 的设置。

利用 Ansible,你可以节省时间、减少错误,并确保整个基础架构的一致性。无论你管理的是单台服务器还是数百台服务器,Ansible 都是现代 DevOps 工作流程中不可或缺的工具。

2 thoughts on “24. Automating Ubuntu Server Setup with Ansible: A Practical Guide”

发表评论