Ansible ile Sunucu Konfigürasyon Otomasyonu: Adım Adım Kurulum ve Playbook Rehberi
Sunucu yönetiminde tekrar eden işlemler, DevOps ve sistem yöneticileri için hem zaman kaybı hem de insan hatası riski taşır. İşte Ansible tam bu noktada devreye girer: sunucularınızı kod olarak tanımlamanıza olanak sağlayan, ajan gerektirmeyen, güçlü bir konfigürasyon yönetimi aracıdır. Eğer daha önce Terraform ile altyapıyı ayağa kaldırdıysanız, Ansible ile o altyapının yapılandırmasını tamamen otomatize edebilir; böylece her sunucu kurulumu aynı, tekrarlanabilir ve hatasız olur.
Bu Ansible kurulum rehberi, sıfırdan başlayarak bir Ansible kontrol düğümünü kurmayı, envanter dosyası hazırlamayı ve ilk playbook’unuzu yazıp çalıştırmayı adım adım anlatacak.
Ansible Nedir ve Neden Kullanılır?
Ansible, Red Hat tarafından desteklenen, GNU General Public License ile lisanslanmış açık kaynaklı bir otomasyon aracıdır. Puppet, Chef gibi rakiplerinden en büyük farkı agentless (ajansız) mimarisidir: yönetilen sunuculara herhangi bir ek yazılım kurmanız gerekmez. Ansible, tüm işlemlerini SSH üzerinden gerçekleştirir. Bu sayede hem kurulumu inanılmaz kolaydır hem de mevcut altyapınıza anında entegre olur.
Ansible’ı kullanarak:
- Paket kurulumlarını (apt, yum vb.)
- Servis yönetimini (başlatma, durdurma)
- Dosya ve dizin işlemlerini (kopyalama, şablon oluşturma)
- Kullanıcı hesap yönetimini
- Ve çok daha fazlasını tek bir komutla yüzlerce sunucuda aynı anda gerçekleştirebilirsiniz.
Özellikle Terraform gibi provisioning araçlarıyla uyum içinde çalışır. Örneğin, Terraform ile sunucuları bulutta oluşturduktan hemen sonra Ansible playbook’unuzu tetikleyerek Nginx, Docker veya uygulama bağımlılıklarını otomatik kurabilirsiniz. Signalique’in daha önceki “Terraform ile Altyapı Otomasyonu” rehberini okuduysanız, Ansible’ın yapılandırma katmanını nasıl devreye soktuğunu çok iyi anlayacaksınız.
Ön Koşullar
Bu rehberden en iyi şekilde faydalanmak için temel düzeyde Linux terminal bilgisine sahip olmanız yeterlidir. Ansible’ı kuracağınız kontrol düğümü (genelde yöneticinizin bilgisayarı veya bir jump server) bir Linux dağıtımı çalıştırmalıdır (Ubuntu 20.04/22.04, Debian, CentOS/RHEL vb.). Yönetilecek hedef düğümler (web sunucuları, veritabanı sunucuları) için ise tek ihtiyaç:
- SSH sunucusunun çalışıyor olması
- Python’un kurulu olması (Ansible modüllerinin çalışması için gerekli)
Ansible 11 (ansible-core 2.18) sürümü itibarıyla yönetilen düğümlerde Python 3.8 veya üzeri önerilir. Yeni sürümler otomatik olarak en uygun Python sürümünü algılayabilir.
Adım 1: Kontrol Düğümüne Ansible Kurulumu
Ansible’ı kurmanın en kolay yolu işletim sisteminizin varsayılan paket yöneticisini kullanmaktır. Ubuntu/Debian için:
sudo apt update
sudo apt install ansible
Red Hat türevi sistemler için:
sudo yum install epel-release
sudo yum install ansible
Alternatif olarak, en güncel kararlı sürümü her zaman Python paket yöneticisi (pip) ile de kurabilirsiniz:
sudo apt install python3-pip
pip install ansible
Kurulumu doğrulamak için sürüm sorgulaması yapın:
ansible --version
2026 yılı itibarıyla Ansible’ın kararlı sürümü Ansible 11 (ansible-core 2.18) olup, ansible --version çıktınızda bu sürüm bilgilerini görmelisiniz. Artık kontrol düğümü hazır.
Adım 2: Envanter Dosyası Oluşturma
Ansible, hangi sunucularda işlem yapacağını bilmek için bir envanter (inventory) dosyasına ihtiyaç duyar. Varsayılan envanter yolu /etc/ansible/hosts olmakla birlikte, kendi proje dizininizde özel bir envanter dosyası kullanmak çok daha esnek ve taşınabilir bir yöntemdir.
En basit haliyle bir .ini envanter dosyası şöyle görünür:
[webservers]
web1.example.com ansible_host=192.168.1.10 ansible_user=ubuntu
web2.example.com ansible_host=192.168.1.11 ansible_user=ubuntu
[databases]
db1.example.com ansible_host=192.168.1.20 ansible_user=ubuntu
Burada:
[webservers]ve[databases]gruplarını tanımladık.- Her sunucu için IP adresini (
ansible_host) ve SSH kullanıcısını (ansible_user) belirttik. - Eğer tüm sunucular aynı kullanıcıyı kullanıyorsa, bu değişkeni grup seviyesinde
[all:vars]altında da tanımlayabilirsiniz.
Envanter dosyalarını YAML formatında yazmak da mümkündür ve özellikle iç içe gruplar için daha okunaklıdır. Ancak başlangıç için INI formatı yeterlidir.
Önemli Not: Kontrol düğümünün hedef sunuculara SSH anahtarı ile parolasız erişebildiğinden emin olun. Eğer parola ile bağlanıyorsanız, komut anında --ask-pass parametresini kullanabilirsiniz, fakat otomasyon için anahtar tabanlı giriş şiddetle önerilir.
Adım 3: Bağlantıyı Test Etme
Envanter dosyanızı inventory.ini olarak kaydettiğinizi varsayalım. Ansible’ın ping modülü ile tüm sunuculara erişip erişemediğini kontrol edebilirsiniz (bu ping, ICMP değil; Ansible’ın kendi bağlantı testidir):
ansible all -i inventory.ini -m ping
Komut, SUCCESS yanıtları döndürmeli ve Python sürüm bilgisini içermelidir. Eğer belirli bir grubu hedeflemek isterseniz all yerine webservers yazmanız yeterlidir.
Bu aşamada üç sunucunuz da yeşil yanıt veriyorsa, artık ilk playbook’umuzu yazmaya hazırız.
Adım 4: İlk Playbook’u Yazmak
Ansible playbook’ları, sunucuların olması istenen durumunu YAML formatında betimleyen dosyalardır. İstenen durumu bildirimsel olarak tanımlar, modüller aracılığıyla adım adım uygular. İlk playbook’umuz şu işlemleri yapacak:
webserversgrubuna Nginx kur- Özel bir
index.htmldosyasını hedef sunuculara kopyala - Nginx servisini başlat ve sistem açılışında otomatik başlatılacak şekilde ayarla
site.yml isimli bir dosya oluşturun ve aşağıdaki içeriği ekleyin:
---
- name: Web sunucularını yapılandır
hosts: webservers
become: yes
tasks:
- name: Nginx'i kur
apt:
name: nginx
state: present
update_cache: yes
- name: Özel index.html dosyasını kopyala
copy:
src: files/index.html
dest: /var/www/html/index.html
owner: www-data
group: www-data
mode: '0644'
- name: Nginx servisini başlat ve etkinleştir
service:
name: nginx
state: started
enabled: yes
Playbook’u kısaca inceleyelim:
hosts: webserverssatırı, yalnızca envanterdekiwebserversgrubunu hedefler.become: yesile işlemlerinsudoyetkisiyle yapılması sağlanır (paket kurmak ve servis yönetmek için gerekli).tasksaltında sırasıyla üç adet modül kullanılmıştır:apt: Ubuntu/Debian paket yöneticisi ile Nginx kurar,update_cacheparametresiapt updateeşdeğeridir.copy: Yerelfiles/index.htmldosyasını hedef sunucunun web kök dizinine kopyalar.service: Nginx’in çalışmasını ve sistem başlangıcında otomatik açılmasını sağlar.
Playbook’ta kullanılan files/index.html dosyasını da aynı dizinde files alt klasörüne ekleyin:
mkdir -p files
echo "<h1>Ansible ile deploy edildi!</h1>" > files/index.html
İdempotent (tekrar tekrar çalıştırılsa da aynı sonucu veren) bir yapıda olduğundan, Ansible aynı playbook’u ikinci kez çalıştırdığınızda yalnızca değişiklik gereken adımları uygular. Bu, yapılandırmaların sürekli tutarlı kalmasını sağlar.
Adım 5: Playbook’u Çalıştırma
Hazırladığınız playbook’u çalıştırmak için terminalde şu komutu verin:
ansible-playbook -i inventory.ini site.yml
Komutun çıktısı adım adım hangi görevlerin çalıştırıldığını, başarı durumunu (ok, changed, failed) gösterecektir. Eğer her şey yolundaysa, tarayıcınızdan web sunucularınızın IP adresine gittiğinizde “Ansible ile deploy edildi!” mesajını görmelisiniz.
Tebrikler! İlk Ansible playbook’unuzu yazdınız ve başarıyla uyguladınız. Bu örnek, daha karmaşık kurulumlar için bir şablondur.
Sonraki Adımlar ve İpuçları
Ansible ile otomasyona yeni başlayanlar için birkaç püf noktası ve ileri seviye konuya kısaca değinelim:
- Dinamik Envanterler: Bulut sağlayıcılar (AWS, Azure) veya Docker gibi ortamlardan otomatik envanter çekmek için dinamik envanter betikleri kullanabilirsiniz.
- Roller (Roles): Playbook’lar büyüdükçe yeniden kullanılabilirlik için görevleri, değişkenleri, şablonları anlamlı rollere bölebilirsiniz.
- Ansible Galaxy: Topluluk tarafından paylaşılan binlerce rolü
ansible-galaxykomutuyla projenize dahil edebilirsiniz. - Vault ile Şifreleme: Hassas verileri (şifreler, API anahtarları) ansible-vault ile şifreleyerek güvenli şekilde saklayabilirsiniz.
- CI/CD Entegrasyonu: Ansible playbook’larını Jenkins, GitLab CI gibi araçlarla birleştirerek altyapı dağıtımlarınızı tamamen otomatize edebilirsiniz.
Ayrıca, Ansible ile konteyner uygulamaları yönetme ihtiyacı hissederseniz, Signalique’in “Docker Compose ile Çoklu Konteyner Geliştirme Ortamı Kurulumu” rehberinden ilham alabilir; konteyner ortamının altyapısını Ansible ile hazırlayıp Docker Compose dosyalarını dağıtabilirsiniz.
Sonuç
Bu Ansible kurulum rehberi ile sadece bir kontrol düğümü kurup, bir envanter dosyası oluşturup, ilk playbook’unuzu yazarak sunucu yapılandırmasını nasıl otomatize edebileceğinizi gördünüz. Ansible’ın ajan gerektirmeyen yapısı sayesinde, karmaşık kurulum derdi olmadan dakikalar içinde üretim ortamlarını yönetmeye başlayabilirsiniz.
Ansible, Terraform ile birleştiğinde altyapıyı uçtan uca kodla yönetmek için eksiksiz bir araç seti sunar. Kendi projelerinizde Ansible playbook’ları yazarak hem zaman kazanabilir hem de yapılandırma süreçlerinizi standartlaştırabilirsiniz. Daha fazla bilgi için resmi Ansible dokümantasyonunu inceleyebilir, topluluk tarafından hazırlanan rolleri keşfedebilirsiniz.
Şimdi sıra sizde: bilgisayarınızda Ansible’ı kurun, bir test sanal makinesi hazırlayın ve ilk playbook’unuzu çalıştırın. Otomatize edilmiş altyapı dünyasına hoş geldiniz.