- 如何使用 Ansible 来管理和配置互联网上的服务器/设备。
- Ansible 本身是如何通过互联网进行工作的(从 GitHub 下载 Playbook)。
这两个层面都非常重要,构成了 Ansible 在现代 IT 运维中的核心价值。

使用 Ansible 管理互联网上的服务器
这是 Ansible 最常见的应用场景,你需要在自己的电脑上(控制节点)运行 Ansible,去管理部署在云服务商(如阿里云、腾讯云、AWS、Google Cloud)或本地机房里的远程服务器(被管理节点)。
核心概念与流程
-
控制节点:
- 是什么: 运行 Ansible 命令的机器,它可以是你的笔记本电脑、台式机,或者一台专用的运维服务器。
- 要求: 必须安装了 Python 3.6+ 和 Ansible,它本身不需要安装 SSH 服务端或被管理节点上的代理。
-
被管理节点:
- 是什么: 你想要用 Ansible 进行配置、管理、部署的服务器、网络设备、容器等。
- 要求: 必须安装了 Python 2.7+ 或 Python 3+,绝大多数现代 Linux 发行版都自带了 Python,对于没有 Python 的设备(如某些网络设备、Windows),Ansible 也有相应的解决方案(使用 WinRM 协议管理 Windows)。
-
连接方式:
(图片来源网络,侵删)- SSH (默认): Ansible 默认通过 SSH 连接到被管理节点,这是最常用、最标准的方式。
- 其他协议: 也支持通过 WinRM (Windows)、API 等。
实践步骤:通过互联网管理一台云服务器
假设你的场景是:
- 控制节点: 你本地的 macOS/Linux 电脑。
- 被管理节点: 阿里云/腾讯云/AWS 上的一台新的 Ubuntu 服务器。
第一步:准备环境
-
在控制节点上安装 Ansible:
# 使用 pip 安装 (推荐) pip install ansible # 或者使用包管理器 (例如在 Ubuntu 上) sudo apt update sudo apt install ansible
-
在被管理节点上确保 Python 和 SSH 服务可用:
(图片来源网络,侵删)大多数云服务器镜像(如 Ubuntu Server, CentOS)默认都已安装 Python 和 OpenSSH 服务,无需额外操作。
第二步:配置 SSH 免密登录
这是最关键的一步,为了安全方便,我们使用 SSH 密钥对进行认证,而不是每次都输入密码。
-
在控制节点上生成 SSH 密钥对 (如果还没有的话):
ssh-keygen -t rsa -b 4096 # 一路按回车即可,默认会生成在 ~/.ssh/id_rsa
-
将公钥复制到被管理节点: 你需要将公钥(
~/.ssh/id_rsa.pub,添加到被管理节点的~/.ssh/authorized_keys文件中。- 手动方法: 登录到被管理节点,执行以下命令:
mkdir -p ~/.ssh echo "你的公钥内容" >> ~/.ssh/authorized_keys chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys
- 自动化方法 (推荐): 使用
ssh-copy-id命令,它会自动帮你完成上述操作:# 将公钥复制到用户 'ubuntu' 的家目录下 ssh-copy-id -i ~/.ssh/id_rsa.pub ubuntu@<你的服务器公网IP> # 系统会提示你输入一次 'ubuntu' 用户的密码
成功后,你就可以从控制节点免密登录到被管理节点了:
ssh ubuntu@<你的服务器公网IP>
- 手动方法: 登录到被管理节点,执行以下命令:
第三步:编写 Ansible Inventory (清单)
Inventory 文件定义了哪些服务器可以被 Ansible 管理,创建一个文件,inventory.ini:
# inventory.ini [web_servers] # 这里填写你的服务器公网IP server1.example.com # 也可以使用IP地址 192.168.1.100 ansible_user=ubuntu # 你可以为单个主机定义特定变量 [web_servers:vars] ansible_python_interpreter=/usr/bin/python3
[web_servers]: 这是一个主机组名,你可以自定义。server1.example.com: 被管理节点的主机名或 IP 地址。ansible_user=ubuntu: 指定连接该节点时使用的用户名。
第四步:编写你的第一个 Playbook
Playbook 是 Ansible 的核心,它是一个 YAML 文件,定义了一系列任务(Tasks),用于配置被管理节点。
创建一个文件 site.yml:
# site.yml
---
- name: Ensure Nginx is installed and running
hosts: web_servers
become: yes # 使用 sudo 权限执行任务
tasks:
- name: Update apt cache
ansible.builtin.apt:
update_cache: yes
changed_when: false # 避免第一次运行时总是报告变更
- name: Install Nginx
ansible.builtin.apt:
name: nginx
state: present
- name: Start Nginx service
ansible.builtin.service:
name: nginx
state: started
enabled: yes # 设置为开机自启
第五步:运行 Playbook
一切就绪,可以在你的控制节点上执行 Playbook 了:
# -i 指定 inventory 文件 # -k 可以交互式输入密码(如果没用密钥的话) ansible-playbook -i inventory.ini site.yml
第一次运行时,Ansible 会连接到服务器,执行任务,完成后,你可以通过浏览器访问你的服务器公网 IP,应该就能看到 Nginx 的欢迎页面了。
Ansible 本身在互联网上的使用
Ansible 的一个巨大优势是它的“代码即配置”理念,这使得它非常适合在互联网上进行协作和分发。
-
从 Git 仓库获取 Playbook
- 这是最佳实践,团队将 Playbooks、Roles、Inventory 等所有配置文件都存放在 Git 仓库(如 GitHub, GitLab, Gitee)中。
- 运维人员可以
git clone这个仓库,然后直接运行ansible-playbook。 - 好处:
- 版本控制: 所有的变更都有记录,可以回滚。
- 协作: 多人可以共同开发和维护配置。
- 可重复性: 确保任何人在任何地方都能拿到最新的、正确的配置。
# 克隆一个包含 Ansible 项目的仓库 git clone https://github.com/your-org/ansible-configs.git # 进入目录并运行 cd ansible-configs ansible-playbook -i production.ini site.yml
-
使用 Ansible Galaxy
-
是什么: Ansible 官方的一个社区共享平台,类似于 PyPI(Python包管理器)或 npm(Node.js包管理器)。
-
用途: 在上面可以找到由社区成员编写和分享的 Roles,一个 Role 是一个预配置好的、可重用的模块,用于完成特定任务(比如安装 MySQL、配置 Nginx、部署 Docker 等)。
-
如何使用:
# 从 Galaxy 安装一个 Role ansible-galaxy install geerlingguy.docker # 安装后,你就可以在自己的 Playbook 中使用这个 Role 了 --- - hosts: webservers roles: - geerlingguy.docker
-
-
使用 Ansible Tower / AWX
- 是什么: 这是 Ansible 的商业版和开源版 Web 界面,它们提供了一个图形化界面,让你可以:
- 可视化管理 Inventory、Credentials(密钥)、Playbooks。
- 创建和监控 Job(任务执行)。
- 设置定时任务(Cron Jobs)。
- 实现权限控制和审计。
- 互联网使用: AWX/Tower 通常部署在内网,但可以通过安全网关或 VPN 从互联网访问,实现集中的、可视化的自动化运维。
- 是什么: 这是 Ansible 的商业版和开源版 Web 界面,它们提供了一个图形化界面,让你可以:
-
Ansible 在 CI/CD 流水线中的使用
- 在现代化的软件开发流程中,Ansible 是 CI/CD(持续集成/持续部署)的关键一环。
- 流程:
- 开发者提交代码到 GitHub/GitLab。
- CI/CD 工具(如 Jenkins, GitLab CI, GitHub Actions)被触发。
- 工具自动拉取 Ansible Playbook。
- 执行 Playbook,自动部署最新的应用到测试服务器或生产服务器。
