Ubuntu Üzerine Docker Compose ile AWX Kurulumu

Uygulama Yönetimi Ekibi
7 min readOct 21, 2022

Merhabalar önceki yazılarımızda Ansible’dan bahsetmiştik. Şimdi ise sizlere Ansible ile otomasyon yaparken kullanacağınız open-source bir tool olan AWX’ten bahsetmek istiyoruz.

Ansible, 2015 yılında RedHat tarafından satın alınan ve sistem yöneticilerinin oldukça yaygın kullandıkları bir otomasyon aracıdır. Ansible Tower ise Ansible ın görsel bir şekilde efektif olarak kullanılmasını sağlar. RedHat tarafından satın alındıktan sonra open-source olarak Ansible AWX olarak yayınlanmış ve Community tarafından geliştirilmektedir.

Ansible Tower ise RedHat tarafından geliştirilip lisanslı bir şekilde yoluna devam etmektedir.

Bu dökümanda AWX kurulumunu yapacağız. Ansible AWX kurulumunu birçok farklı yolla yapabilirsiniz.

  • Openshift
  • Kubernetes
  • Docker ve Docker-Compose

Ansible AWX’in Avantajları

AWX ile günlük yazılım yönetimi sorunlarıyla uğraşırken faydalı olduğu kanıtlanan aşağıdaki özelliklerden bazılarına da sahiptir:

  • Kullanıcı Arayüzü — AWX’in kullanıcı arayüzü, Ansible ortamında olup bitenler için bir ekran sağlar.

Şunları içerir:

1. Başarılı ve başarısız playbook job durumunun sayısı.

2. Proje sayısı ve senkronizasyon durumu.

3. Stok sayısı.

4. Ansible ortamında çalışmakta olan playbook grafiği.

  • Cloud Platformları Desteği — AWX’i Azure, GCP ve daha pek çok Cloud platform ile entegre edebilirsiniz.
  • Organizasyon Yapısı — Kullanıcıları takımlara ve gruplara ayırmanızı sağlar.
  • Merkezi Loglama Entegrasyonu — AWX, ELK gibi loglama uygulaması ile entegre edilebilir.
  • RBAC– AWX yardımıyla ekipleriniz için en az ayrıcalık politikalarına göre roller oluşturabilirsiniz. LDAP ve Active Directory (AD) sunucularıyla da entegre edilebilir.
  • Güvenlik — AWX size daha iyi operasyonel kontrol ve güvenlik sağlar. Bu şekilde, ekibinizin güvenliğini de artırma eğilimindedir.
  • Planlanmış İşler — Planlanmış işleri planlamanıza yardımcı olur.
  • Ölçeklenebilirlik — Ansible AWX, gereksinimlerinize göre AWX clusterına node eklemenize veya bunları kontrol etmenize olanak tanır.
  • Kullanıcı Aktivitelerinin İzlenmesi — Ansible AWX’in yardımıyla, işi kimin yürüttüğü, ne tür bir iş yürüttükleri, işi ne zaman yürüttükleri ve çok daha fazlası gibi kullanıcıların etkinliklerini de takip edebilirsiniz.

Sistem Gereksinimleri

  • Sisteminizde Ubuntu 20.04 çalıştıran bir sunucu.
  • Minimum 4 GB RAM ve 2 Çekirdekli 3.4 GHz CPU.
  • Root yetkisine sahip bir kullanıcı.

Gerekli Bağımlılıkların Yüklenmesi

Başlamadan önce, sunucunuza Node.js, NPM, Ansible ve diğerleri dahil olmak üzere bazı gerekli bağımlılıkları yüklemeniz gerekecektir.

Öncelikle aşağıdaki komutu kullanarak Node.js ve NPM’yi kurabiliriz:

apt install nodejs npm -ynpm install npm — global

Ardından, aşağıdaki komutla Python bağımlılığını kurabiliriz:

apt install python3-pip git pwgen -y

