Takip et

Ansible ve DigitalOcean: Güçlü Bir İkili

Günümüzün hızla değişen dijital dünyasında, sunucu kurulumu ve yönetimi süreçlerini otomatikleştirmek, hem zaman tasarrufu hem de tutar

Günümüzün hızla değişen dijital dünyasında, sunucu kurulumu ve yönetimi süreçlerini otomatikleştirmek, hem zaman tasarrufu hem de tutarlılık açısından kritik bir öneme sahiptir. Manuel kurulumlar hataya açık, yavaş ve tekrarlayan görevler içerirken, otomasyon bu sorunları ortadan kaldırır. Bu rehberde, popüler bulut sağlayıcısı DigitalOcean üzerinde sunucu kurulumunu ve ilk yapılandırmasını Ansible kullanarak nasıl otomatikleştireceğinizi adım adım inceleyeceğiz. Bu “Atölye Kiti” sayesinde, kendi otomasyon süreçlerinizi başlatmak için sağlam bir temel oluşturacaksınız.

Ansible ve DigitalOcean: Güçlü Bir İkili

Sunucu otomasyonu dünyasında Ansible ve bulut platformları arasındaki entegrasyon, altyapı yönetimini kökten değiştiren bir yaklaşımdır. İki teknolojinin temel özelliklerini ve neden birlikte bu kadar etkili olduklarını keşfedelim.

Ansible Nedir?

Ansible, IT otomasyonu için açık kaynaklı bir araçtır. Yapılandırma yönetimi, uygulama dağıtımı, görev otomasyonu gibi birçok alanda kullanılır. En büyük avantajlarından biri “agentless” (ajanssız) yapısıdır; yani yönetilecek sunuculara herhangi bir özel yazılım kurmanıza gerek kalmaz. Sadece SSH protokolü üzerinden iletişim kurarak görevleri yerine getirir. Ansible, YAML tabanlı basit ve okunabilir playbook‘lar (oyun kitapları) kullanarak otomasyon adımlarını tanımlar. Bu sayede karmaşık görevler bile anlaşılır bir şekilde ifade edilebilir. Ayrıca, “idempotent” (eş etkili) bir yapıya sahiptir, yani bir playbook’u birden fazla kez çalıştırmak, sistemin istenen duruma gelmesini garanti eder ve zaten istenen durumda olan sistemlerde gereksiz değişiklikler yapmaz.

DigitalOcean Nedir?

DigitalOcean, geliştiricilere yönelik basit, ölçeklenebilir ve uygun maliyetli bulut altyapısı sunan bir bulut sağlayıcısıdır. “Droplet” adı verilen sanal makineler, depolama, veritabanları ve ağ hizmetleri gibi birçok ürün sunar. DigitalOcean’ın kullanıcı dostu arayüzü ve güçlü API’si, altyapı kaynaklarını kolayca oluşturma, yönetme ve otomatikleştirmeyi mümkün kılar. Özellikle küçük ve orta ölçekli projeler, geliştiriciler ve startup’lar arasında popülerdir.

Neden Birlikte Kullanmalıyız?

Ansible ve DigitalOcean’ın birleşimi, altyapı otomasyonu için ideal bir çözüm sunar. DigitalOcean, ihtiyacınız olan sanal sunucuları (Droplet’leri) hızla oluşturma yeteneği sağlarken, Ansible bu Droplet’lerin işletim sisteminden uygulama katmanına kadar her şeyini tutarlı bir şekilde yapılandırmanıza olanak tanır. Bu kombinasyon sayesinde:

  • Sunucu kurulum sürelerini dakikalara indirgeyebilirsiniz.
  • Tüm sunucularınızda tutarlı bir yapılandırma sağlayabilirsiniz.
  • Manuel hataları ortadan kaldırabilirsiniz.
  • Altyapınızı “kod olarak” (Infrastructure as Code – IaC) yönetebilirsiniz.
  • Gerektiğinde hızla ölçeklenebilir ve yeni sunucuları devreye alabilirsiniz.

