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)
- Ubuntu 26.04 çalıştıran bir makine (sanal makine, bulut sunucusu veya fiziksel sunucu olabilir).
- sudo ayrıcalıklarına sahip bir kullanıcı hesabı.
- Bu makine, Ansible komutlarını çalıştıracak olan makinedir.
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ülerindeubuntuveya ö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,
webgrubundaki sunucuları hedefler. become: trueile 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.