Aşağıdaki adım, aşağıdaki komutu çalıştırarak Ansible paketini kurmaktır:

apt install ansible -y

Ansible yüklendikten sonra, aşağıdaki komutu kullanarak Ansible sürümünü doğrulayabiliriz:

ansible — version

Aşağıdaki çıktıyı alacaksınız:

ansible 2.9.6config file = /etc/ansible/ansible.cfgconfigured module search path = [‘/root/.ansible/plugins/modules’, ‘/usr/share/ansible/plugins/modules’]ansible python module location = /usr/lib/python3/dist-packages/ansibleexecutable location = /usr/bin/ansiblepython version = 3.8.10 (default, Jun 22 2022, 20:18:18) [GCC 9.4.0]

Kurulumu docker ile yapacağımız için biraz Docker’dan bahsedelim.

Docker Nedir?

Docker open source bir ‘container’ teknolojisidir. Docker, aynı işletim sistemi üzerinde, yüzlerce hatta binlerce birbirinden izole ve bağımsız containerlar sayesinde sanallaştırma sağlayan bir teknolojidir.

Web uygulamalarımızın kolayca kurulumunu, testini, çalışmasını sağlar. Bunun yanında sunucu maliyetlerini önemli ölçüde azaltır.

Container Nedir:

Docker Daemon tarafından Linux çekirdeği içerisinde birbirinden izole olarak çalıştırılan process’lerin her birine verilen isimdir. Virtual Machine (Sanal Makina) analojisinde Docker’ı Hypervisor’e benzetirsek fiziksel sunucu üzerinde halihazırda koşturulmakta olan her bir işletim sisteminin (sanal sunucunun) Docker’daki karşılığı Container’dır.

Image Nedir:

Containerlar layer halindeki Image’lardan oluşur. Docker Image ise containerlara kurulacak ve çalıştırılacak uygulamaların veya OS’lerin image dosyalarıdır. Örnek verecek olursak mysql, mongodb, redis, ubuntu, mariadb.. Yüzlercesi mevcut. Buyrunuz: https://hub.docker.com/

Docker Compose Nedir:

Compose, birden fazla containere sahip docker uygulamalarını tanımlamak ve çalıştırmak için kullanılır. Compose ile uygulamanızın servislerini configure etmek için bir YAML dosyası kullanılır. Ardından, tek bir komutla configure ettiğiniz ayarlar ile tüm servislerinizi oluşturup ve başlatabilirsiniz.

Daha fazla bilgi için: bu linkten öğrenebilirsiniz https://www.docker.com/

Docker ve Docker Compose Kurulumu

Şimdi kuruluma başlayalım, sunucunuza Docker ve Docker Compose paketini kurmanız gerekecek. Varsayılan olarak, Docker’ın en son sürümü Ubuntu varsayılan deposunda mevcut değildir. Docker CE deposunu APT’ye eklemeniz gerekecektir.

Öncelikle aşağıdaki komutu kullanarak gerekli bağımlılıkları kurabiliriz:

apt install apt-transport-https ca-certificates curl software-properties-common -y

Ardından aşağıdaki komutla Docker CE deposunu ekleyebiliriz:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable”

Repoyu aşağıdaki komutla güncelleyebiliriz:

apt update -y

Docker CE ve Docker Compose kullanabilmek için aşağıdaki komutlarla kurulumları yapıyoruz:

apt install docker-ce -yapt install docker-compose -y

Aşağıdaki komut ile docker versiyonunu öğrenebiliriz:

docker — version

Aşağıdaki gibi çıktı elde edebilirsiniz:

Docker version 20.10.17, build 100c701

Aynı şekilde docker compose versiyonunu da aşağıdaki komutla öğrenebilirsiniz:

docker-compose — version

Aşağıdaki gibi çıktı elde edebilirsiniz:

docker-compose version 1.25.0, build unknown

Daha sonra, Docker Compose versiyonuyla eşleşen Docker Compose Python modülünü yüklemeniz gerekecek. Aşağıdaki komutu kullanarak yükleyebilirsiniz:

pip3 install docker-compose==1.25.0

Ansible AWX İndirilmesi

Aşağıdaki komut ile AWX github reposu üzerinden projeyi kendi sunucumuza indiriyoruz:

wget https://github.com/ansible/awx/archive/17.1.0.zip

Zip dosyasını indirdikten sonra aşağıdaki komut ile de zipi bulunduğu klasöre çıkarıyoruz:

unzip 17.1.0.zip

Şimdi AWX klasörüne geçiş yapıyoruz ve aşağıdaki komut ile AWX için secret key oluşturuyoruz:

cd awx-17.1.0/installerpwgen -N 1 -s 40

Aşağıdaki gibi bir çıktı görebilirsiniz:

eMyJLuLsDTlqjOinT1mJnZasdasdşkweqweqwewqe

Daha sonra AWX klasörü içerisinde inventory dosyasını editliyoruz ve aşağıdaki değişiklikleri yapıyoruz:

admin_user=adminadmin_password=yourpasswordsecret_key= eMyJLuLsDTlqjOinT1mJnZasdasdşkweqweqwewqe

Dosyayı kaydedip kapattıktan sonra aşağıdaki komutu çalıştırarak AWX ‘i ayağa kaldırıyoruz:

ansible-playbook -i inventory install.yml

Bu komut bir docker-compose.yml dosyası oluşturacak, gerekli tüm imageları Docker Hub’dan indirecek ve aşağıda gösterildiği gibi başlatacaktır:

TASK [local_docker : Create Redis socket directory] ******************************************************************************************ok: [localhost]TASK [local_docker : Create Docker Compose Configuration] ************************************************************************************ok: [localhost] => (item={‘file’: ‘environment.sh’, ‘mode’: ‘0600’})changed: [localhost] => (item={‘file’: ‘credentials.py’, ‘mode’: ‘0600’})ok: [localhost] => (item={‘file’: ‘docker-compose.yml’, ‘mode’: ‘0600’})ok: [localhost] => (item={‘file’: ‘nginx.conf’, ‘mode’: ‘0600’})ok: [localhost] => (item={‘file’: ‘redis.conf’, ‘mode’: ‘0664’})TASK [local_docker : Render SECRET_KEY file] *************************************************************************************************ok: [localhost]TASK [local_docker : Remove AWX containers before migrating postgres so that the old postgres container does not get used] *******************ok: [localhost]TASK [local_docker : Run migrations in task container] ***************************************************************************************changed: [localhost]TASK [local_docker : Start the containers] ***************************************************************************************************changed: [localhost]TASK [local_docker : Update CA trust in awx_web container] ***********************************************************************************changed: [localhost]TASK [local_docker : Update CA trust in awx_task container] **********************************************************************************changed: [localhost]TASK [local_docker : Wait for launch script to create user] **********************************************************************************ok: [localhost -> localhost]TASK [local_docker : Create Preload data] ****************************************************************************************************changed: [localhost]PLAY RECAP ***********************************************************************************************************************************localhost : ok=21 changed=8 unreachable=0 failed=0 skipped=73 rescued=0 ignored=1

AWX Kullanıcı Arayüzüne Erişim

Şimdi, web tarayıcımızı açalım ve http://sunucu-ip'iniz URL’sini kullanarak Ansible AWX’e erişelim. Aşağıdaki gibi AWX giriş ekranını görebiliriz:

Admin kullanıcı adımızı ve şifremizi girelim ve Log in tuşuna tıklayalım.

Aşağıdaki ekrandaki gibi bir AWX ekranı görebiliriz:

AWX Containerlarının Kontrolü

Tüm AWX containerlarını doğrulamak için Docker Compose komut satırını kullanabilirsiniz. İlk önce, dizini aşağıdaki komutla awxcompose olarak değiştirebiliriz:

