{"id":40235,"date":"2026-02-25T16:40:53","date_gmt":"2026-02-25T13:40:53","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=40235"},"modified":"2026-02-25T16:40:53","modified_gmt":"2026-02-25T13:40:53","slug":"digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/","title":{"rendered":"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma"},"content":{"rendered":"<p><body><\/p>\n<h2>DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma<\/h2>\n<p>DigitalOcean gibi bulut sa\u011flay\u0131c\u0131lar\u0131nda sunucu kurulumlar\u0131 ve yap\u0131land\u0131rmalar\u0131, zaman al\u0131c\u0131 ve hataya a\u00e7\u0131k s\u00fcre\u00e7ler olabilir. \u00d6zellikle birden fazla sunucu da\u011f\u0131tman\u0131z gerekti\u011finde, her birini manuel olarak yap\u0131land\u0131rmak, tutars\u0131zl\u0131klara ve verimsizli\u011fe yol a\u00e7ar. \u0130\u015fte bu noktada otomasyon ara\u00e7lar\u0131 devreye girer. HashiCorp&#8217;un Packer arac\u0131, bu t\u00fcr senaryolar i\u00e7in g\u00fc\u00e7l\u00fc bir \u00e7\u00f6z\u00fcm sunarak, farkl\u0131 bulut platformlar\u0131nda ve sanalla\u015ft\u0131rma ortamlar\u0131nda tekrarlanabilir makine imajlar\u0131 olu\u015fturman\u0131z\u0131 sa\u011flar. Bu makalede, DigitalOcean \u00fczerinde Ubuntu 16.04 tabanl\u0131, \u00f6nceden yap\u0131land\u0131r\u0131lm\u0131\u015f anl\u0131k g\u00f6r\u00fcnt\u00fcler (snapshots) olu\u015fturmak i\u00e7in Packer&#8217;\u0131 nas\u0131l kullanaca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m ele alaca\u011f\u0131z.<\/p>\n<h3>Giri\u015f: Neden Packer ve Anl\u0131k G\u00f6r\u00fcnt\u00fcler?<\/h3>\n<p>Modern DevOps ve bulut altyap\u0131lar\u0131nda, &#8220;altyap\u0131y\u0131 kod olarak&#8221; (Infrastructure as Code &#8211; IaC) y\u00f6netmek temel bir prensiptir. Bu prensibin \u00f6nemli bir par\u00e7as\u0131 da, sunucu imajlar\u0131n\u0131 ve yap\u0131land\u0131rmalar\u0131n\u0131 otomatik ve tutarl\u0131 bir \u015fekilde olu\u015fturabilmektir.<\/p>\n<p>Anl\u0131k g\u00f6r\u00fcnt\u00fcler (snapshots), bir sunucunun belirli bir zamandaki tam kopyas\u0131d\u0131r. Bu kopyalar, felaket kurtarma senaryolar\u0131nda, h\u0131zl\u0131 da\u011f\u0131t\u0131mda veya test\/geli\u015ftirme ortamlar\u0131n\u0131n tutarl\u0131 bir \u015fekilde \u00e7o\u011falt\u0131lmas\u0131nda hayati bir rol oynar. DigitalOcean&#8217;da manuel olarak anl\u0131k g\u00f6r\u00fcnt\u00fc almak m\u00fcmk\u00fcn olsa da, bu i\u015flem sunucu kurulumu ve yap\u0131land\u0131rmas\u0131 ad\u0131mlar\u0131n\u0131 otomatikle\u015ftirmeyi i\u00e7ermez.<\/p>\n<p>Packer, i\u015fte bu bo\u015flu\u011fu doldurur. Tek bir yap\u0131land\u0131rma dosyas\u0131 (JSON format\u0131nda), farkl\u0131 platformlar i\u00e7in makine imajlar\u0131 olu\u015fturman\u0131za olanak tan\u0131r. DigitalOcean \u00f6zelinde, Packer, bir Droplet olu\u015fturur, \u00fczerine istedi\u011finiz yaz\u0131l\u0131mlar\u0131 y\u00fckler, gerekli yap\u0131land\u0131rmalar\u0131 yapar ve ard\u0131ndan bu Droplet&#8217;in bir anl\u0131k g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc alarak Droplet&#8217;i otomatik olarak siler. Bu s\u00fcre\u00e7, size her zaman ayn\u0131 ba\u015flang\u0131\u00e7 durumuna sahip, g\u00fcncel ve yap\u0131land\u0131r\u0131lm\u0131\u015f bir temel imaj sa\u011flar.<\/p>\n<p>Bu makalenin sonunda, Packer kullanarak DigitalOcean \u00fczerinde Ubuntu 16.04 tabanl\u0131, \u00f6zel anl\u0131k g\u00f6r\u00fcnt\u00fcler olu\u015fturma becerisine sahip olacaks\u0131n\u0131z. Ubuntu 16.04&#8217;\u00fcn art\u0131k uzun s\u00fcreli destek (LTS) kapsam\u0131nda olmad\u0131\u011f\u0131n\u0131 ve g\u00fcvenlik g\u00fcncellemeleri almad\u0131\u011f\u0131n\u0131 belirtmek \u00f6nemlidir; ancak bu makale, talep edilen spesifik senaryoyu ele almak i\u00e7in yaz\u0131lm\u0131\u015ft\u0131r. \u00dcretim ortamlar\u0131nda her zaman g\u00fcncel ve desteklenen i\u015fletim sistemi s\u00fcr\u00fcmlerini kullanman\u0131z \u015fiddetle tavsiye edilir.<\/p>\n<h3>\u00d6n Ko\u015fullar<\/h3>\n<p>Packer ile DigitalOcean \u00fczerinde anl\u0131k g\u00f6r\u00fcnt\u00fcler olu\u015fturmaya ba\u015flamadan \u00f6nce, baz\u0131 temel gereksinimleri kar\u015f\u0131laman\u0131z gerekmektedir:<\/p>\n<p>*   <strong>Bir DigitalOcean Hesab\u0131:<\/strong> Anl\u0131k g\u00f6r\u00fcnt\u00fcleri olu\u015fturmak ve y\u00f6netmek i\u00e7in aktif bir DigitalOcean hesab\u0131n\u0131z olmal\u0131d\u0131r.<br \/>\n*   <strong>DigitalOcean API Token&#8217;\u0131:<\/strong> Packer&#8217;\u0131n DigitalOcean hesab\u0131n\u0131zla etkile\u015fim kurabilmesi i\u00e7in bir API token&#8217;\u0131na ihtiyac\u0131n\u0131z olacak. Bu token&#8217;\u0131n &#8220;Oku ve Yaz&#8221; (Read and Write) yetkisine sahip olmas\u0131 gerekmektedir.<br \/>\n*   <strong>Packer Kurulumu:<\/strong> Packer&#8217;\u0131, anl\u0131k g\u00f6r\u00fcnt\u00fc olu\u015fturma i\u015flemini ba\u015flataca\u011f\u0131n\u0131z yerel makinenize veya bir sunucuya kurmu\u015f olman\u0131z gerekmektedir. Bu makale, Ubuntu 16.04 \u00fczerinde Packer kurulumunu g\u00f6sterecektir, ancak Packer \u00e7o\u011fu i\u015fletim sisteminde \u00e7al\u0131\u015f\u0131r.<br \/>\n*   <strong><code>unzip<\/code> ve <code>jq<\/code> (\u0130ste\u011fe Ba\u011fl\u0131 ama Faydal\u0131):<\/strong> Packer kurulumu i\u00e7in <code>unzip<\/code>, JSON \u00e7\u0131kt\u0131lar\u0131n\u0131 daha kolay okumak ve i\u015flemek i\u00e7in <code>jq<\/code> (JSON query processor) faydal\u0131 ara\u00e7lard\u0131r. Bu ara\u00e7lar\u0131n y\u00fckl\u00fc olmas\u0131 \u00f6nerilir.<\/p>\n<p>Bu \u00f6n ko\u015fullar\u0131 sa\u011flad\u0131ktan sonra, Packer ile DigitalOcean entegrasyonuna ge\u00e7ebiliriz.<\/p>\n<h3>Packer&#8217;\u0131 Anlamak: Temel Bile\u015fenler<\/h3>\n<p>Packer, makine imajlar\u0131 olu\u015fturmak i\u00e7in \u00fc\u00e7 ana bile\u015feni kullan\u0131r: Builders, Provisioners ve Post-Processors.<\/p>\n<h4>Builders (\u0130n\u015fa Ediciler)<\/h4>\n<p>Builders, Packer&#8217;\u0131n bir imaj olu\u015fturmak i\u00e7in kulland\u0131\u011f\u0131 temel platforma \u00f6zg\u00fc bile\u015fenlerdir. Her builder, belirli bir bulut sa\u011flay\u0131c\u0131s\u0131 (AWS, Google Cloud, DigitalOcean), sanalla\u015ft\u0131rma platformu (VirtualBox, VMware) veya container teknolojisi (Docker) ile etkile\u015fim kurar. DigitalOcean i\u00e7in <code>digitalocean<\/code> builder&#8217;\u0131n\u0131 kullanaca\u011f\u0131z. Bu builder, DigitalOcean API&#8217;sini kullanarak ge\u00e7ici bir Droplet olu\u015fturur, \u00fczerinde i\u015flemleri ger\u00e7ekle\u015ftirir ve ard\u0131ndan bir anl\u0131k g\u00f6r\u00fcnt\u00fc alarak Droplet&#8217;i siler.<\/p>\n<h4>Provisioners (Sa\u011flay\u0131c\u0131lar)<\/h4>\n<p>Provisioners, bir builder taraf\u0131ndan olu\u015fturulan ge\u00e7ici makine \u00fczerinde yaz\u0131l\u0131m y\u00fckleme, yap\u0131land\u0131rma, dosya kopyalama veya komut \u00e7al\u0131\u015ft\u0131rma gibi i\u015flemleri ger\u00e7ekle\u015ftiren ara\u00e7lard\u0131r. \u00d6rne\u011fin, bir <code>shell<\/code> provisioner&#8217;\u0131 kullanarak <code>apt update<\/code>, <code>apt install nginx<\/code> gibi komutlar\u0131 \u00e7al\u0131\u015ft\u0131rabilir veya <code>file<\/code> provisioner&#8217;\u0131 ile yerel bir dosyay\u0131 uzak makineye kopyalayabilirsiniz. Birden fazla provisioner s\u0131rayla \u00e7al\u0131\u015ft\u0131r\u0131labilir.<\/p>\n<h4>Post-Processors (\u0130\u015flem Sonras\u0131 \u0130\u015fleyiciler)<\/h4>\n<p>Post-processors, bir imaj olu\u015fturulduktan sonra ek i\u015flemler yapmak i\u00e7in kullan\u0131l\u0131r. \u00d6rne\u011fin, bir imaj\u0131 farkl\u0131 bir formata d\u00f6n\u00fc\u015ft\u00fcrebilir (\u00f6rne\u011fin, Vagrant kutusu olu\u015fturmak), ba\u015fka bir bulut platformuna y\u00fckleyebilir veya testler \u00e7al\u0131\u015ft\u0131rabilir. DigitalOcean anl\u0131k g\u00f6r\u00fcnt\u00fcleri olu\u015fturma senaryosunda genellikle do\u011frudan post-processor&#8217;a ihtiya\u00e7 duyulmaz, \u00e7\u00fcnk\u00fc ana hedef zaten bir anl\u0131k g\u00f6r\u00fcnt\u00fcd\u00fcr. Ancak, daha karma\u015f\u0131k i\u015f ak\u0131\u015flar\u0131nda faydal\u0131 olabilirler.<\/p>\n<p>Packer&#8217;\u0131n g\u00fcc\u00fc, bu bile\u015fenleri tek bir JSON yap\u0131land\u0131rma dosyas\u0131nda birle\u015ftirerek, farkl\u0131 ortamlar i\u00e7in tutarl\u0131 ve tekrarlanabilir imajlar olu\u015fturma yetene\u011finden gelir.<\/p>\n<h3>DigitalOcean API Token Olu\u015fturma<\/h3>\n<p>Packer&#8217;\u0131n DigitalOcean hesab\u0131n\u0131zla g\u00fcvenli bir \u015fekilde ileti\u015fim kurabilmesi i\u00e7in bir API token&#8217;\u0131na ihtiyac\u0131n\u0131z var. Bu token&#8217;\u0131 olu\u015fturmak i\u00e7in a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izleyin:<\/p>\n<p>1.  <strong>DigitalOcean Hesab\u0131n\u0131za Giri\u015f Yap\u0131n:<\/strong> Taray\u0131c\u0131n\u0131zdan DigitalOcean kontrol paneline gidin ve kullan\u0131c\u0131 ad\u0131n\u0131z ve \u015fifrenizle giri\u015f yap\u0131n.<br \/>\n2.  <strong>API B\u00f6l\u00fcm\u00fcne Gidin:<\/strong> Sol men\u00fcde &#8220;API&#8221; se\u00e7ene\u011fini bulun ve t\u0131klay\u0131n.<br \/>\n3.  <strong>Yeni Token Olu\u015fturun:<\/strong> &#8220;Tokens\/Keys&#8221; sekmesinde &#8220;Generate New Token&#8221; d\u00fc\u011fmesine t\u0131klay\u0131n.<br \/>\n4.  <strong>Token Bilgilerini Girin:<\/strong><br \/>\n    *   <strong>Token Name:<\/strong> Token&#8217;a a\u00e7\u0131klay\u0131c\u0131 bir isim verin (\u00f6rn. <code>packer-snapshot-token<\/code>).<br \/>\n    *   <strong>Select Scopes:<\/strong> &#8220;Read&#8221; ve &#8220;Write&#8221; se\u00e7eneklerinin her ikisini de i\u015faretleyin. Packer&#8217;\u0131n Droplet olu\u015fturmas\u0131 ve silmesi, ayr\u0131ca anl\u0131k g\u00f6r\u00fcnt\u00fc almas\u0131 i\u00e7in yazma yetkisine ihtiyac\u0131 vard\u0131r.<br \/>\n5.  <strong>Token&#8217;\u0131 Olu\u015fturun:<\/strong> &#8220;Generate Token&#8221; d\u00fc\u011fmesine t\u0131klay\u0131n.<br \/>\n6.  <strong>Token&#8217;\u0131 Kopyalay\u0131n ve G\u00fcvenle Saklay\u0131n:<\/strong> Olu\u015fturulan token&#8217;\u0131 ekranda g\u00f6receksiniz. Bu token&#8217;\u0131 kopyalay\u0131n ve g\u00fcvenli bir yere kaydedin. <strong>Bu token&#8217;\u0131 bir daha g\u00f6remeyeceksiniz, bu y\u00fczden hemen kopyalad\u0131\u011f\u0131n\u0131zdan emin olun.<\/strong> Bu token, hesab\u0131n\u0131za tam eri\u015fim sa\u011flar, bu y\u00fczden kesinlikle gizli tutulmal\u0131d\u0131r.<\/p>\n<p><strong>G\u00fcvenlik Notu:<\/strong> API token&#8217;\u0131n\u0131z\u0131 asla do\u011frudan Packer \u015fablon dosyan\u0131za yazmay\u0131n. Bunun yerine, token&#8217;\u0131 bir \u00e7evre de\u011fi\u015fkeni olarak ayarlamak en iyi pratiktir. Bu, hassas bilgilerin versiyon kontrol sistemlerine girmesini engeller ve g\u00fcvenli\u011fi art\u0131r\u0131r.<\/p>\n<p>\u00d6rne\u011fin, Linux tabanl\u0131 sistemlerde token&#8217;\u0131 \u015fu \u015fekilde ayarlayabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">export DO_API_TOKEN=\"sizin_digitalocean_api_token'\u0131n\u0131z\"<\/code><\/pre>\n<p>Bu komutu, Packer&#8217;\u0131 \u00e7al\u0131\u015ft\u0131raca\u011f\u0131n\u0131z terminal oturumunda \u00e7al\u0131\u015ft\u0131rman\u0131z gerekmektedir. Kal\u0131c\u0131 yapmak isterseniz, <code>.bashrc<\/code> veya <code>.zshrc<\/code> dosyan\u0131za ekleyebilirsiniz.<\/p>\n<h3>Packer Kurulumu (Ubuntu 16.04 \u00dczerinde)<\/h3>\n<p>Packer&#8217;\u0131 Ubuntu 16.04 sisteminize kurmak olduk\u00e7a basittir. Packer, \u00f6nceden derlenmi\u015f ikili dosyalar olarak da\u011f\u0131t\u0131l\u0131r.<\/p>\n<p>1.  <strong>Gerekli Paketleri Y\u00fckleyin:<\/strong><br \/>\n    \u00d6ncelikle, Packer ikili dosyas\u0131n\u0131 indirmek ve a\u00e7mak i\u00e7in <code>curl<\/code> ve <code>unzip<\/code> gibi temel ara\u00e7lara ihtiyac\u0131n\u0131z olabilir. Terminali a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo apt update\n    sudo apt install -y curl unzip<\/code><\/pre>\n<p>2.  <strong>Packer&#8217;\u0131 \u0130ndirin:<\/strong><br \/>\n    HashiCorp&#8217;un resmi web sitesinden en son Packer s\u00fcr\u00fcm\u00fcn\u00fc indirin. S\u00fcr\u00fcm numaras\u0131n\u0131 kontrol etmek i\u00e7in [https:\/\/www.packer.io\/downloads](https:\/\/www.packer.io\/downloads) adresini ziyaret edebilirsiniz. Bu makale yaz\u0131ld\u0131\u011f\u0131 s\u0131rada mevcut olan bir s\u00fcr\u00fcm\u00fc \u00f6rnek alarak devam edelim (\u00f6rne\u011fin, 1.7.10):<\/p>\n<pre><code class=\"language-bash\">PACKER_VERSION=\"1.7.10\" # Mevcut en son s\u00fcr\u00fcm\u00fc kontrol edin\n    curl -LO https:\/\/releases.hashicorp.com\/packer\/${PACKER_VERSION}\/packer_${PACKER_VERSION}_linux_amd64.zip<\/code><\/pre>\n<p>3.  <strong>Packer&#8217;\u0131 Kurun:<\/strong><br \/>\n    \u0130ndirdi\u011finiz ZIP dosyas\u0131n\u0131 a\u00e7\u0131n ve <code>packer<\/code> ikili dosyas\u0131n\u0131 sisteminizin <code>PATH<\/code>&#8216;inde bulunan bir dizine ta\u015f\u0131y\u0131n (\u00f6rne\u011fin, <code>\/usr\/local\/bin<\/code>).<\/p>\n<pre><code class=\"language-bash\">unzip packer_${PACKER_VERSION}_linux_amd64.zip\n    sudo mv packer \/usr\/local\/bin\/<\/code><\/pre>\n<p>4.  <strong>Kurulumu Do\u011frulay\u0131n:<\/strong><br \/>\n    Kurulumun ba\u015far\u0131l\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in <code>packer --version<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">packer --version<\/code><\/pre>\n<p>    E\u011fer terminalde Packer s\u00fcr\u00fcm numaras\u0131n\u0131 g\u00f6r\u00fcyorsan\u0131z, kurulum ba\u015far\u0131l\u0131 demektir.<\/p>\n<pre><code class=\"language-\">1.7.10<\/code><\/pre>\n<p>Art\u0131k Packer sisteminize y\u00fckl\u00fc ve DigitalOcean API token&#8217;\u0131n\u0131z haz\u0131r. Bir sonraki ad\u0131m, anl\u0131k g\u00f6r\u00fcnt\u00fc olu\u015fturmak i\u00e7in Packer \u015fablon dosyas\u0131n\u0131 haz\u0131rlamakt\u0131r.<\/p>\n<h3>Packer \u015eablonu Olu\u015fturma (DigitalOcean i\u00e7in)<\/h3>\n<p>Packer \u015fablonlar\u0131, JSON format\u0131nda yaz\u0131l\u0131r ve Packer&#8217;a ne yapmas\u0131 gerekti\u011fini anlat\u0131r. <code>digitalocean.json<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m ve i\u00e7eri\u011fini ad\u0131m ad\u0131m doldural\u0131m.<\/p>\n<pre><code class=\"language-json\">{\n  \"variables\": {\n    \"do_api_token\": \"{{env <code>DO_API_TOKEN<\/code>}}\",\n    \"snapshot_name_prefix\": \"ubuntu-1604-base\",\n    \"region\": \"fra1\",\n    \"size\": \"s-1vcpu-1gb\",\n    \"ssh_username\": \"root\",\n    \"image\": \"ubuntu-16-04-x64\"\n  },\n  \"builders\": [\n    {\n      \"type\": \"digitalocean\",\n      \"api_token\": \"{{user <code>do_api_token<\/code>}}\",\n      \"image\": \"{{user <code>image<\/code>}}\",\n      \"region\": \"{{user <code>region<\/code>}}\",\n      \"size\": \"{{user <code>size<\/code>}}\",\n      \"ssh_username\": \"{{user <code>ssh_username<\/code>}}\",\n      \"snapshot_name\": \"{{user <code>snapshot_name_prefix<\/code>}}-{{timestamp}}\",\n      \"tags\": [\"packer\", \"ubuntu-1604\", \"base-image\"]\n    }\n  ],\n  \"provisioners\": [\n    {\n      \"type\": \"shell\",\n      \"inline\": [\n        \"echo 'Updating system...' && sudo apt update -y\",\n        \"echo 'Upgrading system...' && sudo apt upgrade -y\",\n        \"echo 'Installing essential packages...' && sudo apt install -y build-essential git curl wget vim htop net-tools\",\n        \"echo 'Cleaning up apt cache...' && sudo apt autoremove -y && sudo apt clean\",\n        \"echo 'Removing SSH host keys...' && sudo rm -f \/etc\/ssh\/ssh_host_*\",\n        \"echo 'Removing logs...' && sudo find \/var\/log -type f -delete\",\n        \"echo 'Zeroing out free space for better compression...' && sudo dd if=\/dev\/zero of=\/EMPTY bs=1M || true\",\n        \"echo 'Removing zero fill file...' && sudo rm -f \/EMPTY\",\n        \"echo 'Packer build complete!'\"\n      ]\n    },\n    {\n      \"type\": \"shell\",\n      \"execute_command\": \"chmod +x {{.Path}}; {{.Vars}} sudo -E {{.Path}}\",\n      \"script\": \"scripts\/cleanup_cloud_init.sh\"\n    }\n  ]\n}<\/code><\/pre>\n<p>\u015eimdi bu \u015fablonun her bir b\u00f6l\u00fcm\u00fcn\u00fc ayr\u0131nt\u0131l\u0131 olarak inceleyelim:<\/p>\n<h4><code>variables<\/code> Blo\u011fu<\/h4>\n<p>Bu blok, \u015fablonunuzu daha esnek ve yeniden kullan\u0131labilir hale getirmek i\u00e7in de\u011fi\u015fkenler tan\u0131mlaman\u0131za olanak tan\u0131r.<\/p>\n<p>*   <code>\"do_api_token\": \"{{env <\/code>DO_API_TOKEN<code>}}\"<\/code>: DigitalOcean API token&#8217;\u0131n\u0131 bir \u00e7evre de\u011fi\u015fkeninden (<code>DO_API_TOKEN<\/code>) al\u0131r. <strong>Bu, hassas bilgileri do\u011frudan \u015fablonda tutmamak i\u00e7in kritik bir g\u00fcvenlik uygulamas\u0131d\u0131r.<\/strong><br \/>\n*   <code>\"snapshot_name_prefix\": \"ubuntu-1604-base\"<\/code>: Olu\u015fturulacak anl\u0131k g\u00f6r\u00fcnt\u00fcn\u00fcn ad\u0131n\u0131n \u00f6n ekini belirler.<br \/>\n*   <code>\"region\": \"fra1\"<\/code>: Droplet&#8217;in olu\u015fturulaca\u011f\u0131 DigitalOcean b\u00f6lgesini belirtir (\u00f6rne\u011fin, Frankfurt).<br \/>\n*   <code>\"size\": \"s-1vcpu-1gb\"<\/code>: Droplet i\u00e7in kullan\u0131lacak boyutu belirtir. Bu, en k\u00fc\u00e7\u00fck ve en uygun maliyetli Droplet boyutlar\u0131ndan biridir.<br \/>\n*   <code>\"ssh_username\": \"root\"<\/code>: Packer&#8217;\u0131n Droplet&#8217;e SSH ile ba\u011flanmak i\u00e7in kullanaca\u011f\u0131 kullan\u0131c\u0131 ad\u0131d\u0131r. Ubuntu&#8217;da varsay\u0131lan olarak <code>root<\/code> kullan\u0131c\u0131 ile ba\u011flan\u0131l\u0131r.<br \/>\n*   <code>\"image\": \"ubuntu-16-04-x64\"<\/code>: Temel olarak kullan\u0131lacak DigitalOcean imaj\u0131n\u0131 belirtir. Bu, Ubuntu 16.04&#8217;\u00fcn 64-bit s\u00fcr\u00fcm\u00fcd\u00fcr.<\/p>\n<h4><code>builders<\/code> Blo\u011fu<\/h4>\n<p>Bu blok, DigitalOcean \u00fczerinde anl\u0131k g\u00f6r\u00fcnt\u00fc olu\u015fturmak i\u00e7in <code>digitalocean<\/code> builder&#8217;\u0131n\u0131 yap\u0131land\u0131r\u0131r.<\/p>\n<p>*   <code>\"type\": \"digitalocean\"<\/code>: Kullan\u0131lacak builder tipini belirtir.<br \/>\n*   <code>\"api_token\": \"{{user <\/code>do_api_token<code>}}\"<\/code>: <code>variables<\/code> blo\u011funda tan\u0131mlanan <code>do_api_token<\/code> de\u011fi\u015fkenini kullan\u0131r.<br \/>\n*   <code>\"image\": \"{{user <\/code>image<code>}}\"<\/code>: <code>variables<\/code> blo\u011funda tan\u0131mlanan temel imaj\u0131 kullan\u0131r.<br \/>\n*   <code>\"region\": \"{{user <\/code>region<code>}}\"<\/code>: <code>variables<\/code> blo\u011funda tan\u0131mlanan b\u00f6lgeyi kullan\u0131r.<br \/>\n*   <code>\"size\": \"{{user <\/code>size<code>}}\"<\/code>: <code>variables<\/code> blo\u011funda tan\u0131mlanan Droplet boyutunu kullan\u0131r.<br \/>\n*   <code>\"ssh_username\": \"{{user <\/code>ssh_username<code>}}\"<\/code>: <code>variables<\/code> blo\u011funda tan\u0131mlanan SSH kullan\u0131c\u0131 ad\u0131n\u0131 kullan\u0131r.<br \/>\n*   <code>\"snapshot_name\": \"{{user <\/code>snapshot_name_prefix<code>}}-{{timestamp}}\"<\/code>: Olu\u015fturulacak anl\u0131k g\u00f6r\u00fcnt\u00fcn\u00fcn ad\u0131n\u0131 dinamik olarak belirler. <code>{{timestamp}}<\/code> ifadesi, anl\u0131k g\u00f6r\u00fcnt\u00fcn\u00fcn ad\u0131n\u0131n sonuna o anki Unix zaman damgas\u0131n\u0131 ekleyerek benzersiz olmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <code>\"tags\": [\"packer\", \"ubuntu-1604\", \"base-image\"]<\/code>: Olu\u015fturulan Droplet&#8217;e ve dolay\u0131s\u0131yla anl\u0131k g\u00f6r\u00fcnt\u00fcye etiketler ekler. Bu, DigitalOcean panelinde kaynaklar\u0131 organize etmek i\u00e7in faydal\u0131d\u0131r.<\/p>\n<h4><code>provisioners<\/code> Blo\u011fu<\/h4>\n<p>Bu blok, ge\u00e7ici Droplet \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131lacak komutlar\u0131 ve betikleri tan\u0131mlar. Amac\u0131m\u0131z, temel bir Ubuntu 16.04 sistemini g\u00fcncelleyip temizlemek ve baz\u0131 temel ara\u00e7lar\u0131 y\u00fcklemektir.<\/p>\n<p>*   <strong>\u0130lk <code>shell<\/code> provisioner&#8217;\u0131 (<code>inline<\/code> komutlar):<\/strong><br \/>\n    *   <code>sudo apt update -y<\/code>: Paket listelerini g\u00fcnceller.<br \/>\n    *   <code>sudo apt upgrade -y<\/code>: Y\u00fckl\u00fc paketleri en son s\u00fcr\u00fcmlerine y\u00fckseltir.<br \/>\n    *   <code>sudo apt install -y build-essential git curl wget vim htop net-tools<\/code>: Geli\u015ftirme ve sistem y\u00f6netimi i\u00e7in baz\u0131 temel paketleri y\u00fckler.<br \/>\n    *   <code>sudo apt autoremove -y && sudo apt clean<\/code>: Gereksiz paketleri kald\u0131r\u0131r ve apt \u00f6nbelle\u011fini temizler. Bu, anl\u0131k g\u00f6r\u00fcnt\u00fcn\u00fcn boyutunu k\u00fc\u00e7\u00fcltmeye yard\u0131mc\u0131 olur.<br \/>\n    <em>   <code>sudo rm -f \/etc\/ssh\/ssh_host_<\/em><\/code>: Droplet&#8217;e \u00f6zg\u00fc SSH anahtarlar\u0131n\u0131 siler. Bu, bu anl\u0131k g\u00f6r\u00fcnt\u00fcden olu\u015fturulan her yeni Droplet&#8217;in kendi benzersiz anahtarlar\u0131n\u0131 olu\u015fturmas\u0131n\u0131 sa\u011flar ve g\u00fcvenlik i\u00e7in \u00f6nemlidir.<br \/>\n    *   <code>sudo find \/var\/log -type f -delete<\/code>: T\u00fcm log dosyalar\u0131n\u0131 siler.<br \/>\n    *   <code>sudo dd if=\/dev\/zero of=\/EMPTY bs=1M || true<\/code> ve <code>sudo rm -f \/EMPTY<\/code>: Bu ad\u0131mlar, diskteki bo\u015f alan\u0131 s\u0131f\u0131rlarla doldurur ve ard\u0131ndan bu dosyay\u0131 siler. Bu i\u015flem, baz\u0131 sanalla\u015ft\u0131rma platformlar\u0131nda (DigitalOcean i\u00e7in do\u011frudan bir etkisi olmasa da genel bir iyi uygulama olarak kabul edilir) disk imaj\u0131n\u0131n daha iyi s\u0131k\u0131\u015ft\u0131r\u0131lmas\u0131na yard\u0131mc\u0131 olabilir.<br \/>\n    *   <code>echo 'Packer build complete!'<\/code>: \u0130\u015flemin tamamland\u0131\u011f\u0131n\u0131 belirten bir mesaj.<\/p>\n<p>*   <strong>\u0130kinci <code>shell<\/code> provisioner&#8217;\u0131 (<code>script<\/code> kullan\u0131m\u0131):<\/strong><br \/>\n    Bu \u00f6rnekte, <code>scripts\/cleanup_cloud_init.sh<\/code> ad\u0131nda harici bir betik \u00e7al\u0131\u015ft\u0131rmak i\u00e7in <code>script<\/code> provisioner&#8217;\u0131 kullan\u0131lm\u0131\u015ft\u0131r. <code>execute_command<\/code> ise beti\u011fin nas\u0131l \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 belirtir.<\/p>\n<p>    <strong><code>scripts\/cleanup_cloud_init.sh<\/code> i\u00e7eri\u011fi (\u00f6rnek):<\/strong><\/p>\n<pre><code class=\"language-bash\">#!\/bin\/bash\n\n    # Cloud-init'in sonraki boot'larda yeniden \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in temizlik\n    # Bu, yeni Droplet'lerin ilk a\u00e7\u0131l\u0131\u015fta kendi yap\u0131land\u0131rmalar\u0131n\u0131 almas\u0131n\u0131 sa\u011flar.\n    sudo rm -rf \/var\/lib\/cloud\/instances\/*\n    sudo rm -f \/var\/lib\/cloud\/instance-id\n    sudo rm -f \/etc\/cloud\/cloud.cfg.d\/50-curtin-networking.cfg\n    sudo rm -f \/etc\/cloud\/cloud.cfg.d\/50-installer-cfg.cfg\n    sudo rm -f \/etc\/netplan\/*.yaml # Ubuntu 18.04+ i\u00e7in, 16.04'te farkl\u0131 olabilir\n    sudo truncate -s 0 \/etc\/machine-id\n    sudo rm -f \/var\/log\/cloud-init-output.log\n    sudo rm -f \/var\/log\/cloud-init.log\n\n    # Ge\u00e7ici dosyalar\u0131 temizle\n    sudo rm -rf \/tmp\/*\n    sudo rm -rf \/var\/tmp\/*\n\n    # Komut ge\u00e7mi\u015fini sil\n    history -c\n    unset HISTFILE\n\n    echo \"Cloud-init cleanup complete.\"<\/code><\/pre>\n<p>    Bu beti\u011fi, Packer \u015fablonunuzla ayn\u0131 dizinde <code>scripts<\/code> ad\u0131nda bir klas\u00f6r olu\u015fturup i\u00e7ine kaydetmeniz gerekmektedir. <code>cloud-init<\/code> temizli\u011fi, bu anl\u0131k g\u00f6r\u00fcnt\u00fcden olu\u015fturulacak yeni Droplet&#8217;lerin ilk a\u00e7\u0131l\u0131\u015fta d\u00fczg\u00fcn bir \u015fekilde ba\u015flat\u0131lmas\u0131n\u0131 ve kendi benzersiz kimliklerini almas\u0131n\u0131 sa\u011flar.<\/p>\n<p>Bu \u015fablon, temel bir Ubuntu 16.04 anl\u0131k g\u00f6r\u00fcnt\u00fcs\u00fc olu\u015fturmak i\u00e7in iyi bir ba\u015flang\u0131\u00e7 noktas\u0131d\u0131r. \u0130htiya\u00e7lar\u0131n\u0131za g\u00f6re <code>provisioners<\/code> blo\u011funa daha fazla yaz\u0131l\u0131m y\u00fckleme veya yap\u0131land\u0131rma ad\u0131m\u0131 ekleyebilirsiniz.<\/p>\n<h3>Packer \u015eablonunu \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>\u015eablon dosyan\u0131z\u0131 (<code>digitalocean.json<\/code>) ve varsa betik dosyan\u0131z\u0131 (<code>scripts\/cleanup_cloud_init.sh<\/code>) haz\u0131rlad\u0131ktan sonra, Packer&#8217;\u0131 \u00e7al\u0131\u015ft\u0131rmaya haz\u0131rs\u0131n\u0131z.<\/p>\n<p>1.  <strong>API Token&#8217;\u0131 Ayarlay\u0131n:<\/strong><br \/>\n    Terminalinizde, daha \u00f6nce olu\u015fturdu\u011funuz DigitalOcean API token&#8217;\u0131n\u0131 \u00e7evre de\u011fi\u015fkeni olarak ayarlay\u0131n:<\/p>\n<pre><code class=\"language-bash\">export DO_API_TOKEN=\"sizin_digitalocean_api_token'\u0131n\u0131z\"<\/code><\/pre>\n<p>2.  <strong>\u015eablonu Do\u011frulay\u0131n:<\/strong><br \/>\n    Packer \u015fablonunuzda herhangi bir s\u00f6zdizimi hatas\u0131 olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek i\u00e7in <code>packer validate<\/code> komutunu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">packer validate digitalocean.json<\/code><\/pre>\n<p>    E\u011fer &#8220;Template validated successfully.&#8221; mesaj\u0131n\u0131 al\u0131rsan\u0131z, \u015fablonunuz do\u011fru yap\u0131land\u0131r\u0131lm\u0131\u015f demektir. Herhangi bir hata durumunda, Packer size hatan\u0131n nerede oldu\u011funu belirten mesajlar g\u00f6sterecektir.<\/p>\n<p>3.  <strong>Packer Derlemesini Ba\u015flat\u0131n:<\/strong><br \/>\n    \u015eimdi as\u0131l i\u015flemi ba\u015flatmak i\u00e7in <code>packer build<\/code> komutunu kullan\u0131n:<\/p>\n<pre><code class=\"language-bash\">packer build digitalocean.json<\/code><\/pre>\n<p>    Bu komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Packer a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 s\u0131ras\u0131yla ger\u00e7ekle\u015ftirecektir:<\/p>\n<p>    *   <strong>Droplet Olu\u015fturma:<\/strong> DigitalOcean API&#8217;sini kullanarak ge\u00e7ici bir Droplet olu\u015fturur. Bu Droplet, \u015fablonunuzda belirtti\u011finiz <code>image<\/code>, <code>region<\/code> ve <code>size<\/code> parametreleriyle olu\u015fturulur.<br \/>\n    *   <strong>SSH Ba\u011flant\u0131s\u0131:<\/strong> Packer, Droplet ba\u015flat\u0131ld\u0131ktan sonra SSH \u00fczerinden ba\u011flant\u0131 kurar.<br \/>\n    *   <strong>Provisioners \u00c7al\u0131\u015ft\u0131rma:<\/strong> \u015eablonunuzdaki <code>provisioners<\/code> blo\u011funda tan\u0131mlanan t\u00fcm komutlar\u0131 ve betikleri s\u0131rayla \u00e7al\u0131\u015ft\u0131r\u0131r. Bu a\u015famada, sistem g\u00fcncellemeleri, yaz\u0131l\u0131m y\u00fcklemeleri ve temizlik i\u015flemleri yap\u0131l\u0131r.<br \/>\n    *   <strong>Droplet&#8217;i Kapatma:<\/strong> Provisioners tamamland\u0131ktan sonra, Packer Droplet&#8217;i g\u00fcvenli bir \u015fekilde kapat\u0131r. Anl\u0131k g\u00f6r\u00fcnt\u00fc almak i\u00e7in Droplet&#8217;in kapal\u0131 olmas\u0131 gerekir.<br \/>\n    *   <strong>Anl\u0131k G\u00f6r\u00fcnt\u00fc Alma:<\/strong> Kapat\u0131lan Droplet&#8217;in bir anl\u0131k g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc al\u0131r. Anl\u0131k g\u00f6r\u00fcnt\u00fcn\u00fcn ad\u0131, \u015fablonunuzdaki <code>snapshot_name<\/code> de\u011ferine g\u00f6re belirlenir.<br \/>\n    *   <strong>Droplet&#8217;i Silme:<\/strong> Anl\u0131k g\u00f6r\u00fcnt\u00fc ba\u015far\u0131yla al\u0131nd\u0131ktan sonra, Packer ge\u00e7ici Droplet&#8217;i otomatik olarak siler. Bu, gereksiz kaynak kullan\u0131m\u0131n\u0131 ve maliyetleri \u00f6nler.<\/p>\n<p>    Terminal \u00e7\u0131kt\u0131s\u0131nda Packer&#8217;\u0131n her ad\u0131m\u0131 ger\u00e7ekle\u015ftirdi\u011fini ve ilerlemesini g\u00f6receksiniz. \u0130\u015flem, Droplet&#8217;in boyutuna, internet ba\u011flant\u0131 h\u0131z\u0131n\u0131za ve <code>provisioners<\/code> blo\u011fundaki komutlar\u0131n karma\u015f\u0131kl\u0131\u011f\u0131na ba\u011fl\u0131 olarak birka\u00e7 dakika s\u00fcrebilir.<\/p>\n<p>    Ba\u015far\u0131l\u0131 bir derlemenin sonunda, a\u015fa\u011f\u0131daki gibi bir \u00e7\u0131kt\u0131 g\u00f6rmelisiniz (snapshot ad\u0131 farkl\u0131 olacakt\u0131r):<\/p>\n<pre><code class=\"language-\">digitalocean: A snapshot was created: ubuntu-1604-base-1678886400\n    Build 'digitalocean' finished after 5m30s.\n\n    ==> Builds finished. The artifacts are below:\n\n    --> digitalocean: A snapshot was created: ubuntu-1604-base-1678886400<\/code><\/pre>\n<p>    Bu \u00e7\u0131kt\u0131, anl\u0131k g\u00f6r\u00fcnt\u00fcn\u00fcn ba\u015far\u0131yla olu\u015fturuldu\u011funu ve ad\u0131n\u0131 g\u00f6sterir.<\/p>\n<h3>Olu\u015fturulan Anl\u0131k G\u00f6r\u00fcnt\u00fcy\u00fc Kullanma<\/h3>\n<p>Packer i\u015flemi ba\u015far\u0131yla tamamland\u0131ktan sonra, DigitalOcean hesab\u0131n\u0131zda yeni bir anl\u0131k g\u00f6r\u00fcnt\u00fc bulunacakt\u0131r.<\/p>\n<p>1.  <strong>DigitalOcean Kontrol Panelinde Do\u011frulay\u0131n:<\/strong><br \/>\n    DigitalOcean kontrol panelinize giri\u015f yap\u0131n. Sol men\u00fcden &#8220;Images&#8221; (\u0130majlar) se\u00e7ene\u011fine t\u0131klay\u0131n, ard\u0131ndan &#8220;Snapshots&#8221; (Anl\u0131k G\u00f6r\u00fcnt\u00fcler) sekmesine ge\u00e7in. Burada, Packer taraf\u0131ndan olu\u015fturulan anl\u0131k g\u00f6r\u00fcnt\u00fcy\u00fc (\u00f6rne\u011fin, <code>ubuntu-1604-base-1678886400<\/code>) listede g\u00f6rmelisiniz.<\/p>\n<p>2.  <strong>Yeni Bir Droplet Olu\u015ftururken Kullan\u0131n:<\/strong><br \/>\n    Bu anl\u0131k g\u00f6r\u00fcnt\u00fcy\u00fc kullanarak yeni bir Droplet olu\u015fturmak i\u00e7in:<br \/>\n    *   &#8220;Create&#8221; (Olu\u015ftur) d\u00fc\u011fmesine t\u0131klay\u0131n ve &#8220;Droplets&#8221; (Droplet&#8217;ler) se\u00e7ene\u011fini se\u00e7in.<br \/>\n    *   \u0130\u015fletim sistemi se\u00e7imi b\u00f6l\u00fcm\u00fcnde &#8220;Snapshots&#8221; sekmesine gidin.<br \/>\n    *   Olu\u015fturdu\u011funuz anl\u0131k g\u00f6r\u00fcnt\u00fcy\u00fc se\u00e7in.<br \/>\n    *   \u0130stedi\u011finiz b\u00f6lgeyi, plan\u0131 ve di\u011fer ayarlar\u0131 se\u00e7erek Droplet&#8217;i olu\u015fturun.<\/p>\n<p>    Bu yeni Droplet, Packer \u015fablonunuzda tan\u0131mlad\u0131\u011f\u0131n\u0131z t\u00fcm yaz\u0131l\u0131mlar ve yap\u0131land\u0131rmalarla birlikte ba\u015flayacakt\u0131r. Bu, sunucu da\u011f\u0131t\u0131m s\u00fcrecinizi b\u00fcy\u00fck \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r ve tutarl\u0131l\u0131\u011f\u0131 garanti eder.<\/p>\n<h3>Geli\u015fmi\u015f Packer Kullan\u0131m\u0131 ve En \u0130yi Uygulamalar<\/h3>\n<p>Packer, temel anl\u0131k g\u00f6r\u00fcnt\u00fc olu\u015fturman\u0131n \u00f6tesinde bir\u00e7ok geli\u015fmi\u015f \u00f6zelli\u011fe ve en iyi uygulamaya sahiptir.<\/p>\n<h4>De\u011fi\u015fkenlerin Kullan\u0131m\u0131<\/h4>\n<p>\u015eablonunuzu daha dinamik hale getirmek i\u00e7in <code>variables<\/code> blo\u011funu daha etkin kullanabilirsiniz. Packer&#8217;\u0131 \u00e7al\u0131\u015ft\u0131r\u0131rken komut sat\u0131r\u0131ndan da de\u011fi\u015fken de\u011ferleri ge\u00e7irebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">packer build -var 'region=nyc1' -var 'snapshot_name_prefix=my-custom-image' digitalocean.json<\/code><\/pre>\n<p>Bu, ayn\u0131 \u015fablonu farkl\u0131 b\u00f6lgelerde veya farkl\u0131 adland\u0131rma kurallar\u0131yla kullanman\u0131za olanak tan\u0131r.<\/p>\n<h4>Par\u00e7al\u0131 \u015eablonlar ve Organizasyon<\/h4>\n<p>Daha karma\u015f\u0131k senaryolarda, tek bir b\u00fcy\u00fck JSON dosyas\u0131 yerine \u015fablonunuzu birden fazla dosyaya b\u00f6lebilirsiniz. \u00d6rne\u011fin, <code>variables.json<\/code>, <code>builders.json<\/code> ve <code>provisioners.json<\/code> gibi dosyalar olu\u015fturup bunlar\u0131 ana \u015fablonda birle\u015ftirebilirsiniz. Bu, \u015fablonlar\u0131n daha okunabilir ve y\u00f6netilebilir olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>Gizli Bilgileri Y\u00f6netme<\/h4>\n<p><code>DO_API_TOKEN<\/code> gibi hassas bilgileri \u00e7evre de\u011fi\u015fkenleri arac\u0131l\u0131\u011f\u0131yla y\u00f6netmek iyi bir ba\u015flang\u0131\u00e7t\u0131r. Ancak, daha b\u00fcy\u00fck ekipler veya daha karma\u015f\u0131k altyap\u0131lar i\u00e7in HashiCorp Vault gibi \u00f6zel gizli y\u00f6netim \u00e7\u00f6z\u00fcmleri kullanmak daha g\u00fcvenli ve \u00f6l\u00e7eklenebilir bir yakla\u015f\u0131md\u0131r.<\/p>\n<h4>G\u00fcvenlik ve G\u00fcncelleme<\/h4>\n<p>*   <strong>D\u00fczenli G\u00fcncellemeler:<\/strong> Olu\u015fturdu\u011funuz anl\u0131k g\u00f6r\u00fcnt\u00fcler zamanla eskiyebilir. G\u00fcvenlik a\u00e7\u0131klar\u0131 ve yeni yaz\u0131l\u0131m s\u00fcr\u00fcmleri nedeniyle, anl\u0131k g\u00f6r\u00fcnt\u00fclerinizi d\u00fczenli olarak (\u00f6rne\u011fin, ayl\u0131k) yeniden olu\u015fturman\u0131z ve g\u00fcncellemeniz \u00f6nemlidir.<br \/>\n*   <strong>Minimal \u0130majlar:<\/strong> Anl\u0131k g\u00f6r\u00fcnt\u00fclerinizin m\u00fcmk\u00fcn oldu\u011funca k\u00fc\u00e7\u00fck ve sadece gerekli yaz\u0131l\u0131mlar\u0131 i\u00e7ermesini sa\u011flay\u0131n. Bu, g\u00fcvenlik y\u00fczeyini azalt\u0131r ve da\u011f\u0131t\u0131m s\u00fcrelerini k\u0131salt\u0131r.<br \/>\n*   <strong>Temizlik:<\/strong> Anl\u0131k g\u00f6r\u00fcnt\u00fcy\u00fc olu\u015fturmadan \u00f6nce SSH anahtarlar\u0131n\u0131, log dosyalar\u0131n\u0131 ve di\u011fer ge\u00e7ici verileri temizlemek \u00e7ok \u00f6nemlidir. Bu, g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 \u00f6nler ve her yeni Droplet&#8217;in benzersiz olmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>S\u00fcr\u00fcm Kontrol\u00fc ve CI\/CD Entegrasyonu<\/h4>\n<p>Packer \u015fablonlar\u0131n\u0131z\u0131 ve ili\u015fkili betiklerinizi (\u00f6rne\u011fin, <code>cleanup_cloud_init.sh<\/code>) Git gibi bir s\u00fcr\u00fcm kontrol sisteminde saklamak, de\u011fi\u015fiklikleri izlemenize, i\u015fbirli\u011fi yapman\u0131za ve geri d\u00f6n\u00fc\u015f yapman\u0131za olanak tan\u0131r.<\/p>\n<p>Ayr\u0131ca, Packer derleme s\u00fcrecini Jenkins, GitLab CI, GitHub Actions gibi s\u00fcrekli entegrasyon\/s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) boru hatlar\u0131na entegre edebilirsiniz. Bu, her kod de\u011fi\u015fikli\u011finde veya belirli bir zaman \u00e7izelgesine g\u00f6re otomatik olarak yeni anl\u0131k g\u00f6r\u00fcnt\u00fcler olu\u015fturulmas\u0131n\u0131 sa\u011flayarak altyap\u0131n\u0131z\u0131n her zaman g\u00fcncel kalmas\u0131n\u0131 garanti eder.<\/p>\n<h4>DigitalOcean Maliyetleri<\/h4>\n<p>Packer, ge\u00e7ici bir Droplet olu\u015fturup silse de, olu\u015fturulan anl\u0131k g\u00f6r\u00fcnt\u00fcler DigitalOcean hesab\u0131n\u0131zda depolan\u0131r ve bu da maliyet yarat\u0131r. Kullanmad\u0131\u011f\u0131n\u0131z eski veya gereksiz anl\u0131k g\u00f6r\u00fcnt\u00fcleri d\u00fczenli olarak kontrol panelinizden silerek maliyetleri optimize edebilirsiniz.<\/p>\n<h4>Ubuntu 16.04&#8217;ten G\u00fcncel S\u00fcr\u00fcmlere Ge\u00e7i\u015f<\/h4>\n<p>Makalenin ba\u015f\u0131nda da belirtildi\u011fi gibi, Ubuntu 16.04 art\u0131k resmi g\u00fcvenlik g\u00fcncellemeleri almamaktad\u0131r. \u00dcretim ortamlar\u0131nda veya yeni projelerde her zaman g\u00fcncel ve desteklenen bir i\u015fletim sistemi s\u00fcr\u00fcm\u00fcn\u00fc (\u00f6rne\u011fin, Ubuntu 20.04 LTS veya 22.04 LTS) kullanman\u0131z \u015fiddetle tavsiye edilir. Packer \u015fablonunuzda <code>image<\/code> de\u011fi\u015fkenini g\u00fcncel bir s\u00fcr\u00fcme (<code>ubuntu-22-04-x64<\/code> gibi) de\u011fi\u015ftirerek bu ge\u00e7i\u015fi kolayca yapabilirsiniz.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu makalede, HashiCorp Packer&#8217;\u0131 kullanarak DigitalOcean \u00fczerinde Ubuntu 16.04 tabanl\u0131 \u00f6zel anl\u0131k g\u00f6r\u00fcnt\u00fcler olu\u015fturman\u0131n t\u00fcm s\u00fcrecini ayr\u0131nt\u0131l\u0131 bir \u015fekilde ele ald\u0131k. Packer&#8217;\u0131n nas\u0131l kurulaca\u011f\u0131ndan, DigitalOcean API token&#8217;\u0131n\u0131n nas\u0131l olu\u015fturulaca\u011f\u0131na, kapsaml\u0131 bir Packer \u015fablonunun nas\u0131l yaz\u0131laca\u011f\u0131na ve bu \u015fablonun nas\u0131l \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131na kadar her ad\u0131m\u0131 ad\u0131m ad\u0131m inceledik.<\/p>\n<p>Packer, bulut altyap\u0131n\u0131zda tekrarlanabilirlik, tutarl\u0131l\u0131k ve otomasyon sa\u011flamak i\u00e7in vazge\u00e7ilmez bir ara\u00e7t\u0131r. \u00d6nceden yap\u0131land\u0131r\u0131lm\u0131\u015f anl\u0131k g\u00f6r\u00fcnt\u00fcler olu\u015fturarak, sunucu da\u011f\u0131t\u0131m s\u00fcrelerini \u00f6nemli \u00f6l\u00e7\u00fcde azaltabilir, manuel hatalar\u0131 ortadan kald\u0131rabilir ve geli\u015ftirme, test ve \u00fcretim ortamlar\u0131n\u0131z aras\u0131nda tutarl\u0131l\u0131k sa\u011flayabilirsiniz.<\/p>\n<p>Unutmay\u0131n ki bu makale spesifik olarak Ubuntu 16.04&#8217;\u00fc ele alsa da, g\u00f6sterilen prensipler ve Packer \u015fablon yap\u0131s\u0131, DigitalOcean \u00fczerindeki di\u011fer i\u015fletim sistemi s\u00fcr\u00fcmleri veya farkl\u0131 bulut sa\u011flay\u0131c\u0131lar\u0131 i\u00e7in de kolayca uyarlanabilir. Altyap\u0131n\u0131z\u0131 kod olarak y\u00f6netme yolculu\u011funuzda Packer, size sa\u011flam bir temel sunacakt\u0131r. Bu bilgileri kullanarak, kendi \u00f6zel ihtiya\u00e7lar\u0131n\u0131za g\u00f6re daha karma\u015f\u0131k ve optimize edilmi\u015f imajlar olu\u015fturmaya ba\u015flayabilirsiniz.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma\nDigitalOcean gibi bulut sa\u011flay\u0131c\u0131lar\u0131nda sunucu kurulumlar\u0131 ve y","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-40235","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>DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma - 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\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma\" \/>\n<meta property=\"og:description\" content=\"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma DigitalOcean gibi bulut sa\u011flay\u0131c\u0131lar\u0131nda sunucu kurulumlar\u0131 ve y\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-02-25T13:40:53+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\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma\",\"datePublished\":\"2026-02-25T13:40:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/\"},\"wordCount\":3443,\"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\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/\",\"name\":\"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-02-25T13:40:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma\"}]},{\"@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":"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma - 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\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/","og_locale":"tr_TR","og_type":"article","og_title":"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma","og_description":"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma DigitalOcean gibi bulut sa\u011flay\u0131c\u0131lar\u0131nda sunucu kurulumlar\u0131 ve y","og_url":"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-02-25T13:40:53+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\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma","datePublished":"2026-02-25T13:40:53+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/"},"wordCount":3443,"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\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/","url":"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/","name":"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-02-25T13:40:53+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-uzerinde-packer-ile-ubuntu-16-04-anlik-goruntuleri-olusturma\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"DigitalOcean \u00dczerinde Packer ile Ubuntu 16.04 Anl\u0131k G\u00f6r\u00fcnt\u00fcleri Olu\u015fturma"}]},{"@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\/40235","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=40235"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40235\/revisions"}],"predecessor-version":[{"id":40236,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/40235\/revisions\/40236"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=40235"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=40235"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=40235"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}