2. 环境准备与基础工具:Linux基础环境配置、Python环境搭建、Git版本控制、Ansible基础安装
好,咱们正式开始动手了。这一章说白了就是「搭台子」。你想想看,后面所有的自动化规则、定制脚本、编排任务,都得跑在某个环境上。如果地基没打牢,后面全是坑。我个人习惯是,每接手一个新项目,第一件事就是把环境标准化,哪怕花一整天也值得。
2.1 Linux基础环境配置
我建议你统一用 CentOS 7.9 或 Ubuntu 20.04 LTS。为什么?因为这两个版本在运维圈子里最稳,社区支持也最成熟。我在项目中遇到过有人用最新的 Ubuntu 22.04,结果 Ansible 某个模块的依赖包还没适配,折腾了两天。嗯,这里要注意:生产环境别追新。
2.1.1 最小化安装后的第一件事
装完系统后,别急着装软件。先做三件事:
- 关闭 SELinux(除非你真的很懂它)—— 我见过太多因为 SELinux 策略导致 Ansible 执行失败的案例。
- 配置 yum/apt 源为国内镜像 —— 阿里云或清华源都行,下载速度快十倍。
- 设置主机名和 hosts 解析 —— 这是后面集群通信的基础。
核心命令速查:
# CentOS 7
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 配置阿里云 yum 源
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum clean all && yum makecache
# 设置主机名
hostnamectl set-hostname ansible-master
echo "192.168.1.100 ansible-master" >> /etc/hosts
2.1.2 基础软件包安装
我个人习惯装完系统后,先跑一遍这个命令,把常用工具补齐:
yum install -y vim wget curl net-tools bind-utils lsof tree bash-completion
为什么要有 bash-completion?你想想看,敲命令时按 Tab 能自动补全,效率提升不是一星半点。我曾经在排查问题时,就因为少装了 net-tools,导致 ifconfig 用不了,还得现装,挺尴尬的。
2.2 Python环境搭建
Ansible 是基于 Python 写的,所以 Python 环境是必须的。CentOS 7 自带的 Python 2.7 其实也能用,但我强烈建议你装 Python 3。为什么?因为 Python 2 在 2020 年已经停止维护了,很多新模块都不再支持。
2.2.1 安装 Python 3.6+
CentOS 7 默认没有 Python 3,需要从 EPEL 源安装:
yum install -y epel-release
yum install -y python36 python36-pip python36-devel
装完之后,记得把 pip3 升级到最新:
pip3 install --upgrade pip
小技巧: 我习惯在 /usr/local/bin 下创建一个软链接,让 python 直接指向 python3:
ln -s /usr/bin/python3 /usr/local/bin/python
这样后面写脚本时就不用纠结是 python 还是 python3 了。
2.2.2 虚拟环境(强烈推荐)
你想想看,如果所有项目都共用一套 Python 包,迟早会出依赖冲突。我就在项目中遇到过:A 项目需要 requests==2.25,B 项目需要 requests==2.26,结果一升级,A 项目挂了。
解决方案就是虚拟环境:
pip3 install virtualenv
mkdir /opt/venv
virtualenv -p python3 /opt/venv/ansible-env
source /opt/venv/ansible-env/bin/activate
激活后,终端前面会出现 (ansible-env) 的提示,表示你已经在虚拟环境里了。后面所有 Python 包都装在这里,互不干扰。
2.3 Git版本控制
做自动化,没有版本控制就是裸奔。你想想看,一个 Playbook 改错了,如果没有 Git,你只能凭记忆回退。我曾经有一次误删了 200 行的配置文件,幸好有 Git,一个 git checkout 就救回来了。
2.3.1 安装与基础配置
yum install -y git
git --version # 确认安装成功
# 配置用户信息(必须)
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
# 推荐配置
git config --global core.autocrlf input
git config --global core.safecrlf true
注意: user.name 和 user.email 不配置的话,Git 会报错。我见过新手直接跳过这步,结果提交记录里全是「unknown」,后面追查问题根本找不到责任人。
2.3.2 初始化 Ansible 项目仓库
我个人习惯把 Ansible 的所有内容放在一个 Git 仓库里管理:
mkdir -p /data/ansible-project
cd /data/ansible-project
git init
echo "*.retry" > .gitignore
echo "*.pyc" >> .gitignore
echo "venv/" >> .gitignore
git add .
git commit -m "初始化 Ansible 项目结构"
为什么要忽略 *.retry 文件?因为 Ansible 执行失败时会生成这些文件,它们不应该被提交到仓库里。嗯,这里要注意:.gitignore 一定要在第一次提交前写好,否则后面再改就麻烦了。
2.4 Ansible基础安装
终于到主角了。Ansible 的安装其实很简单,但有几个细节需要注意。
2.4.1 通过 pip 安装(推荐)
我建议用 pip 安装,因为可以指定版本,也方便升级:
# 先激活虚拟环境
source /opt/venv/ansible-env/bin/activate
# 安装 Ansible
pip install ansible
# 验证安装
ansible --version
输出应该类似这样:
ansible [core 2.12.3]
config file = None
configured module search path = ['/root/.ansible/plugins/modules']
ansible python module location = /opt/venv/ansible-env/lib/python3.6/site-packages/ansible
executable location = /opt/venv/ansible-env/bin/ansible
python version = 3.6.8
版本选择建议:
| Ansible 版本 | 适用场景 | 我的建议 |
|---|---|---|
| 2.9.x | 老项目、稳定至上 | 如果团队习惯用旧版,可以保留 |
| 4.x / 5.x | 新项目、需要新特性 | 推荐,社区支持好 |
| 最新版 | 尝鲜、测试环境 | 生产环境慎用 |
2.4.2 通过 yum 安装(备选)
如果你不想用虚拟环境,也可以用 yum 直接装:
yum install -y epel-release
yum install -y ansible
但说实话,yum 源的 Ansible 版本通常比较旧。我建议还是用 pip 方式,灵活得多。
2.4.3 验证安装与基础配置
装完之后,先建一个最基本的 ansible.cfg:
mkdir -p /etc/ansible
cat > /etc/ansible/ansible.cfg << 'EOF'
[defaults]
inventory = /etc/ansible/hosts
host_key_checking = False
gathering = smart
EOF
然后创建一个测试用的 inventory 文件:
cat > /etc/ansible/hosts << 'EOF'
[local]
127.0.0.1 ansible_connection=local
EOF
最后跑一个简单的 ping 测试:
ansible local -m ping
如果返回:
127.0.0.1 | SUCCESS => {
"changed": false,
"ping": "pong"
}
恭喜你,环境搭建成功了!
避坑指南: 我曾经在 CentOS 7 上直接用 yum 装 Ansible,结果装的是 2.4 的旧版,很多新模块都用不了。后来统一改用 pip 安装,再也没出过问题。所以,能用 pip 就别用 yum。
2.5 本章小结
这一章我们做了四件事:
- 配置了 Linux 基础环境,关闭了 SELinux,配好了国内源
- 搭建了 Python 3 环境,并配置了虚拟环境
- 安装了 Git,初始化了 Ansible 项目仓库
- 通过 pip 安装了 Ansible,并验证了连通性
说白了,这些步骤就像盖房子前打地基。虽然看起来琐碎,但每一步都关系到后面的稳定性。下一章,我们就要开始写真正的 Ansible Playbook 了。到时候你会发现,今天花的时间,绝对值。