使用Nginx代理和Lets Encrypt在CentOS 7上安装Ansible AWX

时间:2020-02-23 14:31:40  来源:igfitidea点击:

欢迎来到我们的教程,该教程如何使用Nginx反向代理和Lets Encrypt SSL证书在CentOS 7/Fedora上安装Ansible AWX。此安装将在Nginx上配置http到https重定向。

什么是AWX?

AWX是Red Hat Ansible Tower的上游项目,它提供了基于Web的用户界面,REST API和在Ansible之上构建的任务引擎。这是AWX的商业衍生产品Tower的上游项目。这是一个由Red Hat赞助的开源社区项目,它使用户可以更好地控制其在IT环境中使用Ansible项目。 AWX源代码在Apache License 2.0下可用。

使用Nginx反向代理和Letsencrypt在CentOS 7/Fedora上安装Ansible AWX

掌握了基础知识之后,让我们深入研究CentOS 7和Fedora操作系统上AWX的安装步骤。我假设我们已经安装并更新了CentOS或者Fedora服务器。请注意,epel对于此安装是必需的,我们可以通过运行以下命令来安装epel:

sudo yum -y install epel-release

安装基本依赖项:

AWX要求某些软件包具有AD依赖性。可以通过在终端上运行以下命令来安装它们。

sudo yum -y install git gcc gcc-c++ lvm2 bzip2 gettext nodejs yum-utils device-mapper-persistent-data ansible python-pip vim

安装Docker CE:

我们之前已经介绍了在各种Linux发行版中安装Docker社区版。该教程可从以下链接获得:

如何在Ubuntu/Debian/Fedora/Arch/CentOS上安装Docker CE

安装docker python模块:

AWX需要docker python模块。这是使用pip安装的,

$sudo pip install -U docker docker-compose
$pip show docker
Name: docker
Version: 4.0.2
Summary: A Python library for the Docker Engine API.
Home-page: https://github.com/docker/docker-py
Author: None
Author-email: None
License: Apache License 2.0
Location: /usr/lib/python3.7/site-packages
Requires: six, websocket-client, requests
Required-by: docker-compose

从git复制AWX

下一步是从git克隆AWX。

$git clone --depth 50 https://github.com/ansible/awx.git
Cloning into 'awx'...
remote: Counting objects: 8886, done.
remote: Compressing objects: 100% (4351/4351), done.
remote: Total 8886 (delta 5573), reused 6866 (delta 4368), pack-reused 0
Receiving objects: 100% (8886/8886), 9.24 MiB | 871.00 KiB/s, done.
Resolving deltas: 100% (5573/5573), done.

转到安装程序目录

由于我们需要在安装程序目录下执行ansible剧本,因此请首先导航至该目录。

cd awx/installer/

检查列表文件,我们可以根据需要进行自定义:

$vim inventory

产生管理员密码

$pwgen 15

生成AWX密钥

$pwgen -N 1 -s 30
pXc5pYYCECKK5dHEXqV5jawgvkZToK

使用上面获得的值修改库存文件:

localhost ansible_connection=local ansible_python_interpreter="/usr/bin/env python"

[all:vars]

dockerhub_base=ansible
awx_task_hostname=awx
awx_web_hostname=awxweb
postgres_data_dir=/tmp/pgdocker
host_port=80
host_port_ssl=443
docker_compose_dir=/tmp/awxcompose
pg_username=awx
pg_password=awxpass
pg_database=awx
pg_port=5432
rabbitmq_password=awxpass
rabbitmq_erlang_cookie=cookiemonster
admin_user=admin
admin_password=password
create_preload_data=True
secret_key=awxsecret

执行剧本

运行ansible-playbook命令,然后运行option-i,告诉它要使用的列表文件。剧本文件的名称是install.yml。

$sudo ansible-playbook -i inventory install.yml

如果收到错误错误ImportError:没有名为requests.packages.urllib3的模块,请运行:

sudo pip install requests urllib3 pyOpenSSL --force --upgrade

一段时间后,部署应完成。然后,我们可以使用docker ps命令检查已创建的Docker容器及其状态。

已专门为AWX创建了5个容器。这些是Memcached容器AWX_task容器AWS Web容器Rabbitmq容器PostgreSQL容器

要管理这些容器,请使用docker-compose或者usedocker native命令。如果未更改,则可以通过host-ip:8000或者port80访问该门户。我们将获得与以下类似的welcomeashboard。

输入我们在列表文件中指定的用户名和密码。身份验证后,我们将进入AWX管理信息中心,

配置Nginx反向代理

如果我们想使用http到https重定向为AWX配置Nginx反向代理,请执行以下步骤。我们要做的第一件事是使用certbot-auto工具为AWX生成SSL证书。

生成Letsencrypt SSL证书

wget https://dl.eff.org/certbot-auto
chmod +x certbot-auto
sudo mv certbot-auto /usr/local/bin
sudo chmod a+x /usr/local/bin/certbot-auto
sudo /usr/local/bin/certbot-auto certonly --standalone \
 -d awx.example.com -d www.awx.example.com \ 
 --preferred-challenges http --agree-tos -n -m theitroad@localhost \
 --keep-until-expiring

获得ssl证书后,修改下面的配置代码片段以与nginx一起使用。

$sudo cat /etc/nginx/conf.d/awx.conf 
server
{
 listen 443 ssl http2;
 server_name awx.example.com www.awx.example.com;

location /
 {
   proxy_http_version 1.1;
   proxy_set_header Host $host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header X-Forwarded-Proto $scheme;
   proxy_set_header Upgrade $http_upgrade;
   proxy_set_header Connection "upgrade";
   proxy_pass http://192.168.x.x:8000/;
 }

ssl on;
ssl_certificate /etc/letsencrypt/live/awx.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/awx.example.com/privkey.pem;
ssl_session_timeout 5m;
ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_protocols TLSv1.2;
ssl_prefer_server_ciphers on;

access_log /var/log/nginx/awx.access.log;
error_log /var/log/nginx/awx.error.log;
}

server {
   listen 80;
   server_name awx.example.com www.awx.example.com;
   add_header Strict-Transport-Security max-age=2592000;
   rewrite ^ https://$server_name$request_uri? permanent;
}

用真实域名或者子域名替换example.com,然后放置SSL证书的正确位置。然后,最后确认nginx配置是否正确,然后重新启动nginx。

$nginx -t
$sudo systemctl restart nginx