Gerekli Ön Hazırlıklar

Otomasyon sürecine başlamadan önce, yerel geliştirme ortamınızı ve DigitalOcean hesabınızı hazırlamanız gerekmektedir. Bu adımlar, sorunsuz bir başlangıç yapmanızı sağlayacaktır.

DigitalOcean Hesabı ve API Token

  1. DigitalOcean Hesabı Oluşturma: Henüz bir hesabınız yoksa, DigitalOcean web sitesi üzerinden kolayca bir hesap oluşturun.
  2. API Token Oluşturma: Ansible’ın DigitalOcean hesabınızla etkileşime geçebilmesi için bir API token’ına ihtiyacımız var.
    • DigitalOcean kontrol panelinize giriş yapın.
    • Sol menüden “API” seçeneğine gidin.
    • “Generate New Token” (Yeni Token Oluştur) düğmesine tıklayın.
    • Token’a açıklayıcı bir isim verin (örn: “ansible-automation”).
    • “Write” (Yazma) yetkisini seçtiğinizden emin olun, aksi takdirde Ansible Droplet oluşturamayacaktır.
    • Oluşturulan token’ı kopyalayın ve güvenli bir yere kaydedin. Bu token’ı daha sonra Ansible ile kullanacağız. Token’ı kaybettikten sonra tekrar göremezsiniz, bu yüzden dikkatli olun.

Yerel Ortamda Ansible Kurulumu

Ansible, Python ile yazıldığı için sisteminizde Python ve pip kurulu olması gerekmektedir. Çoğu Linux dağıtımında ve macOS’ta varsayılan olarak bulunur.

  1. Ansible Kurulumu:
    pip install ansible

    Eğer pip komutunu bulamazsanız, python3 -m pip install ansible deneyebilirsiniz. Sanal ortam kullanmanız şiddetle tavsiye edilir.

  2. DigitalOcean Ansible Koleksiyonu Kurulumu: Ansible’ın DigitalOcean kaynaklarını yönetebilmesi için özel bir koleksiyona ihtiyacımız var.
    ansible-galaxy collection install community.digitalocean

SSH Anahtar Çifti

Ansible, yönetilen sunuculara SSH üzerinden bağlanır. Bu nedenle, yerel makinenizde bir SSH anahtar çifti bulunması ve bu anahtarın DigitalOcean’a eklenmesi gerekmektedir.

  1. SSH Anahtar Çifti Oluşturma (Gerekliyse): Zaten bir anahtar çiftiniz yoksa, aşağıdaki komutla oluşturabilirsiniz:
    ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

    Varsayılan konumu (~/.ssh/id_rsa) kabul edebilir ve bir parola belirleyebilirsiniz (isteğe bağlı).

  2. SSH Genel Anahtarınızı DigitalOcean’a Ekleme:
    • Genel anahtarınızın içeriğini kopyalayın:
      cat ~/.ssh/id_rsa.pub
    • DigitalOcean kontrol panelinize giriş yapın.
    • Sol menüden “Settings” (Ayarlar) -> “Security” (Güvenlik) bölümüne gidin.
    • “SSH keys” (SSH anahtarları) sekmesinde “Add SSH Key” (SSH Anahtarı Ekle) düğmesine tıklayın.
    • Anahtarınıza bir isim verin ve kopyaladığınız genel anahtar içeriğini yapıştırın.
    • “Add SSH Key” düğmesine tıklayarak kaydedin.

Artık Ansible ve DigitalOcean arasında köprü kurmaya hazırız!

DigitalOcean Droplet Oluşturma ve Yönetme

Bu bölümde, Ansible kullanarak DigitalOcean Droplet’lerini nasıl oluşturacağınızı, yapılandıracağınızı ve hatta dinamik envanterlerle nasıl yöneteceğinizi öğreneceksiniz.

Ansible ile Droplet Oluşturma Playbook’u

İlk adımımız, DigitalOcean üzerinde yeni bir Droplet oluşturan bir Ansible playbook’u yazmak olacak. Droplet’i oluştururken, bölge, boyut, işletim sistemi imajı ve eklediğimiz SSH anahtarını belirteceğiz.

