Ansible ile Sunucu Otomasyonu: Başlangıç Rehberi
z
zafer ak
Yazar
29 December 2025
3 dakika okuma
453 görüntülenme
Ansible ile IT altyapı otomasyonu. Playbook yazımı, inventory yönetimi, role kullanımı ve sunucu yapılandırma otomasyonu.
Ansible, agentless çalışan bir IT otomasyon aracıdır. Sunucu yapılandırması, uygulama deployment ve orchestration için kullanılır.
Ansible Neden Kullanılır?
- Agentless: Hedef sunuculara agent kurulumu gerekmez
- YAML tabanlı: Okunabilir ve anlaşılır yapılandırma
- Idempotent: Aynı işlemi tekrar çalıştırmak güvenli
- Modüler: Binlerce hazır modül
- SSH bazlı: Standart SSH bağlantısı kullanır
Kurulum
# Ubuntu/Debian
sudo apt update
sudo apt install ansible
# pip ile
pip install ansible
# macOS
brew install ansible
# Versiyon kontrolü
ansible --version
Inventory (Envanter)
# /etc/ansible/hosts veya inventory.ini
[webservers]
web1.example.com
web2.example.com
[dbservers]
db1.example.com ansible_host=192.168.1.100
[all:vars]
ansible_user=deploy
ansible_ssh_private_key_file=~/.ssh/deploy_key
[webservers:vars]
http_port=80
max_clients=200
Ad-hoc Komutlar
# Ping testi
ansible all -m ping
# Komut çalıştırma
ansible webservers -m shell -a "uptime"
# Paket kurulumu
ansible webservers -m apt -a "name=nginx state=present" --become
# Dosya kopyalama
ansible webservers -m copy -a "src=./app.conf dest=/etc/app.conf"
# Servis yönetimi
ansible webservers -m service -a "name=nginx state=restarted" --become
Playbook Yazımı
# site.yml
---
- name: Web Server Kurulumu
hosts: webservers
become: yes
vars:
http_port: 80
domain: example.com
tasks:
- name: Nginx kurulumu
apt:
name: nginx
state: present
update_cache: yes
- name: Nginx yapılandırması
template:
src: templates/nginx.conf.j2
dest: /etc/nginx/sites-available/default
notify: Restart Nginx
- name: Nginx başlatma
service:
name: nginx
state: started
enabled: yes
handlers:
- name: Restart Nginx
service:
name: nginx
state: restarted
Playbook Çalıştırma
# Çalıştır
ansible-playbook site.yml
# Belirli host'lar için
ansible-playbook site.yml --limit webservers
# Dry-run
ansible-playbook site.yml --check
# Verbose output
ansible-playbook site.yml -vvv
Jinja2 Template
# templates/nginx.conf.j2
server {
listen {{ http_port }};
server_name {{ domain }};
root /var/www/{{ domain }};
index index.html;
location / {
try_files $uri $uri/ =404;
}
{% if enable_ssl %}
listen 443 ssl;
ssl_certificate /etc/ssl/{{ domain }}.crt;
ssl_certificate_key /etc/ssl/{{ domain }}.key;
{% endif %}
}
Roles
Role yapısı oluşturma:
# Role oluştur
ansible-galaxy init roles/nginx
# Yapı
roles/nginx/
├── defaults/
│ └── main.yml # Varsayılan değişkenler
├── files/ # Statik dosyalar
├── handlers/
│ └── main.yml # Handler tanımları
├── meta/
│ └── main.yml # Role metadata
├── tasks/
│ └── main.yml # Ana görevler
├── templates/ # Jinja2 templates
└── vars/
└── main.yml # Değişkenler
Role Kullanımı
# site.yml
---
- hosts: webservers
become: yes
roles:
- common
- nginx
- php
- role: mysql
vars:
mysql_root_password: "secure_password"
Conditionals ve Loops
tasks:
# Conditional
- name: Install Apache (Debian)
apt:
name: apache2
state: present
when: ansible_os_family == "Debian"
- name: Install Apache (RedHat)
yum:
name: httpd
state: present
when: ansible_os_family == "RedHat"
# Loop
- name: Create users
user:
name: "{{ item.name }}"
groups: "{{ item.groups }}"
state: present
loop:
- { name: 'alice', groups: 'admin' }
- { name: 'bob', groups: 'developers' }
- { name: 'charlie', groups: 'developers' }
Ansible Vault
# Şifreli dosya oluştur
ansible-vault create secrets.yml
# Düzenle
ansible-vault edit secrets.yml
# Playbook çalıştır
ansible-playbook site.yml --ask-vault-pass
# Vault password file ile
ansible-playbook site.yml --vault-password-file .vault_pass
Sonuç
Ansible, sunucu yönetimini ve deployment süreçlerini otomatikleştirmek için güçlü bir araçtır. YAML tabanlı yapısı sayesinde öğrenmesi kolaydır ve hızla produktif olabilirsiniz.