Ubuntu 26.04 Üzerine Ansible Kurulumu ve İlk Playbook Yazma Rehberi

Ubuntu 26.04 sistemlere Ansible kurulumu, envanter yönetimi, ad-hoc komutlar ve ilk Nginx kurulum playbook'unu oluşturma adımları.

L
Linuxize
0 görüntülenme
Ubuntu 26.04 Üzerine Ansible Kurulumu ve İlk Playbook Yazma Rehberi

Giriş

Birden fazla sunucu yönetirken, her sunucuya SSH üzerinden aynı komutları çalıştırmak uzun vadede sürdürülebilir değildir. Ansible, altyapınızın istenen durumunu YAML dosyalarıyla tanımlamanızı ve bu durumu birçok sunucuya paralel olarak uygulamayı sağlayan bir otomasyon aracıdır. Ansible'ın en büyük avantajlarından biri, hedef sunucularda ajan kurulumu gerektirmemesi ve sadece SSH erişimi ile Python'un bulunmasını gerektirmesidir.

Bu rehberde, Ubuntu 26.04 üzerine Ansible kurulumunu, uzak sunucular için envanter oluşturmayı, ad-hoc komutları çalıştırmayı ve bir grup sunucuya Nginx kurulumu yapan ilk playbook'unu yazmayı adım adım öğreneceksiniz.

Zorluk Seviyesi: Başlangıç (Beginner)
Süre Tahmini: 30-45 dakika

Ön Gereksinimler

Ansible kurulumuna başlamadan önce aşağıdaki koşulların sağlandığından emin olun:

1. Kontrol Düğüm (Control Node)

2. Yönetilen Sunucular (Managed Hosts)

  • Bir veya daha fazla Ubuntu 26.04 sunucusu (kontrol düğümünden SSH erişimi olan).
  • Her yönetilen sunucuda Python'un varsayılan olarak yüklü olması (Ubuntu 26.04 ile birlikte gelir).
  • SSH anahtar tabanlı kimlik doğrulaması (parola kimlik doğrulaması da çalışır ancak otomatikleştirme için önerilmez).

3. SSH Bağlantısı ve Anahtar Doğrulaması

Kontrol düğümünden her yönetilen sunucuya SSH anahtarıyla bağlanabilmelisiniz. Bunu aşağıdaki komutla test edebilirsiniz:

ssh ubuntu@

Bağlantı başarısız olursa, SSH anahtarlarını doğru şekilde ayarladığınızdan emin olun.

Adım 1: Ansible Kurulumu

1.1. Ubuntu Depolarından Ansible Kurulumu

Ubuntu 26.04, Ansible'ı varsayılan depolarında barındırmaktadır. Aşağıdaki komutlarla Ansible'ı kurabilirsiniz:

sudo apt update
sudo apt install ansible

Kurulumu doğrulamak için Ansible versiyonunu kontrol edin:

ansible --version

Çıktı aşağıdaki gibi olmalıdır:

ansible [core 2.20.x]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/user/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
python version = 3.14.x

Not: Ubuntu 26.04, Ansible 13 topluluk paketiyle birlikte ansible-core 2.20'yi sağlar. Daha yeni bir versiyona ihtiyacınız varsa, sistem Python ortamını değiştirmeden Ansible'ı izole bir ortamda kurabilirsiniz.

1.2. pipx ile Ansible Kurulumu (Gelişmiş Kullanıcılar İçin)

Eğer sistem Python ortamını değiştirmeden Ansible'ın en yeni versiyonunu kurmak istiyorsanız, pipx kullanarak kurulum yapabilirsiniz:

sudo apt install pipx
pipx ensurepath
pipx install --include-deps ansible

pipx ensurepath komutundan sonra yeni bir terminal açın ve ansible komutunun çalıştığından emin olun.

İpucu: Ubuntu 26.04 için resmi Ansible PPA henüz yayınlanmadığından, bu yöntemi kullanmayın.

Adım 2: Envanter Dosyası Oluşturma