Öncelikle, Ansible’ın DigitalOcean API token’ınızı kullanabilmesi için bir ortam değişkeni olarak ayarlamanız en güvenli yoldur:

export DO_API_TOKEN="sizin_digitalocean_api_tokeniniz"

Şimdi create_droplet.yml adında bir dosya oluşturalım:

---
- name: DigitalOcean Droplet Oluştur
  hosts: localhost
  connection: local
  gather_facts: no
  vars:
    droplet_name: "ansible-workshop-droplet"
    region: "fra1" # Frankfurt 1
    size: "s-1vcpu-1gb" # En küçük boyut
    image: "ubuntu-22-04-x64" # Ubuntu 22.04 LTS
    ssh_key_name: "ansible-ssh-key" # DigitalOcean'a eklediğiniz SSH anahtarının adı
  tasks:
    - name: Yeni Droplet oluştur
      community.digitalocean.digital_ocean_droplet:
        name: "{{ droplet_name }}"
        state: present
        region: "{{ region }}"
        size: "{{ size }}"
        image: "{{ image }}"
        ssh_keys:
          - "{{ ssh_key_name }}"
        wait: yes
        unique_name: yes
      register: new_droplet

    - name: Oluşturulan Droplet'in IP adresini göster
      debug:
        msg: "Droplet IP: {{ new_droplet.droplet.ipv4[0].ip_address }}"

    - name: Oluşturulan Droplet'i Ansible envanterine ekle (geçici)
      ansible.builtin.add_host:
        name: "{{ new_droplet.droplet.ipv4[0].ip_address }}"
        groups:
          - workshop_servers
        ansible_user: root # Ubuntu için varsayılan kullanıcı
        ansible_ssh_private_key_file: "~/.ssh/id_rsa" # Yerel SSH anahtarınızın yolu
      when: new_droplet.changed

    - name: Ansible'ın Droplet'e bağlanabilmesi için bekle
      ansible.builtin.wait_for_connection:
        delay: 60
        timeout: 300
      delegate_to: "{{ new_droplet.droplet.ipv4[0].ip_address }}"
      when: new_droplet.changed

Bu playbook’u çalıştırmak için:

ansible-playbook create_droplet.yml

Playbook başarıyla tamamlandığında, DigitalOcean kontrol panelinizde yeni bir Droplet’in oluşturulduğunu ve IP adresini göreceksiniz. add_host modülü sayesinde, bu Droplet’i geçici olarak çalışan Ansible envanterine eklemiş oluyoruz, böylece hemen sonraki adımlarda onu hedefleyebiliriz.

Dinç Envanter (Dynamic Inventory)

Bulut ortamlarında sunucular sürekli olarak değişebilir (oluşturulabilir, silinebilir, IP adresleri değişebilir). Bu dinamik yapıyı yönetmek için statik envanter dosyaları (hosts) pratik değildir. Ansible’ın “dinç envanter” özelliği, bir bulut sağlayıcısının API’sini sorgulayarak mevcut sunucuların listesini otomatik olarak almayı sağlar.

DigitalOcean için community.digitalocean.digital_ocean envanter eklentisini kullanacağız. digitalocean.yml adında bir dosya oluşturalım:

---
plugin: community.digitalocean.digital_ocean
api_token: "{{ lookup('env', 'DO_API_TOKEN') }}" # Ortam değişkeninden token'ı al
keyed_groups:
  - key: tags
    prefix: tag
  - key: region
    prefix: region
  - key: image.distribution
    separator: "_"
    prefix: os

Bu dosya, Ansible’a DigitalOcean API’sini nasıl sorgulayacağını söyler ve Droplet’leri etiketlerine, bölgelerine ve işletim sistemi dağıtımlarına göre gruplandırır. Artık envanterinizi aşağıdaki gibi listeleyebilirsiniz:

ansible-inventory -i digitalocean.yml --list

