{"id":38021,"date":"2026-01-21T15:40:55","date_gmt":"2026-01-21T12:40:55","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=38021"},"modified":"2026-01-21T15:40:55","modified_gmt":"2026-01-21T12:40:55","slug":"octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/","title":{"rendered":"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi<\/h2>\n<p>DNS (Alan Ad\u0131 Sistemi) y\u00f6netimi, modern altyap\u0131lar\u0131n temel ta\u015flar\u0131ndan biridir. Geleneksel olarak, DNS kay\u0131tlar\u0131 manuel olarak web aray\u00fczleri arac\u0131l\u0131\u011f\u0131yla veya komut sat\u0131r\u0131 ara\u00e7lar\u0131 kullan\u0131larak y\u00f6netilir. Ancak bu yakla\u015f\u0131m, \u00f6zellikle b\u00fcy\u00fck ve dinamik altyap\u0131larda tutars\u0131zl\u0131klara, hatalara ve y\u00f6netim zorluklar\u0131na yol a\u00e7abilir. \u0130\u015fte bu noktada &#8220;Altyap\u0131 Kod Olarak&#8221; (Infrastructure as Code &#8211; IaC) prensipleri devreye girer ve DNS y\u00f6netimini d\u00f6n\u00fc\u015ft\u00fcrmek i\u00e7in OctoDNS gibi ara\u00e7lar \u00f6ne \u00e7\u0131kar.<\/p>\n<p>Bu kapsaml\u0131 rehberde, OctoDNS&#8217;in ne oldu\u011funu, neden \u00f6nemli oldu\u011funu ve Ubuntu 18.04 i\u015fletim sistemi \u00fczerinde nas\u0131l kurulup yap\u0131land\u0131r\u0131larak DNS kay\u0131tlar\u0131n\u0131z\u0131 verimli bir \u015fekilde y\u00f6netebilece\u011finizi ad\u0131m ad\u0131m inceleyece\u011fiz. Ubuntu 18.04, uzun s\u00fcreli destek (LTS) sunan stabil bir platform oldu\u011fu i\u00e7in bu t\u00fcr bir y\u00f6netim arac\u0131 i\u00e7in ideal bir temel olu\u015fturur.<\/p>\n<h3>DNS Y\u00f6netiminde Kar\u015f\u0131la\u015f\u0131lan Zorluklar ve IaC Yakla\u015f\u0131m\u0131<\/h3>\n<p>Geleneksel DNS y\u00f6netiminde kar\u015f\u0131la\u015f\u0131lan ba\u015fl\u0131ca zorluklar \u015funlard\u0131r:<\/p>\n<p>*   <strong>Manuel Hatalar:<\/strong> \u0130nsan fakt\u00f6r\u00fc, \u00f6zellikle karma\u015f\u0131k DNS kay\u0131tlar\u0131 \u00fczerinde \u00e7al\u0131\u015f\u0131rken yanl\u0131\u015f giri\u015flere veya silinmelere neden olabilir.<br \/>\n*   <strong>Tutars\u0131zl\u0131k:<\/strong> Birden fazla DNS sa\u011flay\u0131c\u0131 kullan\u0131ld\u0131\u011f\u0131nda veya farkl\u0131 ekipler taraf\u0131ndan y\u00f6netildi\u011finde kay\u0131tlar aras\u0131nda tutars\u0131zl\u0131klar olu\u015fabilir.<br \/>\n*   <strong>Versiyon Kontrol Eksikli\u011fi:<\/strong> De\u011fi\u015fikliklerin kim taraf\u0131ndan, ne zaman ve neden yap\u0131ld\u0131\u011f\u0131na dair net bir izleme mekanizmas\u0131 genellikle bulunmaz. Bu durum, hatal\u0131 de\u011fi\u015fiklikleri geri almay\u0131 zorla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Otomasyon Eksikli\u011fi:<\/strong> Yeni hizmetler devreye al\u0131nd\u0131\u011f\u0131nda veya mevcut hizmetler g\u00fcncellendi\u011finde DNS kay\u0131tlar\u0131n\u0131n manuel olarak g\u00fcncellenmesi zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k bir s\u00fcre\u00e7tir.<br \/>\n*   <strong>Denetlenebilirlik:<\/strong> G\u00fcvenlik ve uyumluluk a\u00e7\u0131s\u0131ndan DNS de\u011fi\u015fikliklerinin denetlenebilir olmas\u0131 \u00f6nemlidir, ancak manuel s\u00fcre\u00e7ler bunu sa\u011flamakta yetersiz kalabilir.<\/p>\n<p>Altyap\u0131 Kod Olarak (IaC) yakla\u015f\u0131m\u0131, sunucular, a\u011flar, veritabanlar\u0131 ve bu durumda DNS gibi altyap\u0131 bile\u015fenlerini kod dosyalar\u0131 kullanarak tan\u0131mlama ve y\u00f6netme prensibidir. IaC&#8217;nin faydalar\u0131 \u015funlard\u0131r:<\/p>\n<p>*   <strong>Tutarl\u0131l\u0131k:<\/strong> Altyap\u0131 tan\u0131mlar\u0131 tek bir kaynakta (kod) tutuldu\u011fu i\u00e7in tutarl\u0131l\u0131k sa\u011flan\u0131r.<br \/>\n*   <strong>Versiyon Kontrol\u00fc:<\/strong> Kod dosyalar\u0131 Git gibi versiyon kontrol sistemlerinde saklanarak de\u011fi\u015fiklik ge\u00e7mi\u015fi izlenebilir, geri al\u0131nabilir ve i\u015f birli\u011fi i\u00e7inde \u00e7al\u0131\u015f\u0131labilir.<br \/>\n*   <strong>Otomasyon:<\/strong> Kod, otomatik ara\u00e7lar arac\u0131l\u0131\u011f\u0131yla da\u011f\u0131t\u0131labilir ve y\u00f6netilebilir, bu da insan m\u00fcdahalesini azalt\u0131r.<br \/>\n*   <strong>Tekrarlanabilirlik:<\/strong> Ayn\u0131 altyap\u0131 tan\u0131m\u0131, farkl\u0131 ortamlarda (geli\u015ftirme, test, \u00fcretim) ayn\u0131 sonucu verecek \u015fekilde tekrar tekrar da\u011f\u0131t\u0131labilir.<br \/>\n*   <strong>Hata Azaltma:<\/strong> Kod tabanl\u0131 y\u00f6netim, manuel hatalar\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<\/p>\n<h3>OctoDNS Nedir ve Neden Kullanmal\u0131y\u0131z?<\/h3>\n<p>OctoDNS, GitHub taraf\u0131ndan geli\u015ftirilen ve DNS kay\u0131tlar\u0131n\u0131 kod olarak y\u00f6netmeyi sa\u011flayan bir DNS senkronizasyon arac\u0131d\u0131r. Python ile yaz\u0131lm\u0131\u015ft\u0131r ve deklaratif bir yakla\u015f\u0131mla \u00e7al\u0131\u015f\u0131r. Yani, DNS kay\u0131tlar\u0131n\u0131z\u0131n &#8220;nas\u0131l&#8221; g\u00f6r\u00fcnd\u00fc\u011f\u00fcn\u00fc de\u011fil, &#8220;ne&#8221; olmas\u0131 gerekti\u011fini tan\u0131mlars\u0131n\u0131z. OctoDNS, bu tan\u0131mlar\u0131 al\u0131r ve yap\u0131land\u0131r\u0131lan DNS sa\u011flay\u0131c\u0131lar\u0131n\u0131za (AWS Route 53, Google Cloud DNS, Cloudflare, DigitalOcean, Azure DNS ve daha bir\u00e7oklar\u0131) uygular.<\/p>\n<p>OctoDNS&#8217;in ba\u015fl\u0131ca avantajlar\u0131:<\/p>\n<p>*   <strong>\u00c7oklu Sa\u011flay\u0131c\u0131 Deste\u011fi:<\/strong> Tek bir yap\u0131land\u0131rma ile birden fazla DNS sa\u011flay\u0131c\u0131s\u0131n\u0131 (\u00f6rne\u011fin, birincil ve ikincil DNS sa\u011flay\u0131c\u0131lar\u0131 veya farkl\u0131 b\u00f6lgelerdeki sa\u011flay\u0131c\u0131lar) y\u00f6netebilirsiniz.<br \/>\n*   <strong>Deklaratif Yap\u0131land\u0131rma:<\/strong> DNS kay\u0131tlar\u0131n\u0131z\u0131 YAML dosyalar\u0131nda okunabilir ve y\u00f6netilebilir bir formatta tan\u0131mlars\u0131n\u0131z.<br \/>\n*   <strong>Git Entegrasyonu:<\/strong> DNS yap\u0131land\u0131rmalar\u0131n\u0131z\u0131 Git depolar\u0131nda saklayarak versiyon kontrol\u00fc, de\u011fi\u015fiklik takibi, geri alma ve i\u015f birli\u011fi imkanlar\u0131ndan faydalanabilirsiniz.<br \/>\n*   <strong>Idempotency (Tekrar Edilebilirlik):<\/strong> Bir i\u015flemi ka\u00e7 kez \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131z \u00f6nemli de\u011fildir; her zaman ayn\u0131 sonuca ula\u015f\u0131rs\u0131n\u0131z. OctoDNS, yaln\u0131zca gerekli de\u011fi\u015fiklikleri yapar.<br \/>\n*   <strong>Planlama ve Uygulama:<\/strong> De\u011fi\u015fiklikleri uygulamadan \u00f6nce ne yap\u0131laca\u011f\u0131n\u0131 g\u00f6steren bir &#8220;plan&#8221; olu\u015fturabilir, b\u00f6ylece potansiyel hatalar\u0131 \u00f6nceden g\u00f6rebilirsiniz.<br \/>\n*   <strong>Esneklik:<\/strong> \u00d6zel ihtiya\u00e7lar\u0131n\u0131za g\u00f6re geni\u015fletilebilir ve \u00f6zelle\u015ftirilebilir.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>OctoDNS kurulumuna ba\u015flamadan \u00f6nce a\u015fa\u011f\u0131daki \u00f6n gereksinimlere sahip oldu\u011funuzdan emin olun:<\/p>\n<p>*   <strong>Ubuntu 18.04 Sunucusu:<\/strong> SSH eri\u015fimine sahip bir Ubuntu 18.04 sunucusu. Bu rehberdeki komutlar bu i\u015fletim sistemi i\u00e7in optimize edilmi\u015ftir.<br \/>\n*   <strong>Python 3 ve Pip:<\/strong> OctoDNS Python ile yaz\u0131ld\u0131\u011f\u0131 i\u00e7in Python 3 ve paket y\u00f6neticisi pip&#8217;in kurulu olmas\u0131 gerekir.<br \/>\n*   <strong>Git:<\/strong> DNS yap\u0131land\u0131rmalar\u0131n\u0131z\u0131 versiyon kontrol\u00fc alt\u0131nda tutmak i\u00e7in Git&#8217;e ihtiyac\u0131n\u0131z olacak.<br \/>\n*   <strong>DNS Sa\u011flay\u0131c\u0131 Hesab\u0131:<\/strong> AWS Route 53, Cloudflare, DigitalOcean, Google Cloud DNS gibi desteklenen bir DNS sa\u011flay\u0131c\u0131s\u0131nda aktif bir hesab\u0131n\u0131z olmal\u0131.<br \/>\n*   <strong>API Kimlik Bilgileri:<\/strong> Se\u00e7ti\u011finiz DNS sa\u011flay\u0131c\u0131s\u0131 i\u00e7in OctoDNS&#8217;in programatik olarak de\u011fi\u015fiklik yapabilmesi i\u00e7in gerekli API anahtarlar\u0131 veya kimlik bilgileri. Bu bilgiler genellikle <code>ACCESS_KEY_ID<\/code>, <code>SECRET_ACCESS_KEY<\/code> veya API token gibi de\u011ferlerdir. <strong>G\u00fcvenlik nedeniyle bu bilgileri do\u011frudan yap\u0131land\u0131rma dosyalar\u0131na yazmak yerine ortam de\u011fi\u015fkenleri olarak kullanmay\u0131 \u015fiddetle tavsiye ederiz.<\/strong><\/p>\n<h3>Ortam Kurulumu (Ubuntu 18.04)<\/h3>\n<p>OctoDNS&#8217;i kurmak i\u00e7in a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyin:<\/p>\n<h4>Sistem G\u00fcncellemesi<\/h4>\n<p>\u00d6ncelikle sunucunuzdaki paket listesini g\u00fcncelleyin ve y\u00fckl\u00fc paketleri en son s\u00fcr\u00fcmlerine y\u00fckseltin:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\nsudo apt upgrade -y<\/code><\/pre>\n<h4>Python 3, Pip ve Venv Kurulumu<\/h4>\n<p>Ubuntu 18.04, Python 3 ile birlikte gelir, ancak <code>pip<\/code> ve sanal ortamlar i\u00e7in <code>venv<\/code> mod\u00fcl\u00fc ek olarak kurulmas\u0131 gerekebilir.<\/p>\n<pre><code class=\"language-bash\">sudo apt install python3-pip python3-venv git -y<\/code><\/pre>\n<p>Bu komut ayn\u0131 zamanda Git&#8217;i de y\u00fckleyecektir.<\/p>\n<h4>Sanal Ortam Olu\u015fturma ve OctoDNS Kurulumu<\/h4>\n<p>OctoDNS&#8217;i sistem genelinde kurmak yerine, ba\u011f\u0131ml\u0131l\u0131k \u00e7ak\u0131\u015fmalar\u0131n\u0131 \u00f6nlemek i\u00e7in bir Python sanal ortam\u0131 i\u00e7inde kurmak en iyi uygulamad\u0131r.<\/p>\n<p>1.  <strong>\u00c7al\u0131\u015fma Dizini Olu\u015fturma:<\/strong><br \/>\n    OctoDNS yap\u0131land\u0131rma dosyalar\u0131n\u0131z\u0131 ve kodunuzu saklayaca\u011f\u0131n\u0131z bir dizin olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">mkdir octodns-dns-management\n    cd octodns-dns-management<\/code><\/pre>\n<p>2.  <strong>Sanal Ortam Olu\u015fturma:<\/strong><br \/>\n    Bu dizin i\u00e7inde bir sanal ortam olu\u015fturun:<\/p>\n<pre><code class=\"language-bash\">python3 -m venv venv<\/code><\/pre>\n<p>3.  <strong>Sanal Ortam\u0131 Aktifle\u015ftirme:<\/strong><br \/>\n    Sanal ortam\u0131 aktifle\u015ftirin. Komut istemciniz de\u011fi\u015ferek sanal ortam\u0131n aktif oldu\u011funu g\u00f6sterecektir (\u00f6rn. <code>(venv)<\/code> ile ba\u015flayabilir).<\/p>\n<pre><code class=\"language-bash\">source venv\/bin\/activate<\/code><\/pre>\n<p>4.  <strong>OctoDNS Kurulumu:<\/strong><br \/>\n    Sanal ortam aktifken OctoDNS&#8217;i ve kullanaca\u011f\u0131n\u0131z DNS sa\u011flay\u0131c\u0131lar\u0131 i\u00e7in gerekli eklentileri y\u00fckleyin. \u00d6rne\u011fin, AWS Route 53 ve Cloudflare kullanacaksan\u0131z:<\/p>\n<pre><code class=\"language-bash\">pip install octodns octodns-route53 octodns-cloudflare<\/code><\/pre>\n<p>    Di\u011fer sa\u011flay\u0131c\u0131lar i\u00e7in <code>octodns-digitalocean<\/code>, <code>octodns-googlecloud<\/code>, <code>octodns-azure<\/code> vb. paketleri eklemeniz gerekir. Hangi sa\u011flay\u0131c\u0131lar\u0131 kullanaca\u011f\u0131n\u0131za ba\u011fl\u0131 olarak bu komutu g\u00fcncelleyin.<\/p>\n<p>Kurulum tamamland\u0131ktan sonra, sanal ortam aktifken <code>octodns-sync --version<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak OctoDNS&#8217;in do\u011fru \u015fekilde kuruldu\u011funu do\u011frulayabilirsiniz.<\/p>\n<h3>OctoDNS Kavramlar\u0131n\u0131 Anlama<\/h3>\n<p>OctoDNS, DNS y\u00f6netimini basitle\u015ftirmek i\u00e7in birka\u00e7 temel kavram etraf\u0131nda d\u00f6ner:<\/p>\n<p>*   <strong>Yap\u0131land\u0131rma Dosyalar\u0131:<\/strong> OctoDNS&#8217;in nas\u0131l davranaca\u011f\u0131n\u0131, hangi DNS sa\u011flay\u0131c\u0131lar\u0131n\u0131 kullanaca\u011f\u0131n\u0131 ve hangi b\u00f6lgeleri y\u00f6netece\u011fini tan\u0131mlayan YAML dosyalar\u0131d\u0131r. Ana yap\u0131land\u0131rma dosyalar\u0131 <code>config.yaml<\/code> ve <code>providers.yaml<\/code>&#8216;d\u0131r.<br \/>\n*   <strong>Kaynaklar (Sources):<\/strong> DNS kay\u0131tlar\u0131n\u0131z\u0131n istenen durumunu tan\u0131mlad\u0131\u011f\u0131n\u0131z yerdir. Genellikle bu, yerel dosya sisteminizdeki YAML dosyalar\u0131d\u0131r (<code>zones\/<\/code> dizini alt\u0131nda). OctoDNS, bu dosyalardan DNS kay\u0131tlar\u0131n\u0131n mevcut olmas\u0131 gereken durumunu okur.<br \/>\n*   <strong>Hedefler (Sinks\/Targets):<\/strong> OctoDNS&#8217;in kaynaklardan okudu\u011fu durumu uygulayaca\u011f\u0131 DNS sa\u011flay\u0131c\u0131lar\u0131d\u0131r. Her hedef, bir DNS sa\u011flay\u0131c\u0131s\u0131na (Route 53, Cloudflare vb.) kar\u015f\u0131l\u0131k gelir ve API kimlik bilgileriyle yap\u0131land\u0131r\u0131l\u0131r.<br \/>\n*   <strong>B\u00f6lge Dosyalar\u0131 (Zone Files):<\/strong> Her bir DNS b\u00f6lgesi (\u00f6rn. <code>example.com<\/code>), kendi YAML dosyas\u0131nda tan\u0131mlan\u0131r (<code>example.com.yaml<\/code>). Bu dosyalar, b\u00f6lgeye ait t\u00fcm DNS kay\u0131tlar\u0131n\u0131 (A, AAAA, CNAME, MX, TXT vb.) i\u00e7erir.<br \/>\n*   <strong>Plan ve Uygula (Plan &#038; Apply):<\/strong> OctoDNS&#8217;in temel i\u015f ak\u0131\u015f\u0131d\u0131r. <code>plan<\/code> komutu, yerel yap\u0131land\u0131rman\u0131z ile DNS sa\u011flay\u0131c\u0131n\u0131zdaki mevcut durum aras\u0131ndaki farklar\u0131 g\u00f6sterir. <code>apply<\/code> komutu ise bu farklar\u0131 DNS sa\u011flay\u0131c\u0131n\u0131za uygular.<\/p>\n<h3>OctoDNS Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>OctoDNS&#8217;i yap\u0131land\u0131rmak i\u00e7in <code>providers.yaml<\/code> ve <code>config.yaml<\/code> dosyalar\u0131n\u0131 olu\u015fturman\u0131z gerekmektedir. Ayr\u0131ca, her bir DNS b\u00f6lgesi i\u00e7in ayr\u0131 YAML dosyalar\u0131 olu\u015fturacaks\u0131n\u0131z.<\/p>\n<h4>1. <code>providers.yaml<\/code> Dosyas\u0131<\/h4>\n<p>Bu dosya, OctoDNS&#8217;in kullanaca\u011f\u0131 DNS sa\u011flay\u0131c\u0131lar\u0131n\u0131 ve bunlara eri\u015fim i\u00e7in gerekli API kimlik bilgilerini tan\u0131mlar. <strong>API anahtarlar\u0131n\u0131 do\u011frudan bu dosyaya yazmak yerine ortam de\u011fi\u015fkenleri kullanmak en g\u00fcvenli yakla\u015f\u0131md\u0131r.<\/strong><\/p>\n<p><code>providers.yaml<\/code> \u00f6rne\u011fi:<\/p>\n<pre><code class=\"language-yaml\">---\nroute53:\n  class: octodns_route53.Route53Provider\n  access_key_id: env\/AWS_ACCESS_KEY_ID\n  secret_access_key: env\/AWS_SECRET_ACCESS_KEY\n\ncloudflare:\n  class: octodns_cloudflare.CloudflareProvider\n  token: env\/CLOUDFLARE_API_TOKEN\n  email: env\/CLOUDFLARE_EMAIL\n\n<h2>Di\u011fer sa\u011flay\u0131c\u0131lar i\u00e7in \u00f6rnekler:<\/h2>\n<h2>digitalocean:<\/h2>\n<h2>class: octodns_digitalocean.DigitalOceanProvider<\/h2>\n<h2>token: env\/DIGITALOCEAN_API_TOKEN<\/code><\/pre>\n<\/h2>\n<p><strong>Ortam De\u011fi\u015fkenlerini Ayarlama:<\/strong><\/p>\n<p>OctoDNS&#8217;i \u00e7al\u0131\u015ft\u0131rmadan \u00f6nce, yukar\u0131daki \u00f6rnekte belirtilen ortam de\u011fi\u015fkenlerini ayarlaman\u0131z gerekmektedir. Bunu, terminal oturumunuzda <code>export<\/code> komutunu kullanarak yapabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">export AWS_ACCESS_KEY_ID=\"YOUR_AWS_ACCESS_KEY_ID\"\nexport AWS_SECRET_ACCESS_KEY=\"YOUR_AWS_SECRET_ACCESS_KEY\"\nexport CLOUDFLARE_API_TOKEN=\"YOUR_CLOUDFLARE_API_TOKEN\"\nexport CLOUDFLARE_EMAIL=\"your.email@example.com\"<\/code><\/pre>\n<p>Bu de\u011fi\u015fkenleri kal\u0131c\u0131 hale getirmek i\u00e7in <code>.bashrc<\/code> veya <code>.profile<\/code> dosyan\u0131za ekleyebilirsiniz, ancak CI\/CD ortamlar\u0131nda genellikle pipeline ad\u0131mlar\u0131nda ayarlan\u0131rlar.<\/p>\n<h4>2. <code>config.yaml<\/code> Dosyas\u0131<\/h4>\n<p>Bu dosya, hangi DNS b\u00f6lgelerinin y\u00f6netilece\u011fini ve her bir b\u00f6lge i\u00e7in hangi kaynak ve hedeflerin kullan\u0131laca\u011f\u0131n\u0131 tan\u0131mlar.<\/p>\n<p><code>config.yaml<\/code> \u00f6rne\u011fi:<\/p>\n<pre><code class=\"language-yaml\">---\n<h2>Kaynaklar\u0131 tan\u0131mlar. Burada yerel dosya sistemi (yaml) kullan\u0131yoruz.<\/h2>\nsources:\n  config:\n    class: octodns.source.yaml.YamlSource\n    directory: .\/zones # DNS b\u00f6lge dosyalar\u0131n\u0131n bulundu\u011fu dizin\n\n<h2>Hedefleri tan\u0131mlar. providers.yaml dosyas\u0131nda tan\u0131mlanan sa\u011flay\u0131c\u0131lar\u0131 kullan\u0131r\u0131z.<\/h2>\ntargets:\n  route53:\n    class: octodns.target.route53.Route53Target\n    provider: route53\n  cloudflare:\n    class: octodns.target.cloudflare.CloudflareTarget\n    provider: cloudflare\n\n<h2>Y\u00f6netilecek DNS b\u00f6lgelerini tan\u0131mlar ve kaynak\/hedef e\u015fle\u015ftirmelerini yapar.<\/h2>\nzones:\n  example.com.: # B\u00f6lge ad\u0131 sonuna nokta eklemeyi unutmay\u0131n\n    sources:\n      - config\n    targets:\n      - route53\n      - cloudflare\n  sub.example.com.:\n    sources:\n      - config\n    targets:\n      - route53<\/code><\/pre>\n<p>Yukar\u0131daki \u00f6rnekte, <code>example.com<\/code> ve <code>sub.example.com<\/code> b\u00f6lgelerinin kay\u0131tlar\u0131 yerel <code>zones\/<\/code> dizininden al\u0131nacak ve hem AWS Route 53 hem de Cloudflare&#8217;a uygulanacakt\u0131r.<\/p>\n<h4>3. B\u00f6lge Dosyalar\u0131 (<code>zones\/<\/code>)<\/h4>\n<p><code>config.yaml<\/code> dosyas\u0131nda belirtti\u011fimiz <code>zones\/<\/code> dizinini olu\u015fturun ve her bir DNS b\u00f6lgesi i\u00e7in ayr\u0131 bir YAML dosyas\u0131 olu\u015fturun. Dosya adlar\u0131 b\u00f6lge adlar\u0131yla e\u015fle\u015fmelidir (\u00f6rn. <code>example.com.yaml<\/code>).<\/p>\n<pre><code class=\"language-bash\">mkdir zones<\/code><\/pre>\n<p><code>zones\/example.com.yaml<\/code> \u00f6rne\u011fi:<\/p>\n<pre><code class=\"language-yaml\">---\n<h2>TTL (Time To Live) de\u011feri, varsay\u0131lan olarak 3600 saniyedir (1 saat).<\/h2>\n<h2>Kay\u0131t d\u00fczeyinde veya b\u00f6lge d\u00fczeyinde ge\u00e7ersiz k\u0131l\u0131nabilir.<\/h2>\n<h2>ttl: 3600<\/h2>\n\n<h2>A Kay\u0131tlar\u0131<\/h2>\nwww:\n  type: A\n  value: 192.0.2.10\n\n@: # K\u00f6k alan ad\u0131 i\u00e7in '@' kullan\u0131l\u0131r\n  type: A\n  value: 192.0.2.20\n\n<h2>CNAME Kay\u0131tlar\u0131<\/h2>\nblog:\n  type: CNAME\n  value: www.example.com. # CNAME de\u011feri tam alan ad\u0131 olmal\u0131 ve nokta ile bitmeli\n\n<h2>MX Kay\u0131tlar\u0131<\/h2>\nmail:\n  type: A\n  value: 192.0.2.30\n\n@:\n  type: MX\n  values:\n    - preference: 10\n      value: mail.example.com.\n    - preference: 20\n      value: backup-mail.example.com.\n\n<h2>TXT Kay\u0131tlar\u0131<\/h2>\n_spf:\n  type: TXT\n  value: \"v=spf1 include:_spf.google.com ~all\"\n\n<h2>AAAA Kay\u0131tlar\u0131 (IPv6)<\/h2>\nipv6:\n  type: AAAA\n  value: 2001:0db8:85a3:0000:0000:8a2e:0370:7334\n\n<h2>SRV Kay\u0131tlar\u0131 (\u00d6rnek)<\/h2>\n_sip._tcp:\n  type: SRV\n  values:\n    - priority: 10\n      weight: 100\n      port: 5060\n      target: sip.example.com.<\/code><\/pre>\n<p><code>zones\/sub.example.com.yaml<\/code> \u00f6rne\u011fi:<\/p>\n<pre><code class=\"language-yaml\">---\n@:\n  type: A\n  value: 192.0.2.40<\/code><\/pre>\n<p><strong>\u00d6nemli Notlar:<\/strong><\/p>\n<p>*   B\u00f6lge adlar\u0131n\u0131n ve CNAME hedeflerinin sonuna nokta (<code>.<\/code>) eklemeyi unutmay\u0131n. Bu, DNS&#8217;teki mutlak adland\u0131rmay\u0131 temsil eder.<br \/>\n*   TTL de\u011feri belirtilmezse, OctoDNS varsay\u0131lan TTL&#8217;i kullan\u0131r (genellikle 3600 saniye).<br \/>\n*   \u00c7oklu de\u011fer alan kay\u0131tlar (MX, SRV) i\u00e7in <code>values<\/code> listesi kullan\u0131l\u0131r.<br \/>\n*   <code>@<\/code> sembol\u00fc, k\u00f6k alan ad\u0131n\u0131 temsil eder.<\/p>\n<h3>\u0130\u015f Ak\u0131\u015f\u0131: DNS Da\u011f\u0131t\u0131m\u0131 ve Y\u00f6netimi<\/h3>\n<p>Yap\u0131land\u0131rma dosyalar\u0131n\u0131z\u0131 haz\u0131rlad\u0131ktan sonra OctoDNS ile DNS kay\u0131tlar\u0131n\u0131z\u0131 y\u00f6netmeye ba\u015flayabilirsiniz.<\/p>\n<h4>1. \u0130lk Kurulum ve Mevcut Kay\u0131tlar\u0131 \u0130\u00e7eri Aktarma (Opsiyonel ama \u00d6nemli)<\/h4>\n<p>E\u011fer mevcut bir DNS b\u00f6lgeniz varsa ve OctoDNS ile y\u00f6netmeye ba\u015flamak istiyorsan\u0131z, OctoDNS&#8217;in mevcut kay\u0131tlar\u0131 okuyup YAML dosyalar\u0131na aktarmas\u0131n\u0131 sa\u011flayabilirsiniz. Bu, manuel olarak t\u00fcm kay\u0131tlar\u0131 yazmaktan \u00e7ok daha kolayd\u0131r.<\/p>\n<p>\u00d6nce sanal ortam\u0131n\u0131z\u0131n aktif oldu\u011fundan emin olun: <code>source venv\/bin\/activate<\/code><\/p>\n<p>Ard\u0131ndan, belirli bir sa\u011flay\u0131c\u0131dan bir b\u00f6lgeyi i\u00e7eri aktarmak i\u00e7in <code>octodns-sync<\/code> komutunu <code>sources<\/code> ve <code>target<\/code> parametreleriyle kullanabilirsiniz. \u00d6rne\u011fin, <code>example.com<\/code> b\u00f6lgesini Route 53&#8217;ten okuyup <code>zones\/example.com.yaml<\/code> dosyas\u0131na yazmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">octodns-sync --config-file=.\/config.yaml --sources=route53 --target=config --zone=example.com.<\/code><\/pre>\n<p>Bu komut, <code>providers.yaml<\/code>&#8216;daki <code>route53<\/code> sa\u011flay\u0131c\u0131s\u0131n\u0131 bir kaynak olarak kullanacak ve <code>config.yaml<\/code>&#8216;daki <code>config<\/code> kayna\u011f\u0131n\u0131 (yani yerel <code>zones\/<\/code> dizinini) bir hedef olarak kullanarak <code>example.com.<\/code> b\u00f6lgesinin kay\u0131tlar\u0131n\u0131 <code>zones\/example.com.yaml<\/code> dosyas\u0131na yazacakt\u0131r. Di\u011fer DNS sa\u011flay\u0131c\u0131lar\u0131ndan da benzer \u015fekilde i\u00e7eri aktarabilirsiniz.<\/p>\n<p>\u0130\u00e7eri aktarma i\u015fleminden sonra, olu\u015fturulan YAML dosyas\u0131n\u0131 kontrol edin ve gerekti\u011finde d\u00fczenleyin.<\/p>\n<h4>2. De\u011fi\u015fiklikleri Planlama<\/h4>\n<p>Herhangi bir de\u011fi\u015fiklik yapmadan \u00f6nce, OctoDNS&#8217;in ne yapaca\u011f\u0131n\u0131 g\u00f6steren bir plan olu\u015fturmak en iyi uygulamad\u0131r. Bu, yanl\u0131\u015fl\u0131kla yap\u0131lan de\u011fi\u015fiklikleri \u00f6nlemenize yard\u0131mc\u0131 olur.<\/p>\n<pre><code class=\"language-bash\">octodns-sync --config-file=.\/config.yaml --plan<\/code><\/pre>\n<p>Bu komut, yerel yap\u0131land\u0131rma dosyalar\u0131n\u0131z ile hedef DNS sa\u011flay\u0131c\u0131lar\u0131n\u0131zdaki mevcut durum aras\u0131ndaki farklar\u0131 listeler. \u00c7\u0131kt\u0131, eklenen, g\u00fcncellenen veya silinecek kay\u0131tlar\u0131 a\u00e7\u0131k\u00e7a g\u00f6sterir. \u00d6rne\u011fin:<\/p>\n<pre><code class=\"language-\">...\n<strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong>\n* example.com.\n<strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong>\n* Target: route53\n*   Create <ARecord A 300, 192.0.2.10>\n*   Create <ARecord A 300, 192.0.2.20>\n*   Create <CnameRecord CNAME 300, www.example.com.>\n*   Create <MxRecord MX 300, 10 mail.example.com., 20 backup-mail.example.com.>\n*   Create <TxtRecord TXT 300, \"v=spf1 include:_spf.google.com ~all\">\n*   Create <AaaaRecord AAAA 300, 2001:0db8:85a3:0000:0000:8a2e:0370:7334>\n*   Create <SrvRecord SRV 300, 10 100 5060 sip.example.com.>\n* Target: cloudflare\n*   Create <ARecord A 300, 192.0.2.10>\n...<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131y\u0131 dikkatlice inceleyin ve bekledi\u011finiz de\u011fi\u015fikliklerle e\u015fle\u015fti\u011finden emin olun.<\/p>\n<h4>3. De\u011fi\u015fiklikleri Uygulama<\/h4>\n<p>Plan \u00e7\u0131kt\u0131s\u0131n\u0131 onaylad\u0131ktan sonra, de\u011fi\u015fiklikleri DNS sa\u011flay\u0131c\u0131lar\u0131n\u0131za uygulamak i\u00e7in <code>--apply<\/code> bayra\u011f\u0131n\u0131 kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">octodns-sync --config-file=.\/config.yaml --apply<\/code><\/pre>\n<p>OctoDNS, de\u011fi\u015fiklikleri uygularken size onay sorabilir. Onaylamak i\u00e7in <code>y<\/code> yaz\u0131p Enter tu\u015funa bas\u0131n.<\/p>\n<pre><code class=\"language-\">...\n<strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong>\n* example.com.\n<strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong><strong><\/strong>\n* Target: route53\n*   Create <ARecord A 300, 192.0.2.10>\n*   Create <ARecord A 300, 192.0.2.20>\n...\nApply changes? [y\/N] y\n...<\/code><\/pre>\n<p>Uygulama tamamland\u0131\u011f\u0131nda, DNS sa\u011flay\u0131c\u0131n\u0131z\u0131n kontrol panelinden veya <code>dig<\/code> gibi ara\u00e7larla DNS kay\u0131tlar\u0131n\u0131z\u0131n g\u00fcncellendi\u011fini do\u011frulayabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">dig www.example.com @8.8.8.8<\/code><\/pre>\n<h4>4. Yeni Kay\u0131tlar Ekleme\/Mevcut Kay\u0131tlar\u0131 G\u00fcncelleme<\/h4>\n<p>1.  <code>zones\/<\/code> dizinindeki ilgili YAML dosyas\u0131n\u0131 a\u00e7\u0131n (\u00f6rn. <code>zones\/example.com.yaml<\/code>).<br \/>\n2.  Yeni kay\u0131tlar\u0131 ekleyin veya mevcut kay\u0131tlar\u0131n de\u011ferlerini g\u00fcncelleyin.<br \/>\n3.  De\u011fi\u015fiklikleri kaydedin.<br \/>\n4.  <code>octodns-sync --config-file=.\/config.yaml --plan<\/code> komutuyla plan\u0131 kontrol edin.<br \/>\n5.  <code>octodns-sync --config-file=.\/config.yaml --apply<\/code> komutuyla de\u011fi\u015fiklikleri uygulay\u0131n.<br \/>\n6.  De\u011fi\u015fikliklerinizi Git&#8217;e commit etmeyi unutmay\u0131n!<\/p>\n<h4>5. Kay\u0131tlar\u0131 Silme<\/h4>\n<p>Bir DNS kayd\u0131n\u0131 silmek i\u00e7in, ilgili YAML dosyas\u0131ndan kayd\u0131 tamamen kald\u0131r\u0131n. Ard\u0131ndan, planlama ve uygulama ad\u0131mlar\u0131n\u0131 takip edin. OctoDNS, YAML dosyas\u0131nda olmayan ancak DNS sa\u011flay\u0131c\u0131n\u0131zda mevcut olan kay\u0131tlar\u0131 silme olarak alg\u0131layacak ve size bir plan sunacakt\u0131r.<\/p>\n<pre><code class=\"language-bash\"># zones\/example.com.yaml dosyas\u0131ndan 'blog' CNAME kayd\u0131n\u0131 kald\u0131r\u0131n\n<h2>Ard\u0131ndan:<\/h2>\noctodns-sync --config-file=.\/config.yaml --plan\n<h2>\u00c7\u0131kt\u0131da 'Delete <CnameRecord CNAME 300, www.example.com.>' benzeri bir sat\u0131r g\u00f6rmelisiniz.<\/h2>\noctodns-sync --config-file=.\/config.yaml --apply<\/code><\/pre>\n<h3>Geli\u015fmi\u015f Konular ve En \u0130yi Uygulamalar<\/h3>\n<h4>Versiyon Kontrol\u00fc (Git)<\/h4>\n<p>OctoDNS yap\u0131land\u0131rmalar\u0131n\u0131z\u0131 bir Git deposunda saklamak, IaC&#8217;nin temelidir.<\/p>\n<p>*   <strong>De\u011fi\u015fiklik Ge\u00e7mi\u015fi:<\/strong> Her de\u011fi\u015fikli\u011fin kim taraf\u0131ndan, ne zaman ve neden yap\u0131ld\u0131\u011f\u0131na dair tam bir ge\u00e7mi\u015f sa\u011flar.<br \/>\n*   <strong>Geri Alma:<\/strong> Hatal\u0131 bir de\u011fi\u015fikli\u011fi kolayca geri alabilirsiniz.<br \/>\n*   <strong>\u0130\u015f Birli\u011fi:<\/strong> Birden fazla geli\u015ftirici veya ekip \u00fcyesi, pull request&#8217;ler ve kod incelemeleri arac\u0131l\u0131\u011f\u0131yla DNS yap\u0131land\u0131rmalar\u0131 \u00fczerinde i\u015f birli\u011fi yapabilir.<br \/>\n*   <strong>Dal Y\u00f6netimi:<\/strong> Geli\u015ftirme, test ve \u00fcretim ortamlar\u0131 i\u00e7in farkl\u0131 dallar kullanabilir veya yeni \u00f6zellikler i\u00e7in ge\u00e7ici dallar olu\u015fturabilirsiniz.<\/p>\n<p>OctoDNS yap\u0131land\u0131rma dosyalar\u0131n\u0131z\u0131 i\u00e7eren <code>octodns-dns-management<\/code> dizinini bir Git deposu olarak ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">cd octodns-dns-management\ngit init\ngit add .\ngit commit -m \"Initial OctoDNS configuration\"<\/code><\/pre>\n<p>Ard\u0131ndan bu depoyu uzak bir Git sunucusuna (GitHub, GitLab, Bitbucket vb.) ba\u011flay\u0131n.<\/p>\n<h4>CI\/CD Entegrasyonu<\/h4>\n<p>OctoDNS&#8217;i s\u00fcrekli entegrasyon\/s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) i\u015flem hatlar\u0131na entegre etmek, DNS y\u00f6netimini otomatikle\u015ftirmenin en g\u00fc\u00e7l\u00fc yoludur.<\/p>\n<p>*   <strong>Otomatik Planlama:<\/strong> Her pull request (\u00e7ekme iste\u011fi) a\u00e7\u0131ld\u0131\u011f\u0131nda veya bir dala kod g\u00f6nderildi\u011finde, CI\/CD sistemi <code>octodns-sync --plan<\/code> komutunu \u00e7al\u0131\u015ft\u0131rabilir ve \u00e7\u0131kt\u0131y\u0131 pull request yorumu olarak ekleyebilir. Bu, de\u011fi\u015fikliklerin g\u00f6zden ge\u00e7irilmesini kolayla\u015ft\u0131r\u0131r.<br \/>\n*   <strong>Manuel veya Onayl\u0131 Uygulama:<\/strong> Ana dala birle\u015ftirilen de\u011fi\u015fiklikler, otomatik olarak veya manuel onaydan sonra <code>octodns-sync --apply<\/code> komutuyla DNS sa\u011flay\u0131c\u0131lar\u0131na uygulanabilir. Bu, \u00fcretim DNS&#8217;inde istenmeyen de\u011fi\u015fiklikleri \u00f6nler.<br \/>\n*   <strong>\u00d6rnek CI\/CD Ak\u0131\u015f\u0131 (GitHub Actions):<\/strong><\/p>\n<pre><code class=\"language-yaml\">name: DNS Management with OctoDNS\n\n    on:\n      push:\n        branches:\n          - main\n        paths:\n          - 'octodns-dns-management\/<em><\/em>' # Sadece OctoDNS dizinindeki de\u011fi\u015fiklikleri dinle\n      pull_request:\n        branches:\n          - main\n        paths:\n          - 'octodns-dns-management\/<em><\/em>'\n\n    jobs:\n      octodns-plan:\n        runs-on: ubuntu-latest\n        steps:\n          - name: Checkout code\n            uses: actions\/checkout@v2\n\n          - name: Setup Python\n            uses: actions\/setup-python@v2\n            with:\n              python-version: '3.x'\n\n          - name: Install OctoDNS\n            run: |\n              cd octodns-dns-management\n              python3 -m venv venv\n              source venv\/bin\/activate\n              pip install octodns octodns-route53 octodns-cloudflare\n\n          - name: OctoDNS Plan\n            id: plan\n            env:\n              AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}\n              AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}\n              CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}\n              CLOUDFLARE_EMAIL: ${{ secrets.CLOUDFLARE_EMAIL }}\n            run: |\n              cd octodns-dns-management\n              source venv\/bin\/activate\n              octodns-sync --config-file=.\/config.yaml --plan > plan_output.txt 2>&1\n              echo \"::set-output name=plan::$(cat plan_output.txt)\"\n\n          - name: Comment on PR with Plan\n            if: github.event_name == 'pull_request'\n            uses: actions\/github-script@v6\n            with:\n              script: |\n                github.rest.issues.createComment({\n                  issue_number: context.issue.number,\n                  owner: context.repo.owner,\n                  repo: context.repo.repo,\n                  body: <code>OctoDNS Plan:\\n\\<\/code>\\<code>\\<\/code>\\n${process.env.PLAN_OUTPUT}\\n\\<code>\\<\/code>\\`<code>\n                })\n            env:\n              PLAN_OUTPUT: ${{ steps.plan.outputs.plan }}\n\n      octodns-apply:\n        runs-on: ubuntu-latest\n        needs: octodns-plan\n        if: github.event_name == 'push' && github.ref == 'refs\/heads\/main'\n        steps:\n          - name: Checkout code\n            uses: actions\/checkout@v2\n\n          - name: Setup Python\n            uses: actions\/setup-python@v2\n            with:\n              python-version: '3.x'\n\n          - name: Install OctoDNS\n            run: |\n              cd octodns-dns-management\n              python3 -m venv venv\n              source venv\/bin\/activate\n              pip install octodns octodns-route53 octodns-cloudflare\n\n          - name: OctoDNS Apply\n            env:\n              AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}\n              AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}\n              CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }}\n              CLOUDFLARE_EMAIL: ${{ secrets.CLOUDFLARE_EMAIL }}\n            run: |\n              cd octodns-dns-management\n              source venv\/bin\/activate\n              octodns-sync --config-file=.\/config.yaml --apply --yes # --yes otomatik onaylar<\/code><\/pre>\n<p>    <strong>Not:<\/strong> GitHub Actions'da <\/code>secrets<code> kullanarak API anahtarlar\u0131n\u0131z\u0131 g\u00fcvenli bir \u015fekilde saklamal\u0131s\u0131n\u0131z.<\/p>\n<h4>G\u00fcvenlik<\/h4>\n<p>*   <strong>API Anahtarlar\u0131:<\/strong> DNS sa\u011flay\u0131c\u0131s\u0131 API anahtarlar\u0131n\u0131z\u0131 asla Git deposuna commit etmeyin. Ortam de\u011fi\u015fkenleri, CI\/CD s\u0131rlar\u0131 (secrets) veya HashiCorp Vault gibi s\u0131r y\u00f6netim sistemleri kullan\u0131n.<br \/>\n*   <strong>En Az Ayr\u0131cal\u0131k Prensibi:<\/strong> DNS sa\u011flay\u0131c\u0131s\u0131 API anahtarlar\u0131n\u0131za yaln\u0131zca DNS kay\u0131tlar\u0131n\u0131 y\u00f6netmek i\u00e7in gereken minimum izinleri verin. \u00d6rne\u011fin, hesap ayarlar\u0131n\u0131 de\u011fi\u015ftirebilecek veya faturaland\u0131rma bilgilerine eri\u015febilecek izinler vermeyin.<\/p>\n<h4>Delegasyon ve Alt Alan Adlar\u0131<\/h4>\n<p>OctoDNS, alt alan adlar\u0131n\u0131n y\u00f6netimini de kolayla\u015ft\u0131r\u0131r. E\u011fer <\/code>example.com<code> b\u00f6lgesini y\u00f6netiyorsan\u0131z ve <\/code>dev.example.com<code> i\u00e7in farkl\u0131 bir DNS sa\u011flay\u0131c\u0131s\u0131 veya farkl\u0131 bir OctoDNS yap\u0131land\u0131rmas\u0131 kullanmak istiyorsan\u0131z, <\/code>example.com.yaml<code> dosyas\u0131nda <\/code>dev<code> i\u00e7in bir <\/code>NS<code> kayd\u0131 olu\u015fturarak delegasyon yapabilirsiniz:<\/p>\n<pre><code class=\"language-yaml\"># zones\/example.com.yaml i\u00e7inde\ndev:\n  type: NS\n  values:\n    - ns1.dev-dns-provider.com.\n    - ns2.dev-dns-provider.com.<\/code><\/pre>\n<p>Ard\u0131ndan, <\/code>zones\/dev.example.com.yaml<code> gibi ayr\u0131 bir b\u00f6lge dosyas\u0131 olu\u015fturarak <\/code>dev.example.com<code> i\u00e7in kay\u0131tlar\u0131 y\u00f6netebilirsiniz. Bu, b\u00fcy\u00fck organizasyonlarda DNS y\u00f6netimini daha mod\u00fcler hale getirir.<\/p>\n<h4>\u00c7oklu Ortam Y\u00f6netimi<\/h4>\n<p>Geli\u015ftirme, haz\u0131rl\u0131k (staging) ve \u00fcretim ortamlar\u0131 i\u00e7in farkl\u0131 DNS kay\u0131tlar\u0131na sahip olmak yayg\u0131n bir senaryodur. Bunu y\u00f6netmek i\u00e7in birka\u00e7 yakla\u015f\u0131m vard\u0131r:<\/p>\n<p>*   <strong>Farkl\u0131 <\/code>config.yaml<code> Dosyalar\u0131:<\/strong> Her ortam i\u00e7in ayr\u0131 <\/code>config-dev.yaml<code>, <\/code>config-prod.yaml<code> dosyalar\u0131 olu\u015fturabilir ve <\/code>octodns-sync<code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131rken <\/code>--config-file<code> parametresiyle ilgili dosyay\u0131 belirtebilirsiniz.<br \/>\n*   <strong>Ko\u015fullu Mant\u0131k (OctoDNS i\u00e7inde de\u011fil, CI\/CD'de):<\/strong> CI\/CD pipeline'\u0131n\u0131zda ortam de\u011fi\u015fkenlerine g\u00f6re hangi b\u00f6lge dosyalar\u0131n\u0131n veya hangi de\u011ferlerin kullan\u0131laca\u011f\u0131n\u0131 belirleyebilirsiniz.<br \/>\n*   <strong>Farkl\u0131 Dizinler:<\/strong> <\/code>zones-dev\/<code>, <\/code>zones-prod\/<code> gibi farkl\u0131 dizinler olu\u015fturup <\/code>config.yaml<code>'daki <\/code>directory<code> parametresini ortam de\u011fi\u015fkenlerine g\u00f6re de\u011fi\u015ftirebilirsiniz.<\/p>\n<h3>Yayg\u0131n Sorun Giderme<\/h3>\n<p>*   <strong>API Kimlik Bilgileri Hatas\u0131:<\/strong> <\/code>InvalidCredentials<code> veya <\/code>Unauthorized` gibi hatalar al\u0131yorsan\u0131z, API anahtarlar\u0131n\u0131z\u0131n do\u011fru oldu\u011fundan ve ilgili DNS sa\u011flay\u0131c\u0131s\u0131nda gerekli izinlere sahip oldu\u011fundan emin olun. Ortam de\u011fi\u015fkenlerinin do\u011fru ayarland\u0131\u011f\u0131n\u0131 kontrol edin.<br \/>\n*   <strong>YAML S\u00f6zdizimi Hatas\u0131:<\/strong> YAML dosyalar\u0131ndaki girintileme veya s\u00f6zdizimi hatalar\u0131, OctoDNS'in \u00e7al\u0131\u015fmas\u0131n\u0131 engelleyebilir. Hata mesajlar\u0131n\u0131 dikkatlice okuyun ve bir YAML do\u011frulay\u0131c\u0131 (linter) kullanmay\u0131 d\u00fc\u015f\u00fcn\u00fcn.<br \/>\n*   <strong>Sa\u011flay\u0131c\u0131 H\u0131z S\u0131n\u0131rlar\u0131:<\/strong> B\u00fcy\u00fck DNS b\u00f6lgelerini senkronize ederken veya \u00e7ok say\u0131da de\u011fi\u015fiklik yaparken, DNS sa\u011flay\u0131c\u0131n\u0131z\u0131n API h\u0131z s\u0131n\u0131rlar\u0131na tak\u0131labilirsiniz. OctoDNS genellikle bu durumlar\u0131 y\u00f6netir, ancak nadiren bu t\u00fcr hatalarla kar\u015f\u0131la\u015fabilirsiniz. Genellikle yeniden deneme ile \u00e7\u00f6z\u00fcl\u00fcr.<br \/>\n*   <strong>DNS Yay\u0131l\u0131m Gecikmeleri:<\/strong> OctoDNS de\u011fi\u015fiklikleri DNS sa\u011flay\u0131c\u0131n\u0131za uygulad\u0131ktan sonra, bu de\u011fi\u015fikliklerin d\u00fcnya genelindeki DNS sunucular\u0131na yay\u0131lmas\u0131 (propagation) biraz zaman alabilir. Bu, OctoDNS'in kontrol\u00fcnde olmayan normal bir DNS davran\u0131\u015f\u0131d\u0131r.<br \/>\n*   <strong>B\u00f6lge \u00c7ak\u0131\u015fmalar\u0131:<\/strong> Ayn\u0131 b\u00f6lgeyi birden fazla OctoDNS yap\u0131land\u0131rmas\u0131yla y\u00f6netmeye \u00e7al\u0131\u015fmak veya farkl\u0131 ara\u00e7larla manuel de\u011fi\u015fiklikler yapmak \u00e7ak\u0131\u015fmalara yol a\u00e7abilir. Tek bir kontrol noktas\u0131 (OctoDNS) kullanmaya \u00f6zen g\u00f6sterin.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>OctoDNS, DNS y\u00f6netimini modern DevOps prensipleriyle uyumlu hale getiren g\u00fc\u00e7l\u00fc ve esnek bir ara\u00e7t\u0131r. Ubuntu 18.04 gibi stabil bir i\u015fletim sistemi \u00fczerinde OctoDNS'i kullanarak DNS kay\u0131tlar\u0131n\u0131z\u0131 kod olarak y\u00f6netmek, altyap\u0131n\u0131z\u0131n tutarl\u0131l\u0131\u011f\u0131n\u0131, g\u00fcvenilirli\u011fini ve otomasyon seviyesini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r.<\/p>\n<p>Bu rehberde ele ald\u0131\u011f\u0131m\u0131z ad\u0131mlar\u0131 takip ederek, OctoDNS'i kurabilir, yap\u0131land\u0131rabilir ve DNS kay\u0131tlar\u0131n\u0131z\u0131 Git tabanl\u0131 bir i\u015f ak\u0131\u015f\u0131yla y\u00f6netmeye ba\u015flayabilirsiniz. Altyap\u0131 Kod Olarak (IaC) yakla\u015f\u0131m\u0131n\u0131 DNS y\u00f6netimine entegre etmek, manuel hatalar\u0131 azalt\u0131rken, de\u011fi\u015fiklikleri izlenebilir, tekrarlanabilir ve i\u015f birli\u011fine a\u00e7\u0131k hale getirir. CI\/CD entegrasyonu ile bu s\u00fcreci tamamen otomatikle\u015ftirerek, DNS y\u00f6netimini geli\u015ftirme ve da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizin sorunsuz bir par\u00e7as\u0131 haline getirebilirsiniz. DNS y\u00f6netiminde bu modern yakla\u015f\u0131m\u0131 benimseyerek, altyap\u0131n\u0131z\u0131n temel bir bile\u015fenini daha sa\u011flam ve y\u00f6netilebilir hale getireceksiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi\nDNS (Alan Ad\u0131 Sistemi) y\u00f6netimi, modern altyap\u0131lar\u0131n temel ta\u015fl","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":[1468],"tags":[],"class_list":{"0":"post-38021","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-ubuntu","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>OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi - 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\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi\" \/>\n<meta property=\"og:description\" content=\"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi DNS (Alan Ad\u0131 Sistemi) y\u00f6netimi, modern altyap\u0131lar\u0131n temel ta\u015fl\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-21T12:40:55+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=\"20 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi\",\"datePublished\":\"2026-01-21T12:40:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/\"},\"wordCount\":2768,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Ubuntu\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/\",\"name\":\"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-01-21T12:40:55+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi\"}]},{\"@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":"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi - 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\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi","og_description":"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi DNS (Alan Ad\u0131 Sistemi) y\u00f6netimi, modern altyap\u0131lar\u0131n temel ta\u015fl","og_url":"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-01-21T12:40:55+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"20 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi","datePublished":"2026-01-21T12:40:55+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/"},"wordCount":2768,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Ubuntu"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/","name":"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-01-21T12:40:55+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/octodns-ile-dns-yonetimi-ubuntu-18-04-uzerinde-dagitim-ve-yonetim-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"OctoDNS ile DNS Y\u00f6netimi: Ubuntu 18.04 \u00dczerinde Da\u011f\u0131t\u0131m ve Y\u00f6netim Rehberi"}]},{"@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\/38021","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=38021"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38021\/revisions"}],"predecessor-version":[{"id":38022,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/38021\/revisions\/38022"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=38021"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=38021"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=38021"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}