Envanter dosyası, Ansible'ın hangi sunucularla iletişim kuracağını tanımlar. Öncelikle bir çalışma dizini oluşturun ve envanter dosyasını oluşturun:

mkdir -p ~/ansible-demo
cd ~/ansible-demo
nano inventory.ini

Aşağıdaki içeriği ekleyin (IP adreslerini kendi sunucularınızla değiştirin):

[web]
web1 ansible_host=192.168.1.21
web2 ansible_host=192.168.1.22

[db]
db1 ansible_host=192.168.1.31

[all:vars]
ansible_user=ubuntu
ansible_python_interpreter=/usr/bin/python3

Açıklamalar:

  • [web] ve [db] grupları tanımlar.
  • Her giriş, bir sunucu takma adı ve bağlantı değişkenlerinden oluşur.
  • [all:vars] bloğu, tüm sunucular için varsayılan değerleri ayarlar.
  • ansible_user, SSH kullanıcısını belirtir (genellikle bulut görüntülerinde ubuntu veya özel filonuzda kendi kullanıcınız).

Proje düzeyinde bir yapılandırma dosyası oluşturarak envanteri varsayılan olarak ayarlayın:

nano ansible.cfg

Aşağıdaki içeriği ekleyin:

[defaults]
inventory = ./inventory.ini

Adım 3: Bağlantıyı Test Etme

Ansible'ın tüm sunuculara erişebildiğini doğrulamak için ping modülünü kullanın:

ansible all -m ping

Başarılı bir çalıştırma her sunucu için yeşil pong çıktısı vermelidir:

web1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python3"
    },
    "changed": false,
    "ping": "pong"
}

Eğer UNREACHABLE hatası alırsanız, SSH anahtarını, kullanıcı adını ve temel bağlantıyı kontrol edin.

Adım 4: İlk Playbook'unu Yazma

Bir playbook, sunucularınızın istenen durumunu tanımlayan YAML dosyasıdır. Aşağıdaki komutla bir playbook oluşturun:

nano site.yml

Aşağıdaki içeriği ekleyin:

---
- name: Configure web servers
  hosts: web
  become: true
  tasks:
    - name: Install Nginx
      ansible.builtin.apt:
        name: nginx
        state: present
        update_cache: true

    - name: Ensure Nginx is running and enabled
      ansible.builtin.service:
        name: nginx
        state: started
        enabled: true

    - name: Deploy a custom landing page
      ansible.builtin.copy:
        content: |
          

Managed by Ansible

dest: /var/www/html/index.html owner: root group: root mode: "0644"

Açıklamalar:

  • Playbook, web grubundaki sunucuları hedefler.
  • become: true ile her görev root olarak çalıştırılır.
  • Üç görev bulunur: Nginx kurulumu, hizmetin başlatılması ve varsayılan index sayfasının değiştirilmesi.

Adım 5: Playbook'u Çalıştırma

Değişiklikleri uygulamadan önce playbook'un yapısını kontrol edin:

ansible-playbook --syntax-check site.yml

Söz dizimi kontrolü başarılıysa, playbook'u çalıştırın:

ansible-playbook site.yml

Çıktı aşağıdaki gibi olmalıdır:

PLAY RECAP *******************************************************************
web1 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
web2 : ok=4 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

changed=3, Ansible'in dört görevden üçünü uyguladığını gösterir (facts toplama görevi sadece ok olarak sayılır).

Playbook'u check modunda çalıştırarak simülasyonunu yapabilirsiniz:

ansible-playbook --check --diff site.yml
Uyarı: Check modu, bazı modüllerin tam desteklememesi nedeniyle üretim değişiklikleri için kullanmadan önce çıktısını dikkatlice inceleyin.

Adım 6: Ansible Vault ile Gizli Değerleri Koruma

Playbook'larda genellikle şifreler veya API token'ları gibi gizli değerler bulunur. Ansible Vault, değişken dosyalarını şifreleyerek sürüm kontrolünde güvenli bir şekilde saklamanızı sağlar.

Öncelikle bir gizli değerler dosyası oluşturun:

ansible-vault create secrets.yml

