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
- DigitalOcean Hesabı Oluşturma: Henüz bir hesabınız yoksa, DigitalOcean web sitesi üzerinden kolayca bir hesap oluşturun.
- 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.
- Ansible Kurulumu:
pip install ansibleEğer
pipkomutunu bulamazsanız,python3 -m pip install ansibledeneyebilirsiniz. Sanal ortam kullanmanız şiddetle tavsiye edilir. - 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.
- 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ı). - 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.
- Genel anahtarınızın içeriğini kopyalayın:
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.