{"id":38076,"date":"2026-01-22T21:41:47","date_gmt":"2026-01-22T18:41:47","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=38076"},"modified":"2026-01-22T21:41:47","modified_gmt":"2026-01-22T18:41:47","slug":"ansible-ve-digitalocean-guclu-bir-ikili","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/","title":{"rendered":"Ansible ve DigitalOcean: G\u00fc\u00e7l\u00fc Bir \u0130kili"},"content":{"rendered":"<p><body><\/p>\n<p>G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, sunucu kurulumu ve y\u00f6netimi s\u00fcre\u00e7lerini otomatikle\u015ftirmek, hem zaman tasarrufu hem de tutarl\u0131l\u0131k a\u00e7\u0131s\u0131ndan kritik bir \u00f6neme sahiptir. Manuel kurulumlar hataya a\u00e7\u0131k, yava\u015f ve tekrarlayan g\u00f6revler i\u00e7erirken, otomasyon bu sorunlar\u0131 ortadan kald\u0131r\u0131r. Bu rehberde, pop\u00fcler bulut sa\u011flay\u0131c\u0131s\u0131 DigitalOcean \u00fczerinde sunucu kurulumunu ve ilk yap\u0131land\u0131rmas\u0131n\u0131 Ansible kullanarak nas\u0131l otomatikle\u015ftirece\u011finizi ad\u0131m ad\u0131m inceleyece\u011fiz. Bu &#8220;At\u00f6lye Kiti&#8221; sayesinde, kendi otomasyon s\u00fcre\u00e7lerinizi ba\u015flatmak i\u00e7in sa\u011flam bir temel olu\u015fturacaks\u0131n\u0131z.<\/p>\n<h2>Ansible ve DigitalOcean: G\u00fc\u00e7l\u00fc Bir \u0130kili<\/h2>\n<p>Sunucu otomasyonu d\u00fcnyas\u0131nda Ansible ve bulut platformlar\u0131 aras\u0131ndaki entegrasyon, altyap\u0131 y\u00f6netimini k\u00f6kten de\u011fi\u015ftiren bir yakla\u015f\u0131md\u0131r. \u0130ki teknolojinin temel \u00f6zelliklerini ve neden birlikte bu kadar etkili olduklar\u0131n\u0131 ke\u015ffedelim.<\/p>\n<h3>Ansible Nedir?<\/h3>\n<p>Ansible, IT otomasyonu i\u00e7in a\u00e7\u0131k kaynakl\u0131 bir ara\u00e7t\u0131r. Yap\u0131land\u0131rma y\u00f6netimi, uygulama da\u011f\u0131t\u0131m\u0131, g\u00f6rev otomasyonu gibi bir\u00e7ok alanda kullan\u0131l\u0131r. En b\u00fcy\u00fck avantajlar\u0131ndan biri &#8220;agentless&#8221; (ajanss\u0131z) yap\u0131s\u0131d\u0131r; yani y\u00f6netilecek sunuculara herhangi bir \u00f6zel yaz\u0131l\u0131m kurman\u0131za gerek kalmaz. Sadece SSH protokol\u00fc \u00fczerinden ileti\u015fim kurarak g\u00f6revleri yerine getirir. Ansible, YAML tabanl\u0131 basit ve okunabilir <i>playbook<\/i>&#8216;lar (oyun kitaplar\u0131) kullanarak otomasyon ad\u0131mlar\u0131n\u0131 tan\u0131mlar. Bu sayede karma\u015f\u0131k g\u00f6revler bile anla\u015f\u0131l\u0131r bir \u015fekilde ifade edilebilir. Ayr\u0131ca, &#8220;idempotent&#8221; (e\u015f etkili) bir yap\u0131ya sahiptir, yani bir playbook&#8217;u birden fazla kez \u00e7al\u0131\u015ft\u0131rmak, sistemin istenen duruma gelmesini garanti eder ve zaten istenen durumda olan sistemlerde gereksiz de\u011fi\u015fiklikler yapmaz.<\/p>\n<h3>DigitalOcean Nedir?<\/h3>\n<p>DigitalOcean, geli\u015ftiricilere y\u00f6nelik basit, \u00f6l\u00e7eklenebilir ve uygun maliyetli bulut altyap\u0131s\u0131 sunan bir bulut sa\u011flay\u0131c\u0131s\u0131d\u0131r. &#8220;Droplet&#8221; ad\u0131 verilen sanal makineler, depolama, veritabanlar\u0131 ve a\u011f hizmetleri gibi bir\u00e7ok \u00fcr\u00fcn sunar. DigitalOcean&#8217;\u0131n kullan\u0131c\u0131 dostu aray\u00fcz\u00fc ve g\u00fc\u00e7l\u00fc API&#8217;si, altyap\u0131 kaynaklar\u0131n\u0131 kolayca olu\u015fturma, y\u00f6netme ve otomatikle\u015ftirmeyi m\u00fcmk\u00fcn k\u0131lar. \u00d6zellikle k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli projeler, geli\u015ftiriciler ve startup&#8217;lar aras\u0131nda pop\u00fclerdir.<\/p>\n<h3>Neden Birlikte Kullanmal\u0131y\u0131z?<\/h3>\n<p>Ansible ve DigitalOcean&#8217;\u0131n birle\u015fimi, altyap\u0131 otomasyonu i\u00e7in ideal bir \u00e7\u00f6z\u00fcm sunar. DigitalOcean, ihtiyac\u0131n\u0131z olan sanal sunucular\u0131 (Droplet&#8217;leri) h\u0131zla olu\u015fturma yetene\u011fi sa\u011flarken, Ansible bu Droplet&#8217;lerin i\u015fletim sisteminden uygulama katman\u0131na kadar her \u015feyini tutarl\u0131 bir \u015fekilde yap\u0131land\u0131rman\u0131za olanak tan\u0131r. Bu kombinasyon sayesinde:<\/p>\n<ul>\n<li>Sunucu kurulum s\u00fcrelerini dakikalara indirgeyebilirsiniz.<\/li>\n<li>T\u00fcm sunucular\u0131n\u0131zda tutarl\u0131 bir yap\u0131land\u0131rma sa\u011flayabilirsiniz.<\/li>\n<li>Manuel hatalar\u0131 ortadan kald\u0131rabilirsiniz.<\/li>\n<li>Altyap\u0131n\u0131z\u0131 &#8220;kod olarak&#8221; (Infrastructure as Code &#8211; IaC) y\u00f6netebilirsiniz.<\/li>\n<li>Gerekti\u011finde h\u0131zla \u00f6l\u00e7eklenebilir ve yeni sunucular\u0131 devreye alabilirsiniz.<\/li>\n<\/ul>\n<h2>Gerekli \u00d6n Haz\u0131rl\u0131klar<\/h2>\n<p>Otomasyon s\u00fcrecine ba\u015flamadan \u00f6nce, yerel geli\u015ftirme ortam\u0131n\u0131z\u0131 ve DigitalOcean hesab\u0131n\u0131z\u0131 haz\u0131rlaman\u0131z gerekmektedir. Bu ad\u0131mlar, sorunsuz bir ba\u015flang\u0131\u00e7 yapman\u0131z\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h3>DigitalOcean Hesab\u0131 ve API Token<\/h3>\n<ol>\n<li><strong>DigitalOcean Hesab\u0131 Olu\u015fturma:<\/strong> Hen\u00fcz bir hesab\u0131n\u0131z yoksa, <a href=\"https:\/\/www.digitalocean.com\/\" target=\"_blank\">DigitalOcean web sitesi<\/a> \u00fczerinden kolayca bir hesap olu\u015fturun.<\/li>\n<li><strong>API Token Olu\u015fturma:<\/strong> Ansible&#8217;\u0131n DigitalOcean hesab\u0131n\u0131zla etkile\u015fime ge\u00e7ebilmesi i\u00e7in bir API token&#8217;\u0131na ihtiyac\u0131m\u0131z var.\n<ul>\n<li>DigitalOcean kontrol panelinize giri\u015f yap\u0131n.<\/li>\n<li>Sol men\u00fcden &#8220;API&#8221; se\u00e7ene\u011fine gidin.<\/li>\n<li>&#8220;Generate New Token&#8221; (Yeni Token Olu\u015ftur) d\u00fc\u011fmesine t\u0131klay\u0131n.<\/li>\n<li>Token&#8217;a a\u00e7\u0131klay\u0131c\u0131 bir isim verin (\u00f6rn: &#8220;ansible-automation&#8221;).<\/li>\n<li>&#8220;Write&#8221; (Yazma) yetkisini se\u00e7ti\u011finizden emin olun, aksi takdirde Ansible Droplet olu\u015fturamayacakt\u0131r.<\/li>\n<li>Olu\u015fturulan token&#8217;\u0131 kopyalay\u0131n ve g\u00fcvenli bir yere kaydedin. Bu token&#8217;\u0131 daha sonra Ansible ile kullanaca\u011f\u0131z. Token&#8217;\u0131 kaybettikten sonra tekrar g\u00f6remezsiniz, bu y\u00fczden dikkatli olun.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<h3>Yerel Ortamda Ansible Kurulumu<\/h3>\n<p>Ansible, Python ile yaz\u0131ld\u0131\u011f\u0131 i\u00e7in sisteminizde Python ve pip kurulu olmas\u0131 gerekmektedir. \u00c7o\u011fu Linux da\u011f\u0131t\u0131m\u0131nda ve macOS&#8217;ta varsay\u0131lan olarak bulunur.<\/p>\n<ol>\n<li><strong>Ansible Kurulumu:<\/strong>\n<pre><code>pip install ansible<\/code><\/pre>\n<p>E\u011fer <code>pip<\/code> komutunu bulamazsan\u0131z, <code>python3 -m pip install ansible<\/code> deneyebilirsiniz. Sanal ortam kullanman\u0131z \u015fiddetle tavsiye edilir.<\/p>\n<\/li>\n<li><strong>DigitalOcean Ansible Koleksiyonu Kurulumu:<\/strong> Ansible&#8217;\u0131n DigitalOcean kaynaklar\u0131n\u0131 y\u00f6netebilmesi i\u00e7in \u00f6zel bir koleksiyona ihtiyac\u0131m\u0131z var.\n<pre><code>ansible-galaxy collection install community.digitalocean<\/code><\/pre>\n<\/li>\n<\/ol>\n<h3>SSH Anahtar \u00c7ifti<\/h3>\n<p>Ansible, y\u00f6netilen sunuculara SSH \u00fczerinden ba\u011flan\u0131r. Bu nedenle, yerel makinenizde bir SSH anahtar \u00e7ifti bulunmas\u0131 ve bu anahtar\u0131n DigitalOcean&#8217;a eklenmesi gerekmektedir.<\/p>\n<ol>\n<li><strong>SSH Anahtar \u00c7ifti Olu\u015fturma (Gerekliyse):<\/strong> Zaten bir anahtar \u00e7iftiniz yoksa, a\u015fa\u011f\u0131daki komutla olu\u015fturabilirsiniz:\n<pre><code>ssh-keygen -t rsa -b 4096 -C \"your_email@example.com\"<\/code><\/pre>\n<p>Varsay\u0131lan konumu (<code>~\/.ssh\/id_rsa<\/code>) kabul edebilir ve bir parola belirleyebilirsiniz (iste\u011fe ba\u011fl\u0131).<\/p>\n<\/li>\n<li><strong>SSH Genel Anahtar\u0131n\u0131z\u0131 DigitalOcean&#8217;a Ekleme:<\/strong>\n<ul>\n<li>Genel anahtar\u0131n\u0131z\u0131n i\u00e7eri\u011fini kopyalay\u0131n:\n<pre><code>cat ~\/.ssh\/id_rsa.pub<\/code><\/pre>\n<\/li>\n<li>DigitalOcean kontrol panelinize giri\u015f yap\u0131n.<\/li>\n<li>Sol men\u00fcden &#8220;Settings&#8221; (Ayarlar) -> &#8220;Security&#8221; (G\u00fcvenlik) b\u00f6l\u00fcm\u00fcne gidin.<\/li>\n<li>&#8220;SSH keys&#8221; (SSH anahtarlar\u0131) sekmesinde &#8220;Add SSH Key&#8221; (SSH Anahtar\u0131 Ekle) d\u00fc\u011fmesine t\u0131klay\u0131n.<\/li>\n<li>Anahtar\u0131n\u0131za bir isim verin ve kopyalad\u0131\u011f\u0131n\u0131z genel anahtar i\u00e7eri\u011fini yap\u0131\u015ft\u0131r\u0131n.<\/li>\n<li>&#8220;Add SSH Key&#8221; d\u00fc\u011fmesine t\u0131klayarak kaydedin.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p>Art\u0131k Ansible ve DigitalOcean aras\u0131nda k\u00f6pr\u00fc kurmaya haz\u0131r\u0131z!<\/p>\n<h2>DigitalOcean Droplet Olu\u015fturma ve Y\u00f6netme<\/h2>\n<p>Bu b\u00f6l\u00fcmde, Ansible kullanarak DigitalOcean Droplet&#8217;lerini nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131, yap\u0131land\u0131raca\u011f\u0131n\u0131z\u0131 ve hatta dinamik envanterlerle nas\u0131l y\u00f6netece\u011finizi \u00f6\u011freneceksiniz.<\/p>\n<h3>Ansible ile Droplet Olu\u015fturma Playbook&#8217;u<\/h3>\n<p>\u0130lk ad\u0131m\u0131m\u0131z, DigitalOcean \u00fczerinde yeni bir Droplet olu\u015fturan bir Ansible playbook&#8217;u yazmak olacak. Droplet&#8217;i olu\u015ftururken, b\u00f6lge, boyut, i\u015fletim sistemi imaj\u0131 ve ekledi\u011fimiz SSH anahtar\u0131n\u0131 belirtece\u011fiz.<\/p>\n<p>\u00d6ncelikle, Ansible&#8217;\u0131n DigitalOcean API token&#8217;\u0131n\u0131z\u0131 kullanabilmesi i\u00e7in bir ortam de\u011fi\u015fkeni olarak ayarlaman\u0131z en g\u00fcvenli yoldur:<\/p>\n<pre><code>export DO_API_TOKEN=\"sizin_digitalocean_api_tokeniniz\"<\/code><\/pre>\n<p>\u015eimdi <code>create_droplet.yml<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-yaml\">---\n- name: DigitalOcean Droplet Olu\u015ftur\n  hosts: localhost\n  connection: local\n  gather_facts: no\n  vars:\n    droplet_name: \"ansible-workshop-droplet\"\n    region: \"fra1\" # Frankfurt 1\n    size: \"s-1vcpu-1gb\" # En k\u00fc\u00e7\u00fck boyut\n    image: \"ubuntu-22-04-x64\" # Ubuntu 22.04 LTS\n    ssh_key_name: \"ansible-ssh-key\" # DigitalOcean'a ekledi\u011finiz SSH anahtar\u0131n\u0131n ad\u0131\n  tasks:\n    - name: Yeni Droplet olu\u015ftur\n      community.digitalocean.digital_ocean_droplet:\n        name: \"{{ droplet_name }}\"\n        state: present\n        region: \"{{ region }}\"\n        size: \"{{ size }}\"\n        image: \"{{ image }}\"\n        ssh_keys:\n          - \"{{ ssh_key_name }}\"\n        wait: yes\n        unique_name: yes\n      register: new_droplet\n\n    - name: Olu\u015fturulan Droplet'in IP adresini g\u00f6ster\n      debug:\n        msg: \"Droplet IP: {{ new_droplet.droplet.ipv4[0].ip_address }}\"\n\n    - name: Olu\u015fturulan Droplet'i Ansible envanterine ekle (ge\u00e7ici)\n      ansible.builtin.add_host:\n        name: \"{{ new_droplet.droplet.ipv4[0].ip_address }}\"\n        groups:\n          - workshop_servers\n        ansible_user: root # Ubuntu i\u00e7in varsay\u0131lan kullan\u0131c\u0131\n        ansible_ssh_private_key_file: \"~\/.ssh\/id_rsa\" # Yerel SSH anahtar\u0131n\u0131z\u0131n yolu\n      when: new_droplet.changed\n\n    - name: Ansible'\u0131n Droplet'e ba\u011flanabilmesi i\u00e7in bekle\n      ansible.builtin.wait_for_connection:\n        delay: 60\n        timeout: 300\n      delegate_to: \"{{ new_droplet.droplet.ipv4[0].ip_address }}\"\n      when: new_droplet.changed\n<\/code><\/pre>\n<p>Bu playbook&#8217;u \u00e7al\u0131\u015ft\u0131rmak i\u00e7in:<\/p>\n<pre><code>ansible-playbook create_droplet.yml<\/code><\/pre>\n<p>Playbook ba\u015far\u0131yla tamamland\u0131\u011f\u0131nda, DigitalOcean kontrol panelinizde yeni bir Droplet&#8217;in olu\u015fturuldu\u011funu ve IP adresini g\u00f6receksiniz. <code>add_host<\/code> mod\u00fcl\u00fc sayesinde, bu Droplet&#8217;i ge\u00e7ici olarak \u00e7al\u0131\u015fan Ansible envanterine eklemi\u015f oluyoruz, b\u00f6ylece hemen sonraki ad\u0131mlarda onu hedefleyebiliriz.<\/p>\n<h3>Din\u00e7 Envanter (Dynamic Inventory)<\/h3>\n<p>Bulut ortamlar\u0131nda sunucular s\u00fcrekli olarak de\u011fi\u015febilir (olu\u015fturulabilir, silinebilir, IP adresleri de\u011fi\u015febilir). Bu dinamik yap\u0131y\u0131 y\u00f6netmek i\u00e7in statik envanter dosyalar\u0131 (<code>hosts<\/code>) pratik de\u011fildir. Ansible&#8217;\u0131n &#8220;din\u00e7 envanter&#8221; \u00f6zelli\u011fi, bir bulut sa\u011flay\u0131c\u0131s\u0131n\u0131n API&#8217;sini sorgulayarak mevcut sunucular\u0131n listesini otomatik olarak almay\u0131 sa\u011flar.<\/p>\n<p>DigitalOcean i\u00e7in <code>community.digitalocean.digital_ocean<\/code> envanter eklentisini kullanaca\u011f\u0131z. <code>digitalocean.yml<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-yaml\">---\nplugin: community.digitalocean.digital_ocean\napi_token: \"{{ lookup('env', 'DO_API_TOKEN') }}\" # Ortam de\u011fi\u015fkeninden token'\u0131 al\nkeyed_groups:\n  - key: tags\n    prefix: tag\n  - key: region\n    prefix: region\n  - key: image.distribution\n    separator: \"_\"\n    prefix: os\n<\/code><\/pre>\n<p>Bu dosya, Ansible&#8217;a DigitalOcean API&#8217;sini nas\u0131l sorgulayaca\u011f\u0131n\u0131 s\u00f6yler ve Droplet&#8217;leri etiketlerine, b\u00f6lgelerine ve i\u015fletim sistemi da\u011f\u0131t\u0131mlar\u0131na g\u00f6re grupland\u0131r\u0131r. Art\u0131k envanterinizi a\u015fa\u011f\u0131daki gibi listeleyebilirsiniz:<\/p>\n<pre><code>ansible-inventory -i digitalocean.yml --list<\/code><\/pre>\n<p>Bu komut, DigitalOcean hesab\u0131n\u0131zdaki t\u00fcm Droplet&#8217;leri ve onlar\u0131n ilgili de\u011fi\u015fkenlerini (IP adresleri, etiketler vb.) JSON format\u0131nda g\u00f6sterecektir. Art\u0131k playbook&#8217;lar\u0131n\u0131zda dinamik gruplar\u0131 hedefleyebilirsiniz (\u00f6rn: <code>hosts: tag_ansible-workshop<\/code>).<\/p>\n<h2>Sunucu Yap\u0131land\u0131rma ve Uygulama Da\u011f\u0131t\u0131m\u0131<\/h2>\n<p>Droplet&#8217;imizi olu\u015fturduk ve Ansible envanterimize dahil ettik. \u015eimdi s\u0131ra, bu sunucuyu istedi\u011fimiz gibi yap\u0131land\u0131rmaya ve bir uygulama da\u011f\u0131tmaya geldi. Basit bir Nginx web sunucusu kurulumunu ele alal\u0131m.<\/p>\n<h3>\u00d6rnek Playbook: Web Sunucusu Kurulumu (Nginx)<\/h3>\n<p>Bu playbook, yeni olu\u015fturdu\u011fumuz veya mevcut bir Droplet \u00fczerine Nginx web sunucusunu kuracak, varsay\u0131lan bir HTML sayfas\u0131 yerle\u015ftirecek ve Nginx hizmetini ba\u015flatacakt\u0131r. <code>nginx_setup.yml<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-yaml\">---\n- name: Web Sunucusu Kurulumu ve Uygulama Da\u011f\u0131t\u0131m\u0131\n  hosts: workshop_servers # create_droplet.yml playbook'unda tan\u0131mlad\u0131\u011f\u0131m\u0131z grup\n  become: yes # G\u00f6revleri root yetkileriyle \u00e7al\u0131\u015ft\u0131rmak i\u00e7in\n  gather_facts: yes # Sunucu hakk\u0131nda bilgi toplamak i\u00e7in\n\n  vars:\n    nginx_port: 80\n\n  tasks:\n    - name: Apt paket \u00f6nbelle\u011fini g\u00fcncelle\n      ansible.builtin.apt:\n        update_cache: yes\n\n    - name: Nginx paketini kur\n      ansible.builtin.apt:\n        name: nginx\n        state: present\n\n    - name: Varsay\u0131lan Nginx yap\u0131land\u0131rma dosyas\u0131n\u0131 kopyala\n      ansible.builtin.copy:\n        src: files\/nginx.conf\n        dest: \/etc\/nginx\/sites-available\/default\n        owner: root\n        group: root\n        mode: '0644'\n      notify: Nginx'i yeniden ba\u015flat\n\n    - name: \u00d6zel bir index.html sayfas\u0131 olu\u015ftur\n      ansible.builtin.copy:\n        content: |\n          <!DOCTYPE html>\n          <html lang=\"tr\">\n          <head>\n              <meta charset=\"UTF-8\">\n              <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n              <title>Ansible ile Otomasyon<\/title>\n              <style>\n                  body { font-family: sans-serif; text-align: center; margin-top: 50px; background-color: #f0f8ff; }\n                  h1 { color: #333; }\n                  p { color: #666; }\n              <\/style>\n          <\/head>\n          <body>\n              <h1>Merhaba DigitalOcean!<\/h1>\n              <p>Bu sayfa Ansible taraf\u0131ndan otomatik olarak da\u011f\u0131t\u0131ld\u0131.<\/p>\n              <p>Droplet IP: {{ ansible_host }}<\/p>\n              <p>\u0130\u015fletim Sistemi: {{ ansible_distribution }} {{ ansible_distribution_version }}<\/p>\n          <\/body>\n          <\/html>\n        dest: \/var\/www\/html\/index.html\n        owner: www-data\n        group: www-data\n        mode: '0644'\n\n    - name: Nginx hizmetinin \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan ve ba\u015flat\u0131ld\u0131\u011f\u0131ndan emin ol\n      ansible.builtin.service:\n        name: nginx\n        state: started\n        enabled: yes\n\n  handlers:\n    - name: Nginx'i yeniden ba\u015flat\n      ansible.builtin.service:\n        name: nginx\n        state: restarted\n<\/code><\/pre>\n<p>Bu playbook&#8217;u \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce, <code>files<\/code> ad\u0131nda bir dizin olu\u015fturun ve i\u00e7ine <code>nginx.conf<\/code> ad\u0131nda a\u015fa\u011f\u0131daki i\u00e7eri\u011fe sahip bir dosya koyun. Bu basit bir Nginx varsay\u0131lan sunucu blo\u011fu olacakt\u0131r:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80 default_server;\n    listen [::]:80 default_server;\n\n    root \/var\/www\/html;\n    index index.html index.htm index.nginx-debian.html;\n\n    server_name _;\n\n    location \/ {\n        try_files $uri $uri\/ =404;\n    }\n}\n<\/code><\/pre>\n<p>\u015eimdi playbook&#8217;u \u00e7al\u0131\u015ft\u0131ral\u0131m:<\/p>\n<pre><code>ansible-playbook -i create_droplet.yml --limit workshop_servers nginx_setup.yml<\/code><\/pre>\n<p>Burada <code>create_droplet.yml<\/code> dosyas\u0131n\u0131 envanter olarak kullan\u0131yoruz \u00e7\u00fcnk\u00fc <code>add_host<\/code> mod\u00fcl\u00fc ile Droplet&#8217;i ge\u00e7ici olarak <code>workshop_servers<\/code> grubuna eklemi\u015ftik. E\u011fer dinamik envanter dosyas\u0131 (<code>digitalocean.yml<\/code>) kullan\u0131yorsan\u0131z, komut \u015f\u00f6yle olacakt\u0131r:<\/p>\n<pre><code>ansible-playbook -i digitalocean.yml nginx_setup.yml --limit tag_ansible-workshop<\/code><\/pre>\n<p>Playbook tamamland\u0131\u011f\u0131nda, Droplet&#8217;inizin IP adresini bir web taray\u0131c\u0131s\u0131nda ziyaret ederek Nginx&#8217;in ba\u015far\u0131yla kuruldu\u011funu ve \u00f6zel HTML sayfan\u0131z\u0131n g\u00f6r\u00fcnd\u00fc\u011f\u00fcn\u00fc do\u011frulayabilirsiniz.<\/p>\n<h3>Roller Kullan\u0131m\u0131<\/h3>\n<p>Daha karma\u015f\u0131k ve yeniden kullan\u0131labilir otomasyonlar i\u00e7in Ansible &#8220;roller&#8221; kullanmak en iyi uygulamad\u0131r. Roller, g\u00f6revleri, de\u011fi\u015fkenleri, \u015fablonlar\u0131 ve dosya yap\u0131lar\u0131n\u0131 mant\u0131ksal birimler halinde d\u00fczenlemenizi sa\u011flar. \u00d6rne\u011fin, Nginx kurulumunu bir role d\u00f6n\u00fc\u015ft\u00fcrebilirsiniz:<\/p>\n<pre><code>ansible-galaxy init webserver<\/code><\/pre>\n<p>Bu komut, <code>webserver<\/code> ad\u0131nda bir dizin yap\u0131s\u0131 olu\u015fturacakt\u0131r. Daha sonra <code>tasks\/main.yml<\/code>, <code>templates\/<\/code> ve <code>files\/<\/code> gibi alt dizinlere ilgili g\u00f6revleri, \u015fablonlar\u0131 ve dosyalar\u0131 yerle\u015ftirebilirsiniz. Ana playbook&#8217;unuzda bu rol\u00fc \u00e7a\u011f\u0131rarak daha d\u00fczenli bir yap\u0131ya kavu\u015fursunuz.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h2>\n<p>Bu rehberde, DigitalOcean \u00fczerinde sunucu kurulumunu ve yap\u0131land\u0131rmas\u0131n\u0131 Ansible ile nas\u0131l otomatikle\u015ftirece\u011finizi ad\u0131m ad\u0131m \u00f6\u011frendiniz. Art\u0131k manuel s\u00fcre\u00e7lerin getirdi\u011fi zaman kayb\u0131 ve hatalarla u\u011fra\u015fmak yerine, birka\u00e7 komutla tamamen yap\u0131land\u0131r\u0131lm\u0131\u015f sunuculara sahip olabilirsiniz. Ansible ve DigitalOcean&#8217;\u0131n birle\u015fimi, altyap\u0131 y\u00f6netimini basitle\u015ftirir, tutarl\u0131l\u0131\u011f\u0131 art\u0131r\u0131r ve ekiplerin daha verimli \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Bu at\u00f6lye kiti, otomasyon yolculu\u011funuzda yaln\u0131zca bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. Ansible&#8217;\u0131n zengin mod\u00fcl k\u00fct\u00fcphanesi ve DigitalOcean&#8217;\u0131n esnek API&#8217;si sayesinde, daha karma\u015f\u0131k da\u011f\u0131t\u0131mlar, veritaban\u0131 kurulumlar\u0131, g\u00fcvenlik duvar\u0131 yap\u0131land\u0131rmalar\u0131 ve daha fazlas\u0131n\u0131 otomatikle\u015ftirebilirsiniz. Altyap\u0131n\u0131z\u0131 kod olarak y\u00f6netme (IaC) prati\u011fini benimseyerek, dijital varl\u0131klar\u0131n\u0131z\u0131 daha g\u00fcvenli, \u00f6l\u00e7eklenebilir ve y\u00f6netilebilir hale getirebilirsiniz.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular (SSS)<\/h3>\n<p><strong>Ansible agent&#8217;a ihtiya\u00e7 duyar m\u0131?<\/strong><br \/>\nHay\u0131r, Ansible &#8220;agentless&#8221; bir otomasyon arac\u0131d\u0131r. Y\u00f6netilen sunucularla SSH \u00fczerinden ileti\u015fim kurar ve Python yorumlay\u0131c\u0131s\u0131n\u0131n sunucuda kurulu olmas\u0131 yeterlidir (\u00e7o\u011fu Linux da\u011f\u0131t\u0131m\u0131nda varsay\u0131lan olarak bulunur).<\/p>\n<p><strong>DigitalOcean API token&#8217;\u0131m\u0131 nas\u0131l g\u00fcvende tutar\u0131m?<\/strong><br \/>\nAPI token&#8217;lar\u0131 hassas bilgilerdir. Playbook&#8217;lar\u0131n\u0131zda do\u011frudan yazmak yerine, ortam de\u011fi\u015fkenleri (<code>export DO_API_TOKEN=\"...\"<\/code> gibi) veya Ansible Vault kullanarak \u015fifreleyerek saklamal\u0131s\u0131n\u0131z. Ansible Vault, hassas verileri \u015fifrelemenizi ve sadece gerekti\u011finde \u00e7\u00f6zmenizi sa\u011flar.<\/p>\n<p><strong>Birden fazla sunucuyu ayn\u0131 anda yap\u0131land\u0131rabilir miyim?<\/strong><br \/>\nEvet, bu Ansible&#8217;\u0131n en g\u00fc\u00e7l\u00fc \u00f6zelliklerinden biridir. Playbook&#8217;unuzu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Ansible envanterinizdeki t\u00fcm hedef sunucularda g\u00f6revleri paralel olarak \u00e7al\u0131\u015ft\u0131r\u0131r. Bu, y\u00fczlerce sunucuyu bile ayn\u0131 anda ve tutarl\u0131 bir \u015fekilde yap\u0131land\u0131rabilece\u011finiz anlam\u0131na gelir.<\/p>\n<p><strong>Mevcut DigitalOcean Droplet&#8217;lerini Ansible ile y\u00f6netebilir miyim?<\/strong><br \/>\nKesinlikle. Dinamik envanter eklentisi (<code>community.digitalocean.digital_ocean<\/code>) sayesinde, DigitalOcean hesab\u0131n\u0131zdaki t\u00fcm Droplet&#8217;leri otomatik olarak ke\u015ffedebilir ve onlar\u0131 Ansible playbook&#8217;lar\u0131n\u0131zla hedefleyerek y\u00f6netebilirsiniz. Yeni olu\u015fturulmu\u015f veya uzun s\u00fcredir var olan Droplet&#8217;ler aras\u0131nda bir fark yoktur.<\/p>\n<p><strong>Ansible Vault nedir ve neden kullanmal\u0131y\u0131m?<\/strong><br \/>\nAnsible Vault, parolalar, API anahtarlar\u0131, SSH \u00f6zel anahtarlar\u0131 gibi hassas verileri \u015fifrelemek i\u00e7in kullan\u0131lan bir \u00f6zelliktir. Bu verileri \u015fifreli olarak depolaman\u0131za ve sadece bir parola ile \u00e7\u00f6zerek kullanman\u0131za olanak tan\u0131r. Kodunuzu versiyon kontrol sistemlerinde (Git gibi) saklarken g\u00fcvenli\u011fi sa\u011flamak i\u00e7in kritik \u00f6neme sahiptir.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, sunucu kurulumu ve y\u00f6netimi s\u00fcre\u00e7lerini otomatikle\u015ftirmek, hem zaman tasarrufu hem de tutar","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1401],"tags":[],"class_list":{"0":"post-38076","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-git","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Ansible ve DigitalOcean: G\u00fc\u00e7l\u00fc Bir \u0130kili - Kodlar\u0131n Gizemli D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Ansible ve DigitalOcean: G\u00fc\u00e7l\u00fc Bir \u0130kili\" \/>\n<meta property=\"og:description\" content=\"G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, sunucu kurulumu ve y\u00f6netimi s\u00fcre\u00e7lerini otomatikle\u015ftirmek, hem zaman tasarrufu hem de tutar\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-22T18:41:47+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Ansible ve DigitalOcean: G\u00fc\u00e7l\u00fc Bir \u0130kili\",\"datePublished\":\"2026-01-22T18:41:47+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/\"},\"wordCount\":1915,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Git\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/\",\"name\":\"Ansible ve DigitalOcean: G\u00fc\u00e7l\u00fc Bir \u0130kili - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-22T18:41:47+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Ansible ve DigitalOcean: G\u00fc\u00e7l\u00fc Bir \u0130kili\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Ansible ve DigitalOcean: G\u00fc\u00e7l\u00fc Bir \u0130kili - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/","og_locale":"tr_TR","og_type":"article","og_title":"Ansible ve DigitalOcean: G\u00fc\u00e7l\u00fc Bir \u0130kili","og_description":"G\u00fcn\u00fcm\u00fcz\u00fcn h\u0131zla de\u011fi\u015fen dijital d\u00fcnyas\u0131nda, sunucu kurulumu ve y\u00f6netimi s\u00fcre\u00e7lerini otomatikle\u015ftirmek, hem zaman tasarrufu hem de tutar","og_url":"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-22T18:41:47+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"12 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Ansible ve DigitalOcean: G\u00fc\u00e7l\u00fc Bir \u0130kili","datePublished":"2026-01-22T18:41:47+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/"},"wordCount":1915,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Git"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/","url":"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/","name":"Ansible ve DigitalOcean: G\u00fc\u00e7l\u00fc Bir \u0130kili - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-22T18:41:47+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/ansible-ve-digitalocean-guclu-bir-ikili\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Ansible ve DigitalOcean: G\u00fc\u00e7l\u00fc Bir \u0130kili"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38076","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=38076"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38076\/revisions"}],"predecessor-version":[{"id":38077,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38076\/revisions\/38077"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38076"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38076"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38076"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}