Bu komut, DigitalOcean hesabınızdaki tüm Droplet’leri ve onların ilgili değişkenlerini (IP adresleri, etiketler vb.) JSON formatında gösterecektir. Artık playbook’larınızda dinamik grupları hedefleyebilirsiniz (örn: hosts: tag_ansible-workshop).

Sunucu Yapılandırma ve Uygulama Dağıtımı

Droplet’imizi oluşturduk ve Ansible envanterimize dahil ettik. Şimdi sıra, bu sunucuyu istediğimiz gibi yapılandırmaya ve bir uygulama dağıtmaya geldi. Basit bir Nginx web sunucusu kurulumunu ele alalım.

Örnek Playbook: Web Sunucusu Kurulumu (Nginx)

Bu playbook, yeni oluşturduğumuz veya mevcut bir Droplet üzerine Nginx web sunucusunu kuracak, varsayılan bir HTML sayfası yerleştirecek ve Nginx hizmetini başlatacaktır. nginx_setup.yml adında bir dosya oluşturalım:

---
- name: Web Sunucusu Kurulumu ve Uygulama Dağıtımı
  hosts: workshop_servers # create_droplet.yml playbook'unda tanımladığımız grup
  become: yes # Görevleri root yetkileriyle çalıştırmak için
  gather_facts: yes # Sunucu hakkında bilgi toplamak için

  vars:
    nginx_port: 80

  tasks:
    - name: Apt paket önbelleğini güncelle
      ansible.builtin.apt:
        update_cache: yes

    - name: Nginx paketini kur
      ansible.builtin.apt:
        name: nginx
        state: present

    - name: Varsayılan Nginx yapılandırma dosyasını kopyala
      ansible.builtin.copy:
        src: files/nginx.conf
        dest: /etc/nginx/sites-available/default
        owner: root
        group: root
        mode: '0644'
      notify: Nginx'i yeniden başlat

    - name: Özel bir index.html sayfası oluştur
      ansible.builtin.copy:
        content: |
          
          
          
              
              
              Ansible ile Otomasyon
              
          
          
              

Merhaba DigitalOcean!

Bu sayfa Ansible tarafından otomatik olarak dağıtıldı.

Droplet IP: {{ ansible_host }}

İşletim Sistemi: {{ ansible_distribution }} {{ ansible_distribution_version }}

dest: /var/www/html/index.html owner: www-data group: www-data mode: '0644' - name: Nginx hizmetinin çalıştığından ve başlatıldığından emin ol ansible.builtin.service: name: nginx state: started enabled: yes handlers: - name: Nginx'i yeniden başlat ansible.builtin.service: name: nginx state: restarted

Bu playbook’u çalıştırmadan önce, files adında bir dizin oluşturun ve içine nginx.conf adında aşağıdaki içeriğe sahip bir dosya koyun. Bu basit bir Nginx varsayılan sunucu bloğu olacaktır:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;
    index index.html index.htm index.nginx-debian.html;

    server_name _;

    location / {
        try_files $uri $uri/ =404;
    }
}

Şimdi playbook’u çalıştıralım:

ansible-playbook -i create_droplet.yml --limit workshop_servers nginx_setup.yml

Burada create_droplet.yml dosyasını envanter olarak kullanıyoruz çünkü add_host modülü ile Droplet’i geçici olarak workshop_servers grubuna eklemiştik. Eğer dinamik envanter dosyası (digitalocean.yml) kullanıyorsanız, komut şöyle olacaktır:

ansible-playbook -i digitalocean.yml nginx_setup.yml --limit tag_ansible-workshop

Playbook tamamlandığında, Droplet’inizin IP adresini bir web tarayıcısında ziyaret ederek Nginx’in başarıyla kurulduğunu ve özel HTML sayfanızın göründüğünü doğrulayabilirsiniz.

Roller Kullanımı