Güçlü bir şifre belirleyin ve aşağıdaki gibi gizli değerleri ekleyin:

db_password: "s3cret-value"

Playbook'unuzda gizli değerleri kullanmak için:

---
- name: Configure web servers
  hosts: web
  become: true
  vars_files:
    - secrets.yml
  tasks:
    - name: Install Nginx
      ansible.builtin.apt:
        name: nginx
        state: present
        update_cache: true

Playbook'u çalıştırırken gizli şifreyi girmeniz gerekecektir:

ansible-playbook site.yml --ask-vault-pass
İpucu: Gizli şifre dosyasını asla sürüm kontrolüne eklemeyin. Gizli şifreyi bir parola yöneticisinde veya --vault-password-file ile dışarıdan referans verilen bir dosyada saklayın.

Sorun Giderme

UNREACHABLE Hataları

Ansible, hedef sunuculara SSH ile bağlanamaz. Öncelikle manuel olarak ssh ansible_user@host komutunu çalıştırarak bağlantıyı test edin. ansible_user envanterde belirtilen kullanıcıyla eşleşmelidir.

sudo: a password is required Hatası

Yönetilen sunucuda kullanıcı sudo için parola gerektiriyorsa, playbook'u --ask-become-pass parametresiyle çalıştırın veya yönetilen sunucularda parola gerektirmeden sudo yetkisi verin.

Python Yorumlayıcısı Bulunamadı Hatası

Ansible, doğru Python yorumlayıcısını bulamazsa, envanterde ansible_python_interpreter=/usr/bin/python3 olarak belirleyin.

Host Key Doğrulama Hatası

Sunucu anahtarı ~/.ssh/known_hosts dosyasında bulunmuyorsa veya değişmişse, SSH ile bağlanarak anahtarın doğruluğunu kontrol edin. Eğer sunucu yeniden inşa edildiysa, eski anahtarı ssh-keygen -R 192.168.1.21 komutuyla silin ve yeniden bağlanın.

SSS

Ansible ve ansible-core arasındaki fark nedir?

ansible-core, Ansible'ın motoru ve yerleşik modüllerinden oluşur. ansible paketi ise ansible-core üzerine eklenmiş topluluk koleksiyonlarını içerir. Çoğu kullanıcı, ihtiyaç duydukları ek koleksiyonları ansible-galaxy ile kurarak ansible paketini kullanır.

Yönetilen sunucularda ek bir şey kurmam gerekir mi?

Sadece Python ve SSH sunucusu gerekir. Her ikisi de Ubuntu'da varsayılan olarak yüklüdür. Python'un yüklü olup olmadığını bu rehberden kontrol edebilirsiniz.

Ansible'ı yerel makinemde çalıştırabilir miyim?

Evet. Envanterde localhost ansible_connection=local olarak ekleyebilir veya playbook'u ansible-playbook -i localhost, -c local site.yml komutuyla çalıştırabilirsiniz. localhost sonundaki virgül, Ansible'a dosya yolu olarak değil, satır içi envanter olarak işlem yapmasını sağlar.

Gerçek bir proje nasıl yapılandırılır?

Mantığı roles/ dizini altında rollerle ayırın, grup değişkenlerini group_vars/ altında ve sunucuya özel değerleri host_vars/ altında gruplayın. site.yml dosyasını kısa tutun ve rollerini gruplara göre içe aktarın. Ansible dokümantasyonu bu yapıyı "en iyi uygulamalar projesi" olarak adlandırır.

Sonraki Adımlar

Artık Ubuntu 26.04 üzerinde çalışan bir Ansible kurulumunuz ve web sunucularını yapılandıran bir playbook'unuz var. Bundan sonra görevleri roller halinde ayırabilir, değişkenler ve şablonlarla playbook'ları parametreleyebilir ve CI/CD pipeline'ına ansible-playbook --check komutunu ekleyebilirsiniz. Aynı envanter ve rollerle sunucularınızı Ubuntu 26.04 üzerine Docker kurulumu için de hazırlayabilirsiniz.

Kaynak

Linuxize