Ansible通过模块和角色自动化部署服务软件(如Nginx、Docker),而非安装自身插件;其无代理架构依赖SSH执行yum/apt安装、service管理或role封装多步操作,并需确保SSH连通、权限匹配及仓库可用。

Ansible 本身不依赖“服务插件”这个概念,它通过模块(modules)和角色(roles)来自动化安装、配置和管理服务。所谓“服务插件”,通常是指用户想安装的第三方服务软件(如 Nginx、Docker、MySQL、Redis 等),而非 Ansible 自身的扩展插件。下面直接讲清楚怎么用 Ansible 实现这类服务的自动化部署。
明确目标:安装的是服务软件,不是 Ansible 插件
Ansible 是无代理架构,不需在被控端安装额外 agent;它通过 SSH 推送临时模块执行任务,完成后即清理。你要自动化安装的,是运行在目标主机上的服务程序(比如 Docker 或 Nginx),而不是给 Ansible 装什么“插件”。因此关键在于:选对模块、写好任务逻辑、用好角色封装。
常用方式一:用 yum/apt 模块直接安装服务包
适用于已打包进系统仓库的服务(如 CentOS 的 nginx、Ubuntu 的 redis-server):
- 使用 yum(RHEL/CentOS)或 apt(Debian/Ubuntu)模块,指定包名和状态
- 示例:在所有 web 主机上安装并启用 Nginx
ansible web -m yum -a "name=nginx state=present"- 再加一条启动服务:
ansible web -m service -a "name=nginx state=started enabled=yes"
常用方式二:用 role 封装复杂服务(如 Docker)
对于需要多步操作的服务(下载 repo、配置源、安装多个包、启动服务、加用户到 docker 组),推荐复用成熟 role(如 geerlingguy.docker)或自建 role:
- 定义变量控制行为:例如
docker_edition: ce、docker_users: ["deploy"] - 确保
docker_service_manage: true且docker_service_enabled: true,自动启停+开机自启 - 在 playbook 中调用:
- role: geerlingguy.docker,无需手写每条命令 - role 内部已处理 GPG key 导入、仓库配置、containerd 依赖、usergroup 权限等细节
常见注意事项与避坑点
实际部署中容易卡住的地方:
-
SSH 连通性必须提前验证:用
ansible all -m ping确认能通,否则所有安装都会失败 -
权限要匹配:如果用非 root 用户执行,需设
become: true并确保该用户有 sudo 权限 -
仓库源要可用:EPEL 或 Docker 官方 repo 若不可达,yum/apt 会超时;建议在 role 中加入
repo_gpg_key和baseurl校验逻辑 -
服务依赖别遗漏:比如安装 Docker 前需确保
containerd.io和docker-buildx-plugin同时存在,否则 service 启动失败

















