文章目录
-
- 每日一句正能量
- 前言
- 1.为什么使用ansible?
- 2.在你的虚拟机上安装ansiable
-
- 2.1 什么是Ansible?
- 2.2 Ansible的核心作用
- 2.3 安装ansiale
- 3.配置ansiable文件搞定其他主机docker部署
-
- 3.1 编写hosts文件
- 3.2 编写安装docker运行脚本
- 3.3 执行Playbook命令
- 3.4 验证是否成功
- 4.安装cpolar实现随时随地开发
- 5.配置公网地址
- 6.保留固定TCP公网地址
- 总结

每日一句正能量
落日是天空归档的句点, 而我的夜晚, 正摊开一张未裁边的羊皮纸。
前言
服务器数量一多,重复安装和重复配置很快就会变成运维里的固定成本。Docker 安装、软件源配置、服务启动、用户权限这些步骤单独看并不复杂,但如果需要在多台 Linux 主机上反复执行,最容易出现的问题不是“不会装”,而是每台机器的结果不完全一致。
Ansible 的价值就在这里:把原本需要逐台执行的操作整理成可以重复运行的 Playbook,再通过主机清单统一下发。这样做的重点不是省掉几条命令,而是把部署步骤固定下来,让同一套 Docker 环境能够在不同主机上按相同规则执行。
本文会直接从 Ansible 的安装和基础配置开始,随后编写 hosts 主机清单与 deploy_docker.yml,完成 Docker 批量部署;本地局域网流程跑通后,再通过 cpolar 建立 SSH 公网入口,验证 Ansible 对异地目标主机的远程执行,并继续配置固定 TCP 地址。整篇按“控制端准备 → Playbook 部署 → 远程连接 → 固定入口”的顺序展开。

1.为什么使用ansible?
Ansible是一款开源、无Agent架构的自动化运维工具,定位是服务器批量自动化管理工具,主打简单易用、无需安装客户端、Playbook剧本编排。
✨核心特点
部署架构与体验
依托SSH协议完成远程管控,被管理服务器无需安装任何代理客户端,只要开启 SSH 服务即可使用;YAML格式Playbook剧本语法通俗易懂,阅读编写门槛低,便于团队维护。
配置标准化可复用
把软件安装、目录创建、修改配置、服务启停等操作编写为Playbook剧本,一次编写,多次执行;单台调试、集群批量部署都可以复用,保证多台服务器配置完全一致。
丰富内置模块
自带大量成熟运维模块,软件安装、文件同步、用户管理、服务管理都可以直接调用,不用编写复杂shell脚本逻辑,减少shell脚本的易错问题。
执行模式
支持单机执行、多台主机批量执行;具备幂等特性,重复执行Playbook不会重复修改已经符合预期的环境,不用担心重复执行带来破坏。
🔴适用场景
- 服务器初始化、批量部署Docker等运行环境
- 集群多节点统一配置、分发配置文件
- 软件批量安装升级、服务统一启停管理
- 运维环境标准化交付,减少人工敲命令失误
📦技术栈
基于Python开发,远程通信依靠SSH;核心组件:Inventory主机清单、Playbook剧本、内置模块,推荐直接在控制节点安装Ansible进行管理。
和Shell脚本简单对比
- Shell脚本:执行原始命令,逻辑需要自己手写,缺少幂等性,多机器批量执行需要额外处理,配置一致性需要人为保障。
- Ansible Playbook:YAML可读性强,自带大量模块,天然支持幂等;原生支持批量主机;需要控制节点安装Ansible,被管控端仅需SSH。
2.在你的虚拟机上安装ansiable
2.1 什么是Ansible?
Ansible是一个开源的 自动化运维工具,由Red Hat赞助开发,用于实现:
- 配置管理(Configuration Management)
- 应用部署(Application Deployment)
- 任务自动化(Task Automation)
- IT编排(Orchestration)
它最大的特点是:简单、无代理、基于SSH、使用YAML语法。
2.2 Ansible的核心作用
无需逐台登录服务器,一条命令可在成百上千台机器上同时运行:
确保所有服务器的配置一致,比如:
- 安装指定版本的软件(如 Node Exporter、Nginx)
- 同步配置文件(如 /etc/hosts、prometheus.yml)
- 创建用户、设置权限、管理服务状态
- 自动化部署应用
通过 Playbook(YAML 文件)定义部署流程,一键完成复杂应用上线:
重复执行同一个 Playbook,结果始终一致——没装的会装,已装的不会重复操作,安全可靠。
Ansible通过SSH 与目标主机通信,只需控制机安装Ansible,被控机只要有Python 和SSH即可。
可管理AWS、Azure、阿里云等云资源,也能操作Docker、Kubernetes。
2.3 安装ansiale
登录到 Ubuntu系统,并在APT命令下运行以应用更新:
sudo apt update
sudo apt upgrade -y
安装最新版本的Ansible:
apt install -y ansible