cd ~/.awx/awxcompose

Aşağıdaki komutu kullanarak tüm çalışan containerları doğrulayabiliriz:

docker-compose ps

Aşağıdaki çıktıyı görmeliyiz:

Tüm Docker imagelarının bir listesini almak için aşağıdaki komutu çalıştıralım:

docker images

AWX loglarını kontrol etmek için aşağıdaki komutu çalıştıralım:

docker-compose logsawx_postgres | 2022–07–23 03:40:01.616 UTC [94] STATEMENT: SELECT “conf_setting”.”id”, “conf_setting”.”created”, “conf_setting”.”modified”, “conf_setting”.”key”, “conf_setting”.”value”, “conf_setting”.”user_id” FROM “conf_setting” WHERE (“conf_setting”.”key” = ‘OAUTH2_PROVIDER’ AND “conf_setting”.”user_id” IS NULL) ORDER BY “conf_setting”.”id” ASC LIMIT 1awx_postgres | 2022–07–23 03:40:01.617 UTC [94] ERROR: relation “conf_setting” does not exist at character 158awx_postgres | 2022–07–23 03:40:01.617 UTC [94] STATEMENT: SELECT “conf_setting”.”id”, “conf_setting”.”created”, “conf_setting”.”modified”, “conf_setting”.”key”, “conf_setting”.”value”, “conf_setting”.”user_id” FROM “conf_setting” WHERE (“conf_setting”.”key” = ‘OAUTH2_PROVIDER’ AND “conf_setting”.”user_id” IS NULL) ORDER BY “conf_setting”.”id” ASC LIMIT 1awx_postgres | 2022–07–23 03:41:52.654 UTC [1] LOG: received fast shutdown requestawx_postgres | 2022–07–23 03:41:52.656 UTC [1] LOG: aborting any active transactionsawx_postgres | 2022–07–23 03:41:52.658 UTC [89] FATAL: terminating connection due to administrator commandawx_postgres | 2022–07–23 03:41:52.673 UTC [1] LOG: background worker “logical replication launcher” (PID 83) exited with exit code 1awx_postgres | 2022–07–23 03:41:52.680 UTC [108] FATAL: terminating connection due to administrator commandawx_postgres | 2022–07–23 03:41:52.683 UTC [78] LOG: shutting downawx_postgres | 2022–07–23 03:41:52.800 UTC [1] LOG: database system is shut downawx_postgres |awx_postgres | PostgreSQL Database directory appears to contain a database; Skipping initializationawx_postgres |awx_postgres | 2022–07–23 03:41:54.783 UTC [1] LOG: starting PostgreSQL 12.11 (Debian 12.11–1.pgdg110+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1–6) 10.2.1 20210110, 64-bitawx_postgres | 2022–07–23 03:41:54.784 UTC [1] LOG: listening on IPv4 address “0.0.0.0”, port 5432awx_postgres | 2022–07–23 03:41:54.784 UTC [1] LOG: listening on IPv6 address “::”, port 5432awx_postgres | 2022–07–23 03:41:54.787 UTC [1] LOG: listening on Unix socket “https://net.cloudinfrastructureservices.co.uk/var/run/postgresql/.s.PGSQL.5432"awx_postgres | 2022–07–23 03:41:54.820 UTC [26] LOG: database system was shut down at 2022–07–23 03:41:52 UTCawx_postgres | 2022–07–23 03:41:54.927 UTC [1] LOG: database system is ready to accept connections

Çalışan tüm containerları durdurmak istiyorsanız, aşağıdaki komutu çalıştırabilirsiniz:

docker-compose down

Hepsini aşağıdaki komutla tekrar başlatabilirsiniz:

docker-compose up -d

Umarız açıklayıcı ve keyifli bir yazı olmuştur.

Emekleri için Naci AYDIN’a teşekkür ederiz…

--

--