AWX是Ansible Tower的开源版本,提供Web界面来管理Ansible playbooks。下面是一个完整的安装脚本,包括Docker环境准备、AWX部署和配置。
下载源码进行安装的脚本
#!/bin/bash
# =============================================================================
# AWX安装脚本
# AWX是Ansible Tower的开源版本,提供Web界面管理Ansible
# 支持Ubuntu 20.04/22.04和CentOS 7/8
# 作者:Ansible项目组
# 版本:1.0
# =============================================================================
set -e # 遇到错误立即退出
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log_info() {
echo -e "${BLUE}[INFO]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查是否为root用户
check_root() {
if [[ $EUID -ne 0 ]]; then
log_error "此脚本需要root权限运行"
exit 1
fi
}
# 检测操作系统
detect_os() {
if [[ -f /etc/os-release ]]; then
. /etc/os-release
OS=$NAME
VER=$VERSION_ID
else
log_error "无法检测操作系统版本"
exit 1
fi
log_info "检测到操作系统: $OS $VER"
}
# 安装Docker
install_docker() {
log_info "开始安装Docker..."
# 检查Docker是否已安装
if command -v docker &> /dev/null; then
log_warning "Docker已安装,跳过安装步骤"
return 0
fi
case $OS in
"Ubuntu")
# 更新包索引
apt-get update
# 安装必要的包
apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
gnupg \
lsb-release
# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
# 设置稳定版仓库
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装Docker Engine
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io
;;
"CentOS Linux")
# 安装必要的包
yum install -y yum-utils
# 设置稳定版仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装Docker Engine
yum install -y docker-ce docker-ce-cli containerd.io
;;
*)
log_error "不支持的操作系统: $OS"
exit 1
;;
esac
# 启动并启用Docker服务
systemctl start docker
systemctl enable docker
# 验证Docker安装
if docker --version; then
log_success "Docker安装成功"
else
log_error "Docker安装失败"
exit 1
fi
}
# 安装Docker Compose
install_docker_compose() {
log_info "开始安装Docker Compose..."
# 检查Docker Compose是否已安装
if command -v docker-compose &> /dev/null; then
log_warning "Docker Compose已安装,跳过安装步骤"
return 0
fi
# 下载Docker Compose
DOCKER_COMPOSE_VERSION="2.20.2"
curl -L "https://github.com/docker/compose/releases/download/v${DOCKER_COMPOSE_VERSION}/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 设置执行权限
chmod +x /usr/local/bin/docker-compose
# 创建软链接
ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
# 验证安装
if docker-compose --version; then
log_success "Docker Compose安装成功"
else
log_error "Docker Compose安装失败"
exit 1
fi
}
# 安装Git
install_git() {
log_info "检查Git安装状态..."
if command -v git &> /dev/null; then
log_warning "Git已安装,跳过安装步骤"
return 0
fi
case $OS in
"Ubuntu")
apt-get update
apt-get install -y git
;;
"CentOS Linux")
yum install -y git
;;
*)
log_error "不支持的操作系统: $OS"
exit 1
;;
esac
log_success "Git安装成功"
}
# 下载AWX
download_awx() {
log_info "开始下载AWX..."
AWX_VERSION="21.14.0"
AWX_DIR="/opt/awx"
# 创建AWX目录
mkdir -p $AWX_DIR
cd $AWX_DIR
# 如果目录已存在且不为空,先备份
if [[ -d "awx" && "$(ls -A awx 2>/dev/null)" ]]; then
log_warning "AWX目录已存在,创建备份..."
mv awx awx.backup.$(date +%Y%m%d_%H%M%S)
fi
# 克隆AWX仓库
git clone --branch $AWX_VERSION https://github.com/ansible/awx.git
if [[ -d "awx" ]]; then
log_success "AWX下载成功"
else
log_error "AWX下载失败"
exit 1
fi
}
# 配置AWX
configure_awx() {
log_info "开始配置AWX..."
cd /opt/awx/awx/tools/docker-compose
# 生成密钥
openssl rand -base64 30 > .awx_secret_key
# 创建inventory文件
cat > inventory << EOF
# AWX配置文件
# 基本配置
postgres_data_dir="/opt/awx/pgdocker"
host_port=80
host_port_ssl=443
# 数据库配置
postgres_password=awxpass
postgres_user=awx
postgres_db=awx
# AWX配置
admin_user=admin
admin_password=password
secret_key_file=.awx_secret_key
# Docker配置
compose_dir=/opt/awx/awx/tools/docker-compose
EOF
log_success "AWX配置完成"
}
# 部署AWX
deploy_awx() {
log_info "开始部署AWX..."
cd /opt/awx/awx/tools/docker-compose
# 运行安装脚本
ansible-playbook -i inventory install.yml
if [[ $? -eq 0 ]]; then
log_success "AWX部署成功"
else
log_error "AWX部署失败"
exit 1
fi
}
# 检查AWX状态
check_awx_status() {
log_info "检查AWX服务状态..."
# 等待服务启动
sleep 30
# 检查容器状态
if docker-compose -f /opt/awx/awx/tools/docker-compose/docker-compose.yml ps | grep -q "Up"; then
log_success "AWX服务运行正常"
# 获取本机IP
LOCAL_IP=$(hostname -I | awk '{print $1}')
echo ""
echo "======================================"
echo "AWX安装完成!"
echo "======================================"
echo "访问地址: http://$LOCAL_IP"
echo "管理员用户: admin"
echo "管理员密码: password"
echo "======================================"
echo ""
echo "注意事项:"
echo "1. 首次访问可能需要等待几分钟让服务完全启动"
echo "2. 建议修改默认密码"
echo "3. 确保防火墙允许80端口访问"
echo "======================================"
else
log_error "AWX服务启动失败"
echo "请检查日志: docker-compose -f /opt/awx/awx/tools/docker-compose/docker-compose.yml logs"
exit 1
fi
}
# 安装Ansible(如果未安装)
install_ansible() {
log_info "检查Ansible安装状态..."
if command -v ansible &> /dev/null; then
log_warning "Ansible已安装,跳过安装步骤"
return 0
fi
case $OS in
"Ubuntu")
apt-get update
apt-get install -y software-properties-common
add-apt-repository --yes --update ppa:ansible/ansible
apt-get install -y ansible
;;
"CentOS Linux")
yum install -y epel-release
yum install -y ansible
;;
*)
log_error "不支持的操作系统: $OS"
exit 1
;;
esac
log_success "Ansible安装成功"
}
# 配置防火墙
configure_firewall() {
log_info "配置防火墙规则..."
case $OS in
"Ubuntu")
if command -v ufw &> /dev/null; then
ufw allow 80/tcp
ufw allow 443/tcp
log_success "UFW防火墙规则已配置"
fi
;;
"CentOS Linux")
if command -v firewall-cmd &> /dev/null; then
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --permanent --add-port=443/tcp
firewall-cmd --reload
log_success "Firewalld防火墙规则已配置"
fi
;;
esac
}
# 主函数
main() {
echo "======================================"
echo "AWX自动安装脚本"
echo "======================================"
check_root
detect_os
install_ansible
install_git
install_docker
install_docker_compose
download_awx
configure_awx
configure_firewall
deploy_awx
check_awx_status
log_success "AWX安装流程完成!"
}
# 执行主函数
main "$@"
docker方式安装的脚本
#!/bin/bash
# =============================================================================
# AWX快速安装脚本(简化版)
# 适用于快速测试和开发环境
# =============================================================================
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${BLUE}[INFO]${NC} $1"; }
log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1"; }
log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
# 检查root权限
if [[ $EUID -ne 0 ]]; then
log_error "需要root权限运行此脚本"
exit 1
fi
log_info "开始AWX快速安装..."
# 检测操作系统
if [[ -f /etc/os-release ]]; then
. /etc/os-release
OS=$NAME
else
log_error "无法检测操作系统"
exit 1
fi
log_info "检测到系统: $OS"
# 安装Docker(如果未安装)
if ! command -v docker &> /dev/null; then
log_info "安装Docker..."
case $OS in
"Ubuntu"*)
apt-get update
apt-get install -y docker.io
;;
"CentOS"*)
yum install -y docker
;;
*)
log_error "不支持的操作系统: $OS"
exit 1
;;
esac
systemctl start docker
systemctl enable docker
else
log_info "Docker已安装"
fi
# 安装Docker Compose(如果未安装)
if ! command -v docker-compose &> /dev/null; then
log_info "安装Docker Compose..."
curl -L "https://github.com/docker/compose/releases/download/v2.20.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -sf /usr/local/bin/docker-compose /usr/bin/docker-compose
else
log_info "Docker Compose已安装"
fi
# 创建AWX目录
AWX_DIR="/opt/awx-simple"
mkdir -p $AWX_DIR
cd $AWX_DIR
# 创建docker-compose.yml文件
log_info "创建AWX配置文件..."
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
redis:
image: redis:7
restart: unless-stopped
command: redis-server --appendonly yes
volumes:
- redis_data:/data
postgres:
image: postgres:13
restart: unless-stopped
environment:
POSTGRES_DB: awx
POSTGRES_USER: awx
POSTGRES_PASSWORD: awxpass
PGDATA: /var/lib/postgresql/data/pgdata
volumes:
- postgres_data:/var/lib/postgresql/data/pgdata
awx_web:
image: quay.io/ansible/awx:21.14.0
restart: unless-stopped
ports:
- "80:8052"
environment:
SECRET_KEY: awx_secret_key_change_me
DATABASE_NAME: awx
DATABASE_USER: awx
DATABASE_PASSWORD: awxpass
DATABASE_HOST: postgres
DATABASE_PORT: 5432
REDIS_HOST: redis
REDIS_PORT: 6379
depends_on:
- postgres
- redis
volumes:
- awx_projects:/var/lib/awx/projects
- awx_job_status:/var/lib/awx/job_status
awx_task:
image: quay.io/ansible/awx:21.14.0
restart: unless-stopped
environment:
SECRET_KEY: awx_secret_key_change_me
DATABASE_NAME: awx
DATABASE_USER: awx
DATABASE_PASSWORD: awxpass
DATABASE_HOST: postgres
DATABASE_PORT: 5432
REDIS_HOST: redis
REDIS_PORT: 6379
depends_on:
- postgres
- redis
volumes:
- awx_projects:/var/lib/awx/projects
- awx_job_status:/var/lib/awx/job_status
command: ["/usr/bin/launch_awx_task.sh"]
volumes:
redis_data:
postgres_data:
awx_projects:
awx_job_status:
EOF
# 启动AWX
log_info "启动AWX服务..."
docker-compose up -d
# 等待服务启动
log_info "等待服务启动(约2分钟)..."
sleep 120
# 创建管理员用户
log_info "创建管理员用户..."
docker-compose exec -T awx_web awx-manage createsuperuser --username admin --email admin@example.com --noinput || true
docker-compose exec -T awx_web awx-manage shell << 'PYTHON'
from django.contrib.auth.models import User
try:
user = User.objects.get(username='admin')
user.set_password('password')
user.save()
print("管理员密码已设置")
except User.DoesNotExist:
User.objects.create_superuser('admin', 'admin@example.com', 'password')
print("管理员用户已创建")
PYTHON
# 配置防火墙
case $OS in
"Ubuntu"*)
if command -v ufw &> /dev/null; then
ufw allow 80/tcp
fi
;;
"CentOS"*)
if command -v firewall-cmd &> /dev/null; then
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
fi
;;
esac
# 获取本机IP
LOCAL_IP=$(hostname -I | awk '{print $1}')
echo ""
echo "======================================"
echo "AWX快速安装完成!"
echo "======================================"
echo "访问地址: http://$LOCAL_IP"
echo "用户名: admin"
echo "密码: password"
echo "======================================"
echo ""
echo "管理命令:"
echo "启动: cd $AWX_DIR && docker-compose up -d"
echo "停止: cd $AWX_DIR && docker-compose down"
echo "日志: cd $AWX_DIR && docker-compose logs -f"
echo "======================================"
log_success "AWX安装完成!请等待1-2分钟后访问Web界面"
安装过程截图
AWX 安装脚本使用说明
概述
AWX是Ansible Tower的开源版本,提供了一个Web界面来管理和执行Ansible playbooks。本脚本可以自动在Ubuntu和CentOS系统上安装AWX。
系统要求
支持的操作系统
- Ubuntu 20.04/22.04
- CentOS 7/8
硬件要求
-
最低配置:
- CPU: 2核
- 内存: 4GB
- 磁盘: 20GB可用空间
-
推荐配置:
- CPU: 4核
- 内存: 8GB
- 磁盘: 40GB可用空间
网络要求
- 需要互联网连接以下载依赖包
- 开放端口80(HTTP)和443(HTTPS)
安装步骤
1. 下载脚本
# 如果已有ansible-project目录
cd /root/ansible-project/scripts
# 或者单独下载脚本
wget https://your-server/install-awx.sh
chmod +x install-awx.sh
2. 执行安装
# 使用root权限执行
sudo ./install-awx.sh
# 或者切换到root用户
su -
./install-awx.sh
3. 等待安装完成
安装过程大约需要10-30分钟,具体时间取决于网络速度和系统性能。
安装过程说明
脚本会自动执行以下步骤:
-
系统检查
- 检查root权限
- 检测操作系统版本
-
依赖安装
- 安装Ansible
- 安装Git
- 安装Docker
- 安装Docker Compose
-
AWX部署
- 下载AWX源码
- 配置AWX参数
- 使用Docker Compose部署
-
防火墙配置
- 开放必要端口
- 配置访问规则
访问AWX
安装完成后,可以通过以下方式访问AWX:
Web界面
- 访问地址:
http://your-server-ip
- 默认用户名:
admin
- 默认密码:
password
首次登录
- 打开浏览器访问服务器IP地址
- 使用默认凭据登录
- 强烈建议立即修改默认密码
常见问题
Q1: 安装失败怎么办?
A: 检查以下几点:
- 确保有root权限
- 检查网络连接
- 查看错误日志
- 确保系统满足最低要求
Q2: 无法访问Web界面
A: 检查以下几点:
# 检查服务状态
docker-compose -f /opt/awx/awx/tools/docker-compose/docker-compose.yml ps
# 检查端口监听
netstat -tlnp | grep :80
# 检查防火墙
# Ubuntu
sudo ufw status
# CentOS
sudo firewall-cmd --list-all
Q3: 忘记密码怎么办?
A: 可以通过以下方式重置:
cd /opt/awx/awx/tools/docker-compose
docker-compose exec awx_web awx-manage createsuperuser
Q4: 如何停止AWX服务?
A: 使用以下命令:
cd /opt/awx/awx/tools/docker-compose
docker-compose down
Q5: 如何启动AWX服务?
A: 使用以下命令:
cd /opt/awx/awx/tools/docker-compose
docker-compose up -d
卸载AWX
如果需要完全卸载AWX:
# 停止服务
cd /opt/awx/awx/tools/docker-compose
docker-compose down -v
# 删除容器和镜像
docker system prune -a
# 删除数据目录
rm -rf /opt/awx
rm -rf /opt/awx/pgdocker
配置文件位置
- AWX配置:
/opt/awx/awx/tools/docker-compose/inventory
- Docker Compose:
/opt/awx/awx/tools/docker-compose/docker-compose.yml
- 数据库数据:
/opt/awx/pgdocker
- 密钥文件:
/opt/awx/awx/tools/docker-compose/.awx_secret_key
安全建议
-
修改默认密码
- 登录后立即修改admin密码
- 使用强密码策略
-
网络安全
- 配置HTTPS(推荐)
- 限制访问IP范围
- 使用防火墙规则
-
定期备份
- 备份数据库
- 备份配置文件
- 备份项目数据
性能优化
数据库优化
# 编辑PostgreSQL配置
vim /opt/awx/pgdocker/postgresql.conf
# 调整以下参数
shared_buffers = 256MB
effective_cache_size = 1GB
work_mem = 4MB
容器资源限制
# 在docker-compose.yml中添加资源限制
services:
awx_web:
deploy:
resources:
limits:
memory: 2G
reservations:
memory: 1G
日志查看
# 查看AWX日志
docker-compose -f /opt/awx/awx/tools/docker-compose/docker-compose.yml logs awx_web
# 查看数据库日志
docker-compose -f /opt/awx/awx/tools/docker-compose/docker-compose.yml logs postgres
# 实时查看日志
docker-compose -f /opt/awx/awx/tools/docker-compose/docker-compose.yml logs -f
技术支持
- 官方文档: https://github.com/ansible/awx
- 社区论坛: https://groups.google.com/g/awx-project
- 问题报告: https://github.com/ansible/awx/issues
版本信息
- 脚本版本: 1.0
- AWX版本: 21.14.0
- 支持的Docker版本: 20.10+
- 支持的Docker Compose版本: 2.0+
注意: 本脚本仅用于测试和开发环境。生产环境部署请参考官方文档进行详细配置。