安装完成后,验证ansiable版本:
ansible –version

我们查看一下,有没有启动文件:
ls /etc/ansible
我发现我这里没有,那我们手动配一下,创建ansiable文件:
mkdir -p /etc/ansible
编写hosts文件:
cat > /etc/ansible/hosts <<EOF
[local]
localhost ansible_connection=local
EOF
编写ansiable.cfg文件:
cat > /etc/ansible/ansible.cfg <<EOF
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False
remote_user = root
stdout_callback = yaml
EOF
验证是否成功:
ansible localhost -m ping

3.配置ansiable文件搞定其他主机docker部署
3.1 编写hosts文件
确保你在playbook所在目录(假设是 /etc/ansible):
cd /etc/ansible
提前填写需要部署 Docker 的服务器 IP,支持多台机器批量部署(在hosts文件中):
- [dbservers]
- 方括号 [] 定义主机组名称,组名叫 dbservers,字面含义:数据库服务器组。
[dbservers]
192.168.42.146 ansible_user=root ansible_port=22 ansible_password=*****

3.2 编写安装docker运行脚本
编写运行脚本deploy_docker.yml:
- playbook 里写 hosts: dbservers,代表:对这个分组下面所有IP执行剧本任务。
—
– name: Ansible一键部署Docker环境
hosts: docker_group
become: true
tasks:
– name: 安装yum工具依赖
yum:
name: yum-utils
state: present
– name: 添加Docker yum软件源
yum_repository:
name: docker-ce
description: Docker CE stable repo
baseurl: https://download.docker.com/linux/centos/$releasever/$basearch/stable
gpgcheck: yes
gpgkey: https://download.docker.com/linux/centos/gpg
– name: 安装Docker全套组件
yum:
name:
– docker-ce
– docker-ce-cli
– containerd.io
state: present
– name: 启动docker服务并设置开机自启
systemd:
name: docker
state: started
enabled: yes
– name: 将登录用户加入docker组,免sudo操作docker
user:
name: "{{ ansible_user }}"
groups: docker
append: true

3.3 执行Playbook命令
ansible-playbook -i hosts deploy_docker.yml

3.4 验证是否成功
在被控机器执行:
docker -v
systemctl status docker
看到版本号、服务状态为active(running)即为部署完成。

到这里,Ansible 已经可以根据 hosts 清单执行 Docker 部署任务。先确认这一层能够正常完成,再继续处理跨网络连接,会更容易判断后续问题到底来自 Playbook、本地 SSH,还是公网访问链路。
4.安装cpolar实现随时随地开发
前面的 Ansible 流程默认建立在控制端能够通过 SSH 连接目标主机的基础上。如果目标主机位于没有公网 IP 的内网环境,局域网之外就无法直接继续使用原来的内网地址。
这里增加 cpolar 的目的,是给目标主机的 SSH 服务补充一个公网 TCP 入口。Ansible 本身的 Playbook 和主机清单机制不变,后面只需要把 hosts 中的目标地址和端口改成 cpolar 生成的公网 TCP 地址。
以下继续按照原有安装步骤配置 cpolar:
使用一键脚本安装命令:
sudo curl https://get.cpolar.sh | sh

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)
sudo systemctl status cpolar

cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【http://ip:9200】访问cpolar管理界面,使用cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:
打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

5.配置公网地址
cpolar 安装并启动后,接下来只处理 SSH 这一条链路:本地 22 端口保持不变,通过 TCP 隧道生成公网地址,再把这个地址写入 Ansible 的 hosts 文件。这样可以直接验证 Playbook 是否能够跨网络继续执行。
- 隧道名称:可自定义,本例使用了:ssh,注意不要与已有的隧道名称重复
- 协议:tcp
- 本地地址:22
- 端口类型:随机临时TCP端口
- 地区:China Top

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用任意一个地址在终端中访问即可。
-
tcp 表示使用的协议类型
-
2.tcp.cpolar.top是 Cpolar 提供的域名
-
15197是随机分配的公网端口号

拿到公网 TCP 地址和端口后,可以把它作为 Ansible 的目标主机地址进行连接测试。
接下来修改 hosts 配置并实际执行一次 Playbook。
修改hosts配置文件:
[dbservers]
2.tcp.cpolar.top ansible_user=root ansible_port=15197 ansible_password=***

接下来我们执行配置文件:
ansible-playbook -i hosts deploy_docker.yml
Playbook 执行结束后,再到目标主机检查 Docker 是否已经按预期安装:

如果目标主机能够看到对应的 Docker 安装结果,说明这条公网 SSH 链路已经能够被 Ansible 正常使用。
6.保留固定TCP公网地址
随机 TCP 地址适合先做连通性验证。如果后续要长期把该地址写入 Ansible 主机清单,可以继续按照下面的原有步骤配置固定 TCP 地址。

选择区域和描述:有一个下拉菜单,当前选择的是“China VIP”。 右侧输入框,用于填写描述信息。 保留按钮:在右侧有一个橙色的“保留”按钮,点击该按钮可以保留所选的TCP地址。 列表中显示了一条已保留的TCP地址记录。
-
地区:显示为“China VIP”。
-
地址:显示为“15.tcp.cpolar.top:13633”。

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道ssh,点击右侧的编辑。

修改隧道信息,将保留成功的TCP端口配置到隧道中。
- 端口类型:选择固定TCP端口
- 预留的TCP地址:填写保留成功的TCP地址
点击更新。

创建完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的TCP地址。

更新完成后,后续主机清单可以继续使用这个固定 TCP 地址,避免随机地址变化后再次修改连接信息。
总结
这篇教程可以拆成两层来看。
第一层是 Ansible 本身:控制端安装 Ansible,配置 hosts 主机清单,再通过 deploy_docker.yml 把 Docker 安装、服务启动和权限设置整理成可重复执行的 Playbook。这样后续增加目标主机时,重点就从“重新敲一遍命令”变成了“把主机加入清单并执行同一套剧本”。
第二层是网络连接。如果目标主机只能通过内网 SSH 访问,那么 Ansible 也只能在网络可达的范围内工作。通过 cpolar 把本地 22 端口映射成公网 TCP 地址后,只需要修改 hosts 中的目标地址和端口,就可以继续沿用原来的 Playbook;需要长期使用时,再把随机 TCP 地址调整为固定 TCP 地址。
整个流程里,Ansible 负责的是部署步骤标准化,cpolar 处理的是目标主机的网络可达性。把这两层分开理解,比把所有功能都归到“一键自动化”更容易排查问题,也更适合后续继续扩展到其他服务器和其他 Playbook。
如果后面需要继续扩大使用范围,优先维护好主机清单、Playbook 版本和 SSH 访问权限,比不断增加临时命令更重要。自动化真正有价值的地方,是让同一套部署规则可以被重复执行和检查。
转载自:https://blog.csdn.net/u014727709/article/details/164456185 欢迎 👍点赞✍评论⭐收藏,欢迎指正


