CentOS7下Docker化AWX实战指南:从零搭建到故障排查

在自动化运维领域,Ansible无疑是当前最受欢迎的配置管理工具之一。而AWX作为Ansible的官方Web界面,为团队协作提供了可视化操作平台。本文将带您从零开始,在CentOS7环境下通过Docker快速部署AWX,并针对国内用户常见的网络问题和配置错误提供详细解决方案。

1. 环境准备与Docker配置

在开始AWX部署前,我们需要确保基础环境配置正确。CentOS7作为企业级Linux发行版,其稳定性使其成为生产环境的首选,但默认软件仓库中的Docker版本往往较旧。

1.1 系统基础检查

首先确认系统版本和资源是否符合要求:

# 查看系统版本
cat /etc/redhat-release

# 检查硬件资源
free -h
df -h
lscpu

推荐配置

  • CentOS 7.6及以上版本
  • 4核CPU/8GB内存(最低2核/4GB)
  • 50GB可用磁盘空间(AWX容器组会占用约15GB)

1.2 Docker引擎安装与优化

对于国内用户,直接从官方源安装Docker可能会遇到网络问题。以下是优化后的安装方案:

# 卸载旧版本(如有)
sudo yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

# 安装依赖工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

# 配置阿里云镜像源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 替换下载地址为国内镜像
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo

# 安装Docker CE
sudo yum install -y docker-ce docker-ce-cli containerd.io

# 配置镜像加速
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://registry.docker-cn.com", "https://docker.mirrors.ustc.edu.cn"]
}
EOF

# 启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl enable --now docker

注意:如果使用企业内网环境,可能需要额外配置代理或私有镜像仓库

验证Docker安装:

docker version
docker run hello-world

2. Docker Compose与Python环境配置

AWX的容器化部署依赖Docker Compose工具和Python环境,以下是关键配置步骤。

2.1 Docker Compose安装

根据Docker版本选择对应的Compose版本:

Docker版本推荐Compose版本兼容性说明
20.10+v2.x完全支持
19.03-20.09v1.29.x稳定支持
<19.03v1.25.x有限支持

安装最新版Docker Compose:

# 下载二进制文件
sudo curl -L "https://github.com/docker/compose/releases/download/v2.10.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 设置执行权限
sudo chmod +x /usr/local/bin/docker-compose

# 验证安装
docker-compose --version

2.2 Python环境配置

虽然AWX运行在容器中,但管理操作仍需要Python支持:

# 检查现有Python版本
python3 --version

# 安装Python3和pip
sudo yum install -y python3 python3-pip

# 升级pip并安装必要模块
python3 -m pip install --upgrade pip
python3 -m pip install docker-compose ansible

常见问题处理:

  • pip安装超时:添加-i https://pypi.tuna.tsinghua.edu.cn/simple参数使用清华源
  • 依赖冲突:使用虚拟环境python3 -m venv awx-env && source awx-env/bin/activate

3. AWX容器化部署实战

AWX官方推荐使用Operator方式部署,但对于初学者,我们选择更简单的Docker Compose方案。

3.1 获取AWX部署文件

# 创建工作目录
mkdir -p ~/awx && cd ~/awx

# 下载官方部署文件
wget https://github.com/ansible/awx/archive/refs/tags/17.1.0.tar.gz
tar -zxvf 17.1.0.tar.gz
cd awx-17.1.0/installer

3.2 配置inventory文件

编辑inventory文件,关键配置项如下:

# 数据库配置
postgres_data_dir=/var/lib/pgdocker
postgres_image=postgres:12

# AWX核心配置
awx_official=true
awx_image=ansible/awx:17.1.0

# 管理员凭证
admin_user=admin
admin_password=your_secure_password

# 项目存储
project_data_dir=/var/lib/awx/projects

重要:生产环境务必修改默认密码,并考虑配置TLS证书

3.3 启动AWX服务

执行部署命令:

ansible-playbook -i inventory install.yml

部署过程可能持续15-30分钟,取决于网络状况。可以通过以下命令监控进度:

docker logs -f awx_task

4. 常见问题诊断与解决

在实际部署过程中,国内用户常会遇到以下几类问题。

4.1 镜像拉取失败

现象Error response from daemon: Get https://registry-1.docker.io/v2/: net/http: request canceled

解决方案

  1. 配置Docker镜像加速器(见1.2节)
  2. 手动拉取镜像:
    docker pull ansible/awx:17.1.0
    docker pull postgres:12
    docker pull redis:alpine
    
  3. 或者修改inventory文件使用国内镜像:
    awx_image=registry.cn-hangzhou.aliyuncs.com/ansible/awx:17.1.0
    

4.2 内存不足导致容器崩溃

现象Task container exited with non-zero exit code 137

解决方案

  1. 增加系统交换空间:
    sudo dd if=/dev/zero of=/swapfile bs=1G count=4
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
    
  2. 限制AWX内存使用(修改inventory):
    docker_compose_mem_limit=4g
    

4.3 数据库连接问题

现象Is the server running on host "postgres" and accepting TCP/IP connections on port 5432?

解决方案

  1. 检查Postgres容器状态:
    docker ps | grep postgres
    
  2. 重置数据库容器:
    docker-compose down
    sudo rm -rf /var/lib/pgdocker
    docker-compose up -d
    

4.4 Web界面无法访问

现象:服务已启动但无法通过浏览器访问

排查步骤

  1. 检查端口监听:
    ss -tulnp | grep 80
    
  2. 查看Nginx容器日志:
    docker logs awx_web
    
  3. 临时关闭防火墙测试:
    sudo systemctl stop firewalld
    

5. AWX基本配置与使用

成功部署后,通过http://服务器IP访问AWX界面。首次登录后建议进行以下配置:

5.1 初始设置清单

  • [ ] 修改管理员密码
  • [ ] 配置SMTP服务器(邮件通知)
  • [ ] 设置LDAP/AD集成(企业用户认证)
  • [ ] 创建组织和工作团队
  • [ ] 配置项目仓库(Git/SVN)
  • [ ] 设置凭据(SSH密钥、API令牌等)

5.2 创建第一个自动化任务

  1. 定义Inventory

    [web_servers]
    server1 ansible_host=192.168.1.101
    server2 ansible_host=192.168.1.102
    
    [db_servers]
    db1 ansible_host=192.168.1.201
    
  2. 创建Playbook

    - name: Install and start Apache
      hosts: web_servers
      become: yes
      tasks:
        - name: Install httpd
          yum:
            name: httpd
            state: present
        - name: Start service
          service:
            name: httpd
            state: started
    
  3. 配置Job Template

    • 关联Inventory和Playbook
    • 设置执行环境
    • 定义调度计划

5.3 监控与维护建议

  • 日志收集:定期备份/var/lib/awx目录
  • 性能监控:配置Prometheus监控容器资源使用
  • 备份策略
    # 数据库备份
    docker exec -t awx_postgres pg_dump -U awx awx > awx_backup.sql
    
    # 项目备份
    tar -czvf awx_projects.tar.gz /var/lib/awx/projects
    

在AWX的实际使用中,我发现最实用的功能是工作流(Workflow)设计,它可以将多个Job Template串联起来,形成完整的自动化流水线。例如,可以先执行基础设施检查,然后进行应用部署,最后运行测试验证,整个过程完全自动化。

更多推荐