Ansible ile Sunucu Otomasyonu: Başlangıç Rehberi

z

zafer ak

Yazar

29 December 2025 3 dakika okuma 453 görüntülenme
Ansible ile Sunucu Otomasyonu: Başlangıç Rehberi
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 Automation

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
Server Configuration

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 %}
}
Infrastructure Automation

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.

İlgili Yazılar