Ansible 是什么
一句话总结
一个自动配置服务器的工具。你告诉它”这台机器要装 Docker、装 Agent、配 nginx”,它自动 SSH 过去帮你全搞定,不用你手动敲命令。
🤔 为什么会有它 / 解决了什么问题
没有 Ansible 之前,Press 加一台新服务器需要手动做:
- SSH 进去装 Docker
- 装 rsync、openssh-client
- 拉 Agent 代码、装 Python 依赖
- 配置 nginx、supervisor
- 设防火墙
每台机器都要重做一遍,容易漏步骤。Ansible 把整套操作编码为一个 playbook(剧本),你点一下按钮,它自动跑完全部步骤。
它填补的空白:把”人工操作 VPS”变成”可重复执行的代码”。
🔍 具体原理 / 运作逻辑
Ansible 的核心是 playbook——一个 YAML 格式的文件,里面写好了”这台机器应该是什么样的”:
- 装哪些包
- 跑哪些命令
- 放哪些文件
你告诉 Ansible 目标机器的 IP 和 SSH 密钥,它通过 SSH 连过去,逐条执行 playbook 里的任务。跑完之后,机器就变成 playbook 描述的样子。
关键点:Ansible 不需要在目标机器上预装任何东西(只需要 SSH),这和 Agent 不同。
更硬核的技术细节(点击展开)
Ansible 是无代理架构(agentless),通过 SSH 连接目标机器,用 Python 在远端执行模块。Press 的 playbook 文件在 Agent 仓库中(
frappe/agent的 playbook 目录),当你点 Press UI 的 “Setup Server” 按钮时,Press 调用 Ansible 跑对应的 playbook。我们 fork 了 Agent 仓库(miao-Q777/agent),playbook 也继承了过来。
🧭 什么情况下会用到 / 什么场景会遇到它
- 新建一台 f-B 或 n-B VPS 时 → Press UI 点 “Setup Server” → Ansible 自动配好
- 某台机器重建后 → 再跑一次 playbook → 恢复到可用状态
- 批量部署多台机器时 → 同一个 playbook 对所有机器跑一遍
⚖️ 副作用 / 代价 / 取舍
- playbook 变量如果没传对(如
press_url),配出来的机器连不上 Press,需要手动修正 - playbook 是我们 fork 的 Agent 仓库的一部分,上游更新时需要注意合并冲突
- Ansible 本身不复杂,但 playbook 写错了会导致所有机器统一配错
🕰️ 来历
- 谁创造:Michael DeHaan,2012 年发布
- 在 Press 中的角色:Frappe Cloud 团队选择 Ansible 作为服务器配置工具。我们自建 Press 沿用同样的机制——playbook 在 Agent 仓库里,Ansible 命令由 Press 触发
🔗 关联 / 经常一起出现的概念
- Agent:Ansible 配置好机器后,Agent 是常驻在机器上的进程,负责接收 Press 的后续指令。Ansible 是”装房子”,Agent 是”住房子”
- playbook:Ansible 的剧本文件,定义了一台机器从零到可用的所有步骤
- Press UI “Setup Server”:这个按钮的背后就是 Ansible 在跑 playbook
📎 记忆锚点
Ansible = 装修队。接到新房(新 VPS),按图纸(playbook)一次性装好水电门窗(Docker、Agent、nginx),装完就走,不常驻。
📝 更新日志
| 日期 | 改动 | 原因 |
|---|---|---|
| 2026-07-08 | 首次创建 | 名词科普 |