Daha karmaşık ve yeniden kullanılabilir otomasyonlar için Ansible “roller” kullanmak en iyi uygulamadır. Roller, görevleri, değişkenleri, şablonları ve dosya yapılarını mantıksal birimler halinde düzenlemenizi sağlar. Örneğin, Nginx kurulumunu bir role dönüştürebilirsiniz:

ansible-galaxy init webserver

Bu komut, webserver adında bir dizin yapısı oluşturacaktır. Daha sonra tasks/main.yml, templates/ ve files/ gibi alt dizinlere ilgili görevleri, şablonları ve dosyaları yerleştirebilirsiniz. Ana playbook’unuzda bu rolü çağırarak daha düzenli bir yapıya kavuşursunuz.

Sonuç ve Sıkça Sorulan Sorular (SSS)

Bu rehberde, DigitalOcean üzerinde sunucu kurulumunu ve yapılandırmasını Ansible ile nasıl otomatikleştireceğinizi adım adım öğrendiniz. Artık manuel süreçlerin getirdiği zaman kaybı ve hatalarla uğraşmak yerine, birkaç komutla tamamen yapılandırılmış sunuculara sahip olabilirsiniz. Ansible ve DigitalOcean’ın birleşimi, altyapı yönetimini basitleştirir, tutarlılığı artırır ve ekiplerin daha verimli çalışmasını sağlar.

Bu atölye kiti, otomasyon yolculuğunuzda yalnızca bir başlangıç noktasıdır. Ansible’ın zengin modül kütüphanesi ve DigitalOcean’ın esnek API’si sayesinde, daha karmaşık dağıtımlar, veritabanı kurulumları, güvenlik duvarı yapılandırmaları ve daha fazlasını otomatikleştirebilirsiniz. Altyapınızı kod olarak yönetme (IaC) pratiğini benimseyerek, dijital varlıklarınızı daha güvenli, ölçeklenebilir ve yönetilebilir hale getirebilirsiniz.

Sıkça Sorulan Sorular (SSS)

Ansible agent’a ihtiyaç duyar mı?
Hayır, Ansible “agentless” bir otomasyon aracıdır. Yönetilen sunucularla SSH üzerinden iletişim kurar ve Python yorumlayıcısının sunucuda kurulu olması yeterlidir (çoğu Linux dağıtımında varsayılan olarak bulunur).

DigitalOcean API token’ımı nasıl güvende tutarım?
API token’ları hassas bilgilerdir. Playbook’larınızda doğrudan yazmak yerine, ortam değişkenleri (export DO_API_TOKEN="..." gibi) veya Ansible Vault kullanarak şifreleyerek saklamalısınız. Ansible Vault, hassas verileri şifrelemenizi ve sadece gerektiğinde çözmenizi sağlar.

Birden fazla sunucuyu aynı anda yapılandırabilir miyim?
Evet, bu Ansible’ın en güçlü özelliklerinden biridir. Playbook’unuzu çalıştırdığınızda, Ansible envanterinizdeki tüm hedef sunucularda görevleri paralel olarak çalıştırır. Bu, yüzlerce sunucuyu bile aynı anda ve tutarlı bir şekilde yapılandırabileceğiniz anlamına gelir.

Mevcut DigitalOcean Droplet’lerini Ansible ile yönetebilir miyim?
Kesinlikle. Dinamik envanter eklentisi (community.digitalocean.digital_ocean) sayesinde, DigitalOcean hesabınızdaki tüm Droplet’leri otomatik olarak keşfedebilir ve onları Ansible playbook’larınızla hedefleyerek yönetebilirsiniz. Yeni oluşturulmuş veya uzun süredir var olan Droplet’ler arasında bir fark yoktur.

Ansible Vault nedir ve neden kullanmalıyım?
Ansible Vault, parolalar, API anahtarları, SSH özel anahtarları gibi hassas verileri şifrelemek için kullanılan bir özelliktir. Bu verileri şifreli olarak depolamanıza ve sadece bir parola ile çözerek kullanmanıza olanak tanır. Kodunuzu versiyon kontrol sistemlerinde (Git gibi) saklarken güvenliği sağlamak için kritik öneme sahiptir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık