前言
在运维工作中,面对上百台服务器的软件部署,手动逐台登录不仅耗时耗力,还容易因人为失误导致配置不一致。Ansible 的出现有效解决了这一痛点,它无需在目标服务器安装额外代理,通过 SSH 即可实现标准化操作。本文将分享一套完整的 Ansible 自动化部署方案,涵盖本地安装、Playbook 编写以及利用内网穿透工具实现异地远程部署的实战流程。
1. Ansible 简介与核心优势
Ansible 是一款开源的自动化运维工具,旨在简化配置管理、应用部署和任务编排。其核心设计理念是简单、可靠且无侵入。
主要特性:
- 无代理架构:仅依赖标准 SSH 服务即可完成通信,降低系统开销与维护复杂度。
- 基于 SSH 的安全通信:支持密钥认证、跳板机等企业级安全策略。
- 幂等性保障:模块设计遵循幂等原则,确保多次执行后系统状态一致。
- YAML 驱动的声明式语法:结构清晰,易于阅读和维护。
- 丰富的模块生态:覆盖操作系统、中间件及云平台的全场景需求。
2. CentOS 7 环境准备
首先更新系统软件包并安装 EPEL 仓库以获取 Ansible 包。
yum update -y
yum install -y epel-release
安装完成后验证版本信息:
ansible --version
3. 编写 Playbook 部署 Nginx
进入 Ansible 工作目录(假设为 /etc/ansible):
cd /etc/ansible
编辑 hosts 文件,添加目标主机信息。注意格式规范,IP 与参数间需有空格:
[dbservers]
192.168.42.146 ansible_user=root ansible_password=***
创建 Playbook 文件(例如 nginx.yml),注意 YAML 缩进必须严格对齐:
---
- name: 在主机上安装并启动 Nginx
hosts: dbservers
become: yes
gather_facts: yes
tasks:
- name: 安装 EPEL 软件源(Nginx 依赖)
yum:
name: epel-release
state: present
- name: 安装 Nginx
yum:
name: nginx
state: present
- name: 启动 Nginx 服务并设置开机自启
systemd:
name: nginx
state: started
enabled: yes
执行 Playbook:
ansible-playbook -i hosts nginx.yml
部署完成后,在目标主机验证安装情况:
rpm -q nginx
systemctl status nginx
ss -tuln | grep ':80'
若显示服务运行正常且端口监听,则说明部署成功。此脚本可适配上百台主机,实现一键批量安装。
4. 内网穿透与远程访问
当需要在家或非同一局域网环境下管理内网服务器时,SSH 直连可能受阻。此时可使用内网穿透工具将本地 SSH 服务映射到公网。
以下以通用隧道工具为例进行配置(如 cpolar):
安装与启动
使用官方脚本安装:
sudo curl https://get.cpolar.sh | sh
检查服务状态:
sudo systemctl status cpolar
配置隧道
登录 Web 管理界面(通常为 http://ip:9200),创建 TCP 隧道:
- 协议:tcp
- 本地地址:22
- 端口类型:随机临时 TCP 端口
- 地区:China Top
创建成功后,记录生成的公网地址(域名 + 端口),用于后续 Ansible 连接。
5. 固定公网地址配置
为避免每次重启后公网地址变化,建议保留固定 TCP 端口。
在管理后台找到已创建的隧道,点击编辑,将端口类型改为'固定 TCP 端口',并填入已预留的地址。更新后,公网地址将保持不变,便于长期维护。
修改 hosts 文件中的 IP 为公网地址:
[dbservers]
15.tcp.cpolar.top ansible_user=root ansible_port=13633 ansible_password=***
再次执行 Playbook 即可完成远程部署。
总结
本文介绍了如何利用 Ansible 实现 Nginx 的批量安装与配置管理,并通过内网穿透技术解决了异地远程运维的网络障碍。这套方案具备高复用性和稳定性,适合中小规模集群的自动化交付。掌握这些基础技能,能显著提升运维效率,减少重复劳动。


