:::: MENU ::::

Ansible AWX auf Ubuntu 16.04 LTS installieren (inkl. Proxy für SSL)

Stand: Dezember 2017

Letzte Woche war ich im Linuxhotel beim Ansible / Ansible AWX Seminar von Jan-Piet Mens, in dieser Woche geht es nun an die Praxis und dazu soll als erstes bei uns ein Ansible AWX Server aufgesetzt werden. AWX ist das Open Source Upstream Projekt für den Ansible Tower welches seit September über das GIT Repo github.com/ansible/awx, RedHat sei dank, verfügbar ist.

Da das AWX Git Projekt recht jung ist unterliegt es naturgemäß starken Veränderungen, diese Anleitung verliert also vermutlich schnell ihre Gültigkeit. Daher würde ich mich sehr über Kommentare freuen.

Voraussetzungen:

  • Frisches Ubuntu 16.04 mit Verbindung zum Internet
  • SSH Terminal

Hinweise:

  • Dieses simple Tutorial beinhaltet keine Sicherheitsmaßen zur Sicherung des Systems(Backup, Firewall, Dienstsicherheit…)
  • Dieses Tutorial ist für Testumgebungen und nicht Production gedacht

Ich spare mit große Erläuterungen, da ich glaube das AWX von erfahrenen Linux Admins mit Ansible Kenntnissen eingesetzt wird. Sollte dennoch Fragen offen sein, gerne mich kontaktieren oder die Kommentarfunktion nutzen.

Ansible AWX wird als OpenShift oder Docker-Container geliefert. Dieses Tutorial beschreibt die Docker Variante

Im ersten Step installieren wir die benötigen Pakete und laden die AWX Pakete herunten (Die AWX Logos könnt Ihr anpassen). Ubuntu 16.04 hat im Repo eine zu alte Ansible Version, daher das zusätzliche Repository.

sudo -i 
apt-add-repository ppa:ansible/ansible
apt-get update
apt-get upgrade
apt-get install ansible docker docker.io git python-pip
pip install docker-py
service docker start
mkdir awx-install
cd awx-install
git clone https://github.com/ansible/awx.git
git clone https://github.com/ansible/awx-logos.git
cd awx/installer/

Im zweiten Step muss das inventory File angepasst werden, hier sind Installationsparameter hinterlegt. Ich habe alle von mir angepassten Parameter markiert, letzlich ist hier aber der persönliche Geschmack und Umstand entscheidend.

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

[all:vars]

# Remove these lines if you want to run a local image build
# Otherwise the setup playbook will install the official Ansible images. Versions may
# be selected based on: latest, 1, 1.0, 1.0.0, 1.0.0.123
# by default the base will be used to search for ansible/awx_web and ansible/awx_task
dockerhub_base=ansible
dockerhub_version=latest

# This will create or update a default admin (superuser) account in AWX, if not provided
# then these default values are used
default_admin_user=meinadminuser
default_admin_password=meinadminpw

# AWX Secret key
# It's *very* important that this stay the same between upgrades or you will lose the ability to decrypt
# your credentials
awx_secret_key=meinsehrlangerundmitzahlenwie1234versehenersecretkey

# Openshift Install
# Will need to set -e openshift_password=developer -e docker_registry_password=$(oc whoami -t)
# openshift_host=127.0.0.1:8443
# awx_openshift_project=awx
# openshift_user=developer
# awx_node_port=30083

# Standalone Docker Install
# Das Datadir ist angepasst damit auch nach einem leeren von /tmp/ die Datenbank noch existiert
postgres_data_dir=/var/pgdocker

# Der Port ist angepasst damit der (Nginx)SSL Proxy sauber vermittelt
host_port=8052

# Required for Openshift when building the image on your own
# Optional for Openshift if using Dockerhub or another prebuilt registry
# Required for Standalone Docker Install if building the image on your own
# Optional for Standalone Docker Install if using Dockerhub or another prebuilt registry
# Define if you want the image pushed to a registry. The container definition will also use these images
# docker_registry=172.30.1.1:5000
# docker_registry_repository=awx
# docker_registry_username=developer

# Docker_image will not attempt to push to remote if the image already exists locally
# Set this to true to delete images from docker on the build host so that they are pushed to the remote repository
# docker_remove_local_images=False

# Set pg_hostname if you have an external postgres server, otherwise
# a new postgres service will be created
# pg_hostname=postgresql
pg_username=awx
pg_password=awxsecretpass
pg_database=awx
pg_port=5432

# Use a local distribution build container image for building the AWX package
# This is helpful if you don't want to bother installing the build-time dependencies as
# it is taken care of already.
# NOTE: IMPORTANT: If you are running a mininshift install, using this container might not work
# if you are using certain drivers like KVM where the source tree can't be mapped
# into the build container.
# Thus this setting must be set to False which will trigger a local build. To view the
# typical dependencies that you might need to install see:
# installer/image_build/files/Dockerfile.sdist
# use_container_for_build=true

# Build AWX with official logos
# Requires cloning awx-logos repo into the project root.
# Review the trademark guidelines at https://github.com/ansible/awx-logos/blob/master/TRADEMARKS.md
# awx_official=false

# Proxy
#http_proxy=http://proxy:3128
#https_proxy=http://proxy:3128
#no_proxy=mycorp.org

# Container networking configuration
# Set the awx_task and awx_web containers' search domain(s)
#awx_container_search_domains=example.com,ansible.com

Im dritten Step führen wir die Installation aus

ansible-playbook -i inventory install.yml

Done. Du kannst dich nun schon über die Weboberfläche: http://ipdeshosts:8052 anmelden

Um nun die Seite noch mit SSL zu schützen, installieren wir einfach einen nginx mit:

apt-get install nginx

Und passen danach die default-config an, wichtig hierbei ist inbesondere der Websocketeintrag, damit auch Sockets weiter funktionieren.
Die Config hier ist nur ein Beispiel und muss an eure Umgebung angepasst werden

server {
 listen 80;
 server_name awx.mydomain.de;
 return 301 https://$server_name$request_uri;
}


server {

listen 443;
 server_name awx.mydomain.de;

 ssl_certificate /etc/ssl/mycert.crt;
 ssl_certificate_key /etc/ssl/private/mykey.key;

ssl on;
 ssl_session_cache builtin:1000 shared:SSL:10m;
 ssl_protocols TLSv1.1 TLSv1.2;
 ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
 ssl_prefer_server_ciphers on;

access_log /var/log/nginx/awx.access.log;

location / {

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;

# Fix the “It appears that your reverse proxy set up is broken" error.
 proxy_pass http://127.0.0.1:8052;
 proxy_read_timeout 90;

proxy_redirect http://127.0.0.1:8052 https://awx.mydomain.de;
 }

location /websocket/ {

proxy_pass http://127.0.0.1:8052;
 proxy_http_version 1.1;
 proxy_set_header Upgrade $http_upgrade;
 proxy_set_header Connection "upgrade";
 proxy_read_timeout 86400;

}
 }

Am Ende dann einen Service Restart für Nginx durchführen und schon ist euer AWX auch über SSL erreichbar


One Comment

So, what do you think ?