一、项目背景
由于最近入职新公司,公司中实现运维自动化的架构中主要用到ansible,但是ansible脚本主要部署于服务器指令行中不太直观。经搜查资料,得知ansible tower(之前叫做awx)是将ansible的指令界面化,简明直观,简单易用,故搭建了一个ansible tower环境,与大家分享学习。
二、搭建步骤
1.部署服务器之间免密。大家都知道,ansible实现批量时也会通过ssh远程模块去执行命令,因此服务器之间部署免密较为方便。此处,我测试环境有两台服务器(主机名wushengtest-agent1,wushengtest-agent2)实现,使用root(或其他用户)执行ssh-keygen生成秘钥对,将id_rsa.pub文件输出到本地和远程机器中的~/.ssh/authorized_keys文件中,因第一次实现免密会要求输入一个yes或no之后才能实现,故公钥部署好之后手动进行一次远程登录。
host文件,定义主机名(此处也可跳过)
authorized_keys文件(实现免密)
2.防火墙设置。此处可以选择关闭防火墙,或者设置特定的防火墙规则。
(1)关闭防火墙。
iptables -F
iptables -X
iptables -Z
iptables-save
systemctl stop firewalld && systemctl disable firewalld
(2)设置特定防火墙规则。
- --- --- --- --
3.下载epel-release源。
yum install -y epel-release
4.下载postgreSQL。
yum install -y https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
yum install postgresql96-server -y
5.下载其他必要组件。
yum install -y rabbitmq-server wget memcached nginx ansible
6.下载awx。
wget -O /etc/yum.repos.d/awx-rpm.repo https://copr.fedorainfracloud.org/coprs/mrmeee/awx/repo/epel-7/mrmeee-awx-epel-7.repo
yum install -y awx
7.初始化数据库。
/usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK
8.启动rabbit-mq服务。
systemctl start rabbitmq-server && systemctl enable rabbitmq-server
9.启动PostgreSQL服务。
systemctl enable postgresql-9.6 && systemctl start postgresql-9.6
10.启动Memcached服务。
systemctl enable memcached && systemctl start memcached
11.创建PostgreSQL用户。
sudo -u postgres createuser -S awx
12.创建数据库。
sudo -u postgres createdb -O awx awx
####若发生"could not change directory to "/root": Permission denied"报错,忽略即可。
13.数据导入数据库。
sudo -u awx /opt/awx/bin/awx-manage migrate
14.awx 初始化配置。
echo "from django.contrib.auth.models import User; User.objects.create_superuser('admin', 'root@localhost', 'password')" | sudo -u awx /opt/awx/bin/awx-manage shell
sudo -u awx /opt/awx/bin/awx-manage create_preload_data
sudo -u awx /opt/awx/bin/awx-manage provision_instance --hostname=$(hostname)
sudo -u awx /opt/awx/bin/awx-manage register_queue --queuename=tower --hostnames=$(hostname)
15.nginx文件配置。(若不想通过配置域名访问,则此步骤可跳过)
cd /etc/nginx/
cp nginx.conf nginx.conf.bkp #备份nginx配置文件
wget -O /etc/nginx/nginx.conf https://raw.githubusercontent.com/sunilsankar/awx-build/master/nginx.conf #替换nginx配置文件
systemctl start nginx && systemctl enable nginx #启动与开机自启nginx服务
16.开启awx服务。
systemctl start awx-cbreceiver
systemctl start awx-celery-beat
systemctl start awx-celery-worker
systemctl start awx-channels-worker
systemctl start awx-daphne
systemctl start awx-web
systemctl enable awx-cbreceiver
systemctl enable awx-celery-beat
systemctl enable awx-celery-worker
systemctl enable awx-channels-worker
systemctl enable awx-daphne
systemctl enable awx-web
17.创建免密登录用户。
useradd ansible #本地和远程都执行添加
su - ansible #切换到ansible用户
ssh-keygen #生成秘钥
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ansible/.ssh/id_rsa):
Created directory
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ansible/.ssh/id_rsa.
Your public key has been saved in /home/ansible/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:RW/dhTsxcyGicleRI0LpLm+LyhAVinm0xktapodc8gY [email protected]
The key
+---[RSA 2048]----+
| . . ..o. +ooo|
| = o . +.oo+*.o|
| E @ . ..oo.+ o*.|
|. # o oo.. o |
| = * S . |
| o . . . |
| . o |
| o .o |
| o..... |
+----[SHA256]-----+
visudo #配置ansible超级管理员权限
ansible ALL=(ALL) NOPASSWD: ALL #免密执行所有操作
18.将ansible用户秘钥发送到本地和远程的~/.ssh/authorized_keys中,并设置authorized_keys权限为600。
[ansible@wushengtest-agent1 .ssh]$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDStB8JGsVsSLppwYWdnEPLE4xwFqRDn7xE/d3hjBQ6A0JGm1t+GtHB3GPIEjANFTnxQwHpR+cRttbL3mlQvpIYqCZOMZds9XA7VI5qgs0aSGUU8cNYKjmmrMpJa9sB4WVtj3M4u2fEXt9FKKCtjMMpOfiQxIkEhYZ+2GoAX5sHXan7TPcgwb5r7WW6j43aaPc6g9XWN63nonQz6KeMSFZ/y0o2HJMh1FEkktZw6A1HVfn+JNWoQb1glyqGjO1ync+Sok8yXpqakEEWpXNQSQYs4eBEwfkKql5EuolQMIbF9VYhpEcR9LfbMvYdq/RPKWN3mmRMWfPZ2dTZl515XBdV ansible@awx.sunil.cc
[ansible@wushengtest-agent1 .ssh]$
[ansible@wushengtest-agent1 .ssh]$ cat authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDStB8JGsVsSLppwYWdnEPLE4xwFqRDn7xE/d3hjBQ6A0JGm1t+GtHB3GPIEjANFTnxQwHpR+cRttbL3mlQvpIYqCZOMZds9XA7VI5qgs0aSGUU8cNYKjmmrMpJa9sB4WVtj3M4u2fEXt9FKKCtjMMpOfiQxIkEhYZ+2GoAX5sHXan7TPcgwb5r7WW6j43aaPc6g9XWN63nonQz6KeMSFZ/y0o2HJMh1FEkktZw6A1HVfn+JNWoQb1glyqGjO1ync+Sok8yXpqakEEWpXNQSQYs4eBEwfkKql5EuolQMIbF9VYhpEcR9LfbMvYdq/RPKWN3mmRMWfPZ2dTZl515XBdV ansible@awx.sunil.cc
[ansible@wushengtest-agent1 .ssh]$ chmod 600 authorized_keys
[root@wushengtest-agent2 ~]
[ansible@wushengtest-agent2 ~]$ mkdir .ssh
[ansible@wushengtest-agent2 ~]$ chmod 700 .ssh
[ansible@wushengtest-agent2 ~]$ cat .ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDStB8JGsVsSLppwYWdnEPLE4xwFqRDn7xE/d3hjBQ6A0JGm1t+GtHB3GPIEjANFTnxQwHpR+cRttbL3mlQvpIYqCZOMZds9XA7VI5qgs0aSGUU8cNYKjmmrMpJa9sB4WVtj3M4u2fEXt9FKKCtjMMpOfiQxIkEhYZ+2GoAX5sHXan7TPcgwb5r7WW6j43aaPc6g9XWN63nonQz6KeMSFZ/y0o2HJMh1FEkktZw6A1HVfn+JNWoQb1glyqGjO1ync+Sok8yXpqakEEWpXNQSQYs4eBEwfkKql5EuolQMIbF9VYhpEcR9LfbMvYdq/RPKWN3mmRMWfPZ2dTZl515XBdV ansible@awx.sunil.cc
[ansible@wushengtest-agent2 ~]$ chmod 600 .ssh/authorized_keys
19.验证免密登录。
[ansible@wushengtest-agent1 ~]$ ssh wushengtest-agent1
Last login: Sun Mar 11 13:14:06 2018 from 192.168.65.128
[ansible@wushengtest-agent1 ~]$ exit
logout
Connection to client1 closed.
[ansible@wushengtest-agent1 ~]$ ssh wushengtest-agent2
Last login: Sun Mar 11 12:50:14 2018 from 192.168.65.129
[ansible@wushengtest-agent2 ~]$
20.浏览器输入http://awx服务器ip即可访问。用户名/密码初始化为:admin/password
21.创建任务。
(1)创建项目。
21.友情提示:本篇博客根据https://www.howtoforge.com/tutorial/centos-ansible-awx-installation/总结得来。
三、问题总结。
1.ansible tower(aws)安装,python版本应在3以上。
2.ansible文档指示,下载make和python后,在python文件夹中直接进行 make && make install报错Segmentation fault。
应该是make版本冲突,使用/usr/bin/make 进行编译就可以。
3.Failed to get D-Bus connection: Operation not permitted
重启以后解决。
4.yml脚本中自定义hosts报错,用all就可以。
原因为服务器中去执行yml脚本默认从/etc/ansible/hosts中读取hosts,而awx界面的脚本默认从界面设置的inventory->hosts中读取。