简介
手动设置和管理服务器可能是一个繁琐且容易出错的过程,尤其是在拥有多台服务器或重复配置任务的环境中。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
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 之前,请确保你具备以下条件:
- 控制节点:安装了 Ansible 的机器(你的本地系统或专用服务器)。
- 目标服务器:你想要配置的 Ubuntu 服务器(本地或云端)。
- 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
任务说明
- 更新和升级软件包:确保服务器拥有最新的更新和安全补丁。
- 安装常用软件包:安装以下必备工具:
curl、wget和git。 - 启用 UFW:配置防火墙以允许 SSH 访问。
- 创建新用户:添加具有 sudo 权限的新用户。
- 设置主机名:配置服务器的主机名。
保存并退出文件。
步骤 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。
- 设置对目标服务器的 SSH 访问。
- 编写并执行一个基本的 Playbook,以自动完成 Ubuntu Server 的设置。
利用 Ansible,你可以节省时间、减少错误,并确保整个基础架构的一致性。无论你管理的是单台服务器还是数百台服务器,Ansible 都是现代 DevOps 工作流程中不可或缺的工具。
2 thoughts on “24. Automating Ubuntu Server Setup with Ansible: A Practical Guide”