{"id":31482,"date":"2025-10-10T11:41:11","date_gmt":"2025-10-10T08:41:11","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31482"},"modified":"2025-10-10T11:41:11","modified_gmt":"2025-10-10T08:41:11","slug":"chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/","title":{"rendered":"Chef ile DigitalOcean Droplet&#8217;lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Chef ile DigitalOcean Droplet&#8217;lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma Rehberi<\/h2>\n<p>Bulut bili\u015fim, modern altyap\u0131 y\u00f6netiminin temelini olu\u015ftururken, otomasyon ara\u00e7lar\u0131 bu altyap\u0131lar\u0131 verimli bir \u015fekilde kurmak, yap\u0131land\u0131rmak ve y\u00f6netmek i\u00e7in vazge\u00e7ilmezdir. Chef, sunucu yap\u0131land\u0131rma y\u00f6netimi ve altyap\u0131 otomasyonu i\u00e7in g\u00fc\u00e7l\u00fc bir platform sunar. DijitalOcean ise geli\u015ftiriciler ve k\u00fc\u00e7\u00fck i\u015fletmeler i\u00e7in uygun maliyetli ve \u00f6l\u00e7eklenebilir bulut sunucular\u0131 (Droplet&#8217;ler) sa\u011flayan pop\u00fcler bir bulut servis sa\u011flay\u0131c\u0131s\u0131d\u0131r. Bu makalede, Chef&#8217;in komut sat\u0131r\u0131 aray\u00fcz\u00fc olan Knife&#8217;\u0131n DigitalOcean eklentisi (<code>knife-digitalocean<\/code>) arac\u0131l\u0131\u011f\u0131yla Droplet&#8217;lerin nas\u0131l y\u00f6netilece\u011fini detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Bu entegrasyon sayesinde, Chef tariflerinizi kullanarak DigitalOcean \u00fczerindeki sunucular\u0131n\u0131z\u0131 otomatik olarak olu\u015fturabilir, yap\u0131land\u0131rabilir ve silebilirsiniz, b\u00f6ylece altyap\u0131n\u0131z\u0131 &#8220;kod olarak&#8221; y\u00f6netme prensibini tam anlam\u0131yla hayata ge\u00e7irebilirsiniz.<\/p>\n<h3>Giri\u015f: Chef, Knife ve DigitalOcean Entegrasyonunun \u00d6nemi<\/h3>\n<p>Modern yaz\u0131l\u0131m geli\u015ftirme ve operasyon s\u00fcre\u00e7lerinde (DevOps), altyap\u0131n\u0131n h\u0131zl\u0131, tutarl\u0131 ve tekrarlanabilir bir \u015fekilde y\u00f6netilmesi kritik \u00f6neme sahiptir. Manuel i\u015flemler hatalara a\u00e7\u0131k oldu\u011fu gibi, b\u00fcy\u00fck \u00f6l\u00e7ekli altyap\u0131larda zaman al\u0131c\u0131 ve verimsizdir. \u0130\u015fte bu noktada yap\u0131land\u0131rma y\u00f6netimi ara\u00e7lar\u0131 devreye girer.<\/p>\n<p><strong>Chef<\/strong>, altyap\u0131y\u0131 kod olarak tan\u0131mlaman\u0131z\u0131 sa\u011flayan g\u00fc\u00e7l\u00fc bir otomasyon platformudur. Ruby tabanl\u0131 tarifler (recipes) ve yemek kitaplar\u0131 (cookbooks) kullanarak sunucular\u0131n nas\u0131l yap\u0131land\u0131r\u0131laca\u011f\u0131n\u0131, hangi yaz\u0131l\u0131mlar\u0131n kurulaca\u011f\u0131n\u0131 ve servislerin nas\u0131l \u00e7al\u0131\u015faca\u011f\u0131n\u0131 belirleyebilirsiniz. Chef, sunucular\u0131n\u0131z\u0131n istenen duruma ula\u015fmas\u0131n\u0131 ve bu durumda kalmas\u0131n\u0131 sa\u011flar.<\/p>\n<p><strong>Knife<\/strong>, Chef Workstation&#8217;\u0131n bir par\u00e7as\u0131 olan komut sat\u0131r\u0131 aray\u00fcz\u00fcd\u00fcr. Chef sunucusuyla etkile\u015fim kurman\u0131z\u0131, d\u00fc\u011f\u00fcmleri (nodes) y\u00f6netmenizi, tarifleri y\u00fcklemenizi ve di\u011fer bir\u00e7ok y\u00f6netim g\u00f6revini ger\u00e7ekle\u015ftirmenizi sa\u011flar. Knife&#8217;\u0131n g\u00fcc\u00fc, eklentiler (plugins) arac\u0131l\u0131\u011f\u0131yla geni\u015fletilebilir olmas\u0131ndan gelir. Bu eklentiler, farkl\u0131 bulut sa\u011flay\u0131c\u0131lar\u0131 veya sanalla\u015ft\u0131rma platformlar\u0131 ile entegrasyon sa\u011flayarak altyap\u0131 y\u00f6netimi yeteneklerini art\u0131r\u0131r.<\/p>\n<p><strong>DigitalOcean<\/strong>, basit aray\u00fcz\u00fc, uygun fiyatlar\u0131 ve geli\u015ftirici dostu \u00f6zellikleriyle \u00f6ne \u00e7\u0131kan bir bulut servis sa\u011flay\u0131c\u0131s\u0131d\u0131r. H\u0131zl\u0131 bir \u015fekilde Linux tabanl\u0131 sanal sunucular (Droplet&#8217;ler), veritabanlar\u0131, depolama alanlar\u0131 ve di\u011fer bulut hizmetleri olu\u015fturman\u0131za olanak tan\u0131r.<\/p>\n<p><strong><code>knife-digitalocean<\/code><\/strong> eklentisi, Knife&#8217;\u0131 DigitalOcean API&#8217;si ile entegre ederek, Chef Workstation&#8217;\u0131n\u0131zdan do\u011frudan Droplet&#8217;leri olu\u015fturma, listeleme ve silme gibi i\u015flemleri yapman\u0131z\u0131 sa\u011flar. Bu entegrasyon, altyap\u0131n\u0131z\u0131n Chef taraf\u0131ndan tamamen y\u00f6netilmesini ve Droplet&#8217;lerinizi Chef tariflerinizle otomatik olarak yap\u0131land\u0131rman\u0131z\u0131 m\u00fcmk\u00fcn k\u0131lar. Bu sayede, &#8220;altyap\u0131 kodu&#8221; prensibini DigitalOcean ortam\u0131nda eksiksiz bir \u015fekilde uygulayabilir, geli\u015ftirme ve \u00fcretim ortamlar\u0131 aras\u0131nda tutarl\u0131l\u0131k sa\u011flayabilir ve yeni sunucular\u0131 saniyeler i\u00e7inde Chef taraf\u0131ndan yap\u0131land\u0131r\u0131lm\u0131\u015f bir \u015fekilde devreye alabilirsiniz.<\/p>\n<h3>\u00d6n Gereksinimler<\/h3>\n<p>Bu rehbere ba\u015flamadan \u00f6nce, a\u015fa\u011f\u0131daki \u00f6n ko\u015fullar\u0131n kar\u015f\u0131land\u0131\u011f\u0131ndan emin olmal\u0131s\u0131n\u0131z:<\/p>\n<p>1.  <strong>Chef Workstation Kurulumu<\/strong>: Chef Workstation, Knife&#8217;\u0131 ve Chef ile \u00e7al\u0131\u015fmak i\u00e7in gerekli t\u00fcm ara\u00e7lar\u0131 i\u00e7erir. Chef&#8217;in resmi web sitesinden (chef.io) i\u015fletim sisteminize uygun paketi indirip kurmal\u0131s\u0131n\u0131z.<br \/>\n2.  <strong>Ruby ve Bundler (\u0130ste\u011fe Ba\u011fl\u0131 ama \u00d6nerilir)<\/strong>: <code>knife-digitalocean<\/code> bir Ruby gem&#8217;idir. Chef Workstation genellikle kendi Ruby ortam\u0131n\u0131 sa\u011flar ancak bazen harici gem&#8217;ler i\u00e7in Bundler kullanmak daha d\u00fczenli olabilir.<br \/>\n3.  <strong>DigitalOcean Hesab\u0131 ve API Token&#8217;\u0131<\/strong>: DigitalOcean \u00fczerinde aktif bir hesab\u0131n\u0131z olmal\u0131 ve programatik eri\u015fim i\u00e7in bir Personal Access Token (API Anahtar\u0131) olu\u015fturman\u0131z gerekmektedir. Bu token, Knife&#8217;\u0131n DigitalOcean API&#8217;si ile kimlik do\u011frulamas\u0131 yapmas\u0131n\u0131 sa\u011flayacakt\u0131r.<br \/>\n4.  <strong>Temel Chef Bilgisi<\/strong>: Cookbooks, recipes, run lists, nodes ve environments gibi temel Chef kavramlar\u0131na a\u015fina olman\u0131z, bu makaledeki \u00f6rnekleri daha iyi anlaman\u0131za yard\u0131mc\u0131 olacakt\u0131r.<br \/>\n5.  <strong>SSH Anahtarlar\u0131<\/strong>: DigitalOcean Droplet&#8217;lerine ba\u011flanmak ve Chef istemcisini bootstrap etmek i\u00e7in SSH anahtarlar\u0131na ihtiyac\u0131n\u0131z olacakt\u0131r. Genel anahtar\u0131n\u0131z DigitalOcean hesab\u0131n\u0131za eklenmeli ve \u00f6zel anahtar\u0131n\u0131z Chef Workstation&#8217;\u0131n\u0131zda eri\u015filebilir olmal\u0131d\u0131r.<\/p>\n<h3>DigitalOcean API Token Olu\u015fturma<\/h3>\n<p><code>knife-digitalocean<\/code> eklentisinin DigitalOcean hesab\u0131n\u0131zla ileti\u015fim kurabilmesi i\u00e7in bir API Token&#8217;a ihtiyac\u0131 vard\u0131r. Bu token, hesab\u0131n\u0131za programatik eri\u015fim sa\u011flar, bu y\u00fczden g\u00fcvenli\u011fini sa\u011flamak son derece \u00f6nemlidir.<\/p>\n<p>1.  <strong>DigitalOcean Hesab\u0131n\u0131za Giri\u015f Yap\u0131n<\/strong>: Taray\u0131c\u0131n\u0131zdan DigitalOcean kontrol paneline gidin ve hesab\u0131n\u0131za giri\u015f yap\u0131n.<br \/>\n2.  <strong>API B\u00f6l\u00fcm\u00fcne Gidin<\/strong>: Sol men\u00fcden &#8220;API&#8221; se\u00e7ene\u011fine t\u0131klay\u0131n.<br \/>\n3.  <strong>Token Olu\u015fturun<\/strong>: &#8220;Personal Access Tokens&#8221; ba\u015fl\u0131\u011f\u0131 alt\u0131nda &#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>knife-chef-integration<\/code>).<br \/>\n    *   <strong>Select Scopes<\/strong>: Token&#8217;\u0131n sahip olaca\u011f\u0131 izinleri se\u00e7in. Droplet olu\u015fturma ve silme gibi i\u015flemler i\u00e7in hem &#8220;Read&#8221; hem de &#8220;Write&#8221; izinlerine ihtiyac\u0131n\u0131z olacakt\u0131r.<br \/>\n5.  <strong>Token&#8217;\u0131 Kopyalay\u0131n<\/strong>: Token olu\u015fturulduktan sonra size g\u00f6sterilen uzun karakter dizisini kopyalay\u0131n. <strong>Bu token&#8217;\u0131 bir daha g\u00f6remeyece\u011finiz i\u00e7in hemen g\u00fcvenli bir yere kaydetti\u011finizden emin olun.<\/strong><\/p>\n<p><strong>G\u00fcvenlik Uyar\u0131s\u0131<\/strong>: Bu API token&#8217;\u0131, DigitalOcean hesab\u0131n\u0131zdaki t\u00fcm kaynaklara tam eri\u015fim sa\u011flayabilir (se\u00e7ilen izinlere ba\u011fl\u0131 olarak). Bu nedenle, token&#8217;\u0131 asla genel bir depoda (GitHub gibi) payla\u015fmamal\u0131, g\u00fcvenli bir \u015fekilde saklamal\u0131 ve sadece yetkili ki\u015filerle payla\u015fmal\u0131s\u0131n\u0131z. Makalenin ilerleyen b\u00f6l\u00fcmlerinde bu token&#8217;\u0131 <code>knife.rb<\/code> dosyas\u0131na nas\u0131l g\u00fcvenli bir \u015fekilde ekleyece\u011finizi ele alaca\u011f\u0131z.<\/p>\n<h3>Ortam Kurulumu: <code>knife-digitalocean<\/code> Eklentisini Y\u00fckleme ve Yap\u0131land\u0131rma<\/h3>\n<p><code>knife-digitalocean<\/code> eklentisini kullanmaya ba\u015flamak i\u00e7in \u00f6ncelikle onu Chef Workstation&#8217;\u0131n\u0131za kurman\u0131z ve ard\u0131ndan Knife yap\u0131land\u0131rma dosyan\u0131zda DigitalOcean API token&#8217;\u0131n\u0131z\u0131 tan\u0131mlaman\u0131z gerekir.<\/p>\n<h4><code>knife-digitalocean<\/code> Gem&#8217;ini Y\u00fckleme<\/h4>\n<p>Chef Workstation&#8217;\u0131n\u0131zda bir terminal a\u00e7\u0131n ve a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">gem install knife-digitalocean<\/code><\/pre>\n<p>E\u011fer bir Chef deposu (repository) i\u00e7inde \u00e7al\u0131\u015f\u0131yorsan\u0131z ve <code>Gemfile<\/code> kullan\u0131yorsan\u0131z, <code>Gemfile<\/code> dosyan\u0131za a\u015fa\u011f\u0131daki sat\u0131r\u0131 ekleyin:<\/p>\n<pre><code class=\"language-ruby\">gem 'knife-digitalocean'<\/code><\/pre>\n<p>Ard\u0131ndan, deponuzun k\u00f6k dizininde <code>bundle install<\/code> komutunu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">bundle install<\/code><\/pre>\n<p>Bu komut, eklentiyi kuracak ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 \u00e7\u00f6zecektir.<\/p>\n<h4>Knife Yap\u0131land\u0131rmas\u0131 (<code>knife.rb<\/code>)<\/h4>\n<p>Knife&#8217;\u0131n DigitalOcean ile ileti\u015fim kurabilmesi i\u00e7in API token&#8217;\u0131n\u0131z\u0131 bilmesi gerekir. Bu bilgiyi genellikle <code>.chef\/knife.rb<\/code> dosyan\u0131za eklersiniz. Chef deponuzun k\u00f6k dizininde <code>.chef<\/code> klas\u00f6r\u00fc alt\u0131nda <code>knife.rb<\/code> dosyas\u0131n\u0131 bulun veya olu\u015fturun.<\/p>\n<pre><code class=\"language-ruby\"># knife.rb dosyan\u0131z\u0131n i\u00e7eri\u011fi\n<h2>Di\u011fer Chef yap\u0131land\u0131rmalar\u0131n\u0131z burada yer alabilir.<\/h2>\n\n<h2>DigitalOcean API Token'\u0131n\u0131z\u0131 tan\u0131mlay\u0131n.<\/h2>\n<h2>G\u00fcvenlik nedeniyle, bu token'\u0131 do\u011frudan buraya yazmak yerine<\/h2>\n<h2>bir ortam de\u011fi\u015fkeni olarak kullanmak daha iyidir.<\/h2>\n<h2>\u00d6rne\u011fin: ENV['DIGITALOCEAN_API_TOKEN']<\/h2>\n<h2>Ancak h\u0131zl\u0131 ba\u015flang\u0131\u00e7 i\u00e7in do\u011frudan buraya yazabilirsiniz (tavsiye edilmez).<\/h2>\ndigital_ocean_api_token ENV['DIGITALOCEAN_API_TOKEN']\n<h2>veya<\/h2>\n<h2>digital_ocean_api_token \"sizin_digitalocean_api_token'\u0131n\u0131z_buraya\"<\/code><\/pre>\n<\/h2>\n<p><strong>API Token&#8217;\u0131 G\u00fcvenli Bir \u015eekilde Saklama<\/strong>: <code>knife.rb<\/code> dosyas\u0131na token&#8217;\u0131 do\u011frudan yazmak, dosyan\u0131n yanl\u0131\u015fl\u0131kla bir versiyon kontrol sistemine (Git gibi) y\u00fcklenmesi durumunda g\u00fcvenlik riski olu\u015fturur. En iyi uygulama, token&#8217;\u0131 bir ortam de\u011fi\u015fkeni olarak saklamakt\u0131r.<\/p>\n<p>\u00d6rne\u011fin, Linux\/macOS sistemlerde:<\/p>\n<pre><code class=\"language-bash\">export DIGITALOCEAN_API_TOKEN=\"sizin_digitalocean_api_token'\u0131n\u0131z_buraya\"<\/code><\/pre>\n<p>Bu de\u011fi\u015fkeni kal\u0131c\u0131 hale getirmek i\u00e7in <code>~\/.bashrc<\/code>, <code>~\/.zshrc<\/code> veya <code>~\/.profile<\/code> dosyan\u0131za ekleyebilirsiniz. Windows&#8217;ta ise sistem ortam de\u011fi\u015fkenleri aray\u00fcz\u00fcn\u00fc kullanabilirsiniz.<\/p>\n<p>Bu yap\u0131land\u0131rmadan sonra, Knife DigitalOcean eklentisini kullanmaya haz\u0131rs\u0131n\u0131z.<\/p>\n<h3>Temel Knife DigitalOcean Komutlar\u0131<\/h3>\n<p><code>knife-digitalocean<\/code> eklentisi, DigitalOcean hesab\u0131n\u0131zdaki kaynaklar\u0131 listelemek i\u00e7in \u00e7e\u015fitli komutlar sunar. Bu komutlar, Droplet olu\u015fturmadan \u00f6nce mevcut se\u00e7enekleri ke\u015ffetmenize yard\u0131mc\u0131 olur.<\/p>\n<h4>Droplet&#8217;leri Listeleme<\/h4>\n<p>Mevcut Droplet&#8217;lerinizi listelemek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">knife digital_ocean server list<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131, Droplet adlar\u0131n\u0131, ID&#8217;lerini, IP adreslerini, durumlar\u0131n\u0131, b\u00f6lgelerini ve boyutlar\u0131n\u0131 g\u00f6sterecektir.<\/p>\n<pre><code class=\"language-\">ID        Name             Public IP        Private IP       Region    Size          Image                 Status\n34567890  web-server-01    192.0.2.10       10.10.0.10       nyc1      s-1vcpu-1gb   Ubuntu 20.04 (LTS)    active\n98765432  db-server-01     192.0.2.11       10.10.0.11       nyc1      s-2vcpu-4gb   Ubuntu 20.04 (LTS)    active<\/code><\/pre>\n<h4>Mevcut Disk G\u00f6r\u00fcnt\u00fclerini (Images) Listeleme<\/h4>\n<p>Droplet olu\u015ftururken kullanabilece\u011finiz i\u015fletim sistemi g\u00f6r\u00fcnt\u00fclerini listelemek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">knife digital_ocean image list<\/code><\/pre>\n<p>Bu komut, Ubuntu, CentOS, Debian gibi i\u015fletim sistemi g\u00f6r\u00fcnt\u00fclerini ve bunlar\u0131n versiyonlar\u0131n\u0131 listeler.<\/p>\n<pre><code class=\"language-\">ID          Name                                Slug\n123456789   Ubuntu 20.04 (LTS)                  ubuntu-20-04-x64\n987654321   CentOS 8                            centos-8-x64\n...<\/code><\/pre>\n<h4>Mevcut Boyutlar\u0131 (Sizes) Listeleme<\/h4>\n<p>Droplet&#8217;ler i\u00e7in kullanabilece\u011finiz CPU, RAM ve disk kombinasyonlar\u0131n\u0131 listelemek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">knife digital_ocean size list<\/code><\/pre>\n<p>Bu, farkl\u0131 fiyatland\u0131rma katmanlar\u0131n\u0131 ve kaynak \u00f6zelliklerini g\u00f6sterir.<\/p>\n<pre><code class=\"language-\">Slug            Memory    VCPUs    Disk    Price Monthly    Price Hourly\ns-1vcpu-1gb     1024      1        25      $6                 $0.00893\ns-2vcpu-2gb     2048      2        50      $12                $0.01786\n...<\/code><\/pre>\n<h4>Mevcut B\u00f6lgeleri (Regions) Listeleme<\/h4>\n<p>Droplet&#8217;lerinizi da\u011f\u0131tabilece\u011finiz DigitalOcean veri merkezi b\u00f6lgelerini listelemek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">knife digital_ocean region list<\/code><\/pre>\n<pre><code class=\"language-\">Slug    Name               Available\nnyc1    New York 1         true\nfra1    Frankfurt 1        true\nsgp1    Singapore 1        true\n...<\/code><\/pre>\n<h4>SSH Anahtarlar\u0131n\u0131 Listeleme<\/h4>\n<p>DigitalOcean hesab\u0131n\u0131za y\u00fckledi\u011finiz SSH anahtarlar\u0131n\u0131 listelemek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">knife digital_ocean sshkey list<\/code><\/pre>\n<p>Bu anahtarlar, Droplet olu\u015ftururken Droplet&#8217;e ba\u011flanmak i\u00e7in kullan\u0131lacakt\u0131r.<\/p>\n<pre><code class=\"language-\">ID        Name\n1234567   My SSH Key<\/code><\/pre>\n<p>Bu komutlar, yeni bir Droplet olu\u015fturmadan \u00f6nce do\u011fru parametreleri se\u00e7menize yard\u0131mc\u0131 olacak de\u011ferli bilgiler sa\u011flar.<\/p>\n<h3>Droplet Olu\u015fturma ve Chef ile Bootstrap Etme<\/h3>\n<p><code>knife digital_ocean server create<\/code> komutu, DigitalOcean \u00fczerinde yeni bir Droplet olu\u015fturman\u0131n ve ayn\u0131 anda Chef istemcisini bu Droplet&#8217;e kurup bootstrap etmenin ana yoludur. Bu, Chef&#8217;in &#8220;altyap\u0131 kodu&#8221; yakla\u015f\u0131m\u0131n\u0131n temelini olu\u015fturur.<\/p>\n<h4>Temel Droplet Olu\u015fturma Komutu<\/h4>\n<p>A\u015fa\u011f\u0131da, temel bir Droplet olu\u015fturma ve bootstrap etme komutunun yap\u0131s\u0131 verilmi\u015ftir:<\/p>\n<pre><code class=\"language-bash\">knife digital_ocean server create \\\n  --server-name my-web-droplet \\\n  --image ubuntu-20-04-x64 \\\n  --size s-1vcpu-1gb \\\n  --region nyc1 \\\n  --ssh-keys \"My SSH Key\" \\\n  --run-list 'recipe[apt],recipe[nginx]' \\\n  --node-name web01 \\\n  --bootstrap \\\n  --do-public-ip \\\n  --do-private-networking \\\n  --tags web,production<\/code><\/pre>\n<p>\u015eimdi bu komuttaki \u00f6nemli parametreleri detayl\u0131ca inceleyelim:<\/p>\n<p>*   <code>--server-name NAME<\/code>: DigitalOcean&#8217;da olu\u015fturulacak Droplet&#8217;in ad\u0131. Bu, DigitalOcean kontrol panelinde g\u00f6r\u00fcnecek isimdir.<br \/>\n*   <code>--image SLUG_OR_ID<\/code>: Kullan\u0131lacak i\u015fletim sistemi g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fcn slug&#8217;\u0131 veya ID&#8217;si. <code>knife digital_ocean image list<\/code> ile elde edilebilir (\u00f6rn. <code>ubuntu-20-04-x64<\/code>).<br \/>\n*   <code>--size SLUG_OR_ID<\/code>: Droplet&#8217;in boyutunun slug&#8217;\u0131 veya ID&#8217;si (CPU, RAM, disk). <code>knife digital_ocean size list<\/code> ile elde edilebilir (\u00f6rn. <code>s-1vcpu-1gb<\/code>).<br \/>\n*   <code>--region SLUG_OR_ID<\/code>: Droplet&#8217;in olu\u015fturulaca\u011f\u0131 DigitalOcean b\u00f6lgesinin slug&#8217;\u0131 veya ID&#8217;si. <code>knife digital_ocean region list<\/code> ile elde edilebilir (\u00f6rn. <code>nyc1<\/code>).<br \/>\n*   <code>--ssh-keys \"KEY_NAME\"<\/code>: Droplet&#8217;e eklemek istedi\u011finiz DigitalOcean hesab\u0131n\u0131zdaki SSH anahtar\u0131n\u0131n ad\u0131 veya ID&#8217;si. Birden fazla anahtar eklemek i\u00e7in virg\u00fclle ay\u0131rabilirsiniz (\u00f6rn. <code>\"My SSH Key\", \"Another Key\"<\/code>). Bu anahtar, bootstrap i\u015flemi s\u0131ras\u0131nda SSH ba\u011flant\u0131s\u0131 kurmak i\u00e7in kullan\u0131lacakt\u0131r.<br \/>\n*   <code>--run-list 'RECIPE_OR_ROLE[,RECIPE_OR_ROLE]'<\/code>: Chef istemcisi bootstrap edildikten sonra \u00e7al\u0131\u015ft\u0131r\u0131lacak tarifler veya roller. Bu, Droplet&#8217;in ilk yap\u0131land\u0131rmas\u0131n\u0131 tan\u0131mlar. \u00d6rne\u011fin, <code>recipe[apt]<\/code> ve <code>recipe[nginx]<\/code> tariflerini \u00e7al\u0131\u015ft\u0131r\u0131r.<br \/>\n*   <code>--node-name NODE_NAME<\/code>: Chef sunucusunda olu\u015fturulacak d\u00fc\u011f\u00fcm\u00fcn ad\u0131. Bu isim, Chef sunucusu taraf\u0131ndan Droplet&#8217;i tan\u0131mlamak i\u00e7in kullan\u0131l\u0131r. E\u011fer belirtilmezse, <code>--server-name<\/code> kullan\u0131l\u0131r.<br \/>\n*   <code>--bootstrap<\/code>: Bu \u00f6nemli bayrak, Droplet olu\u015fturulduktan hemen sonra Chef istemcisini kurar ve <code>--run-list<\/code> i\u00e7inde belirtilen tarifleri \u00e7al\u0131\u015ft\u0131r\u0131r. Temel olarak <code>knife bootstrap<\/code> komutunun yapt\u0131\u011f\u0131 i\u015fi otomatikle\u015ftirir.<br \/>\n*   <code>--do-public-ip<\/code>: Droplet&#8217;e bir genel (public) IPv4 adresi atar. Varsay\u0131lan olarak etkindir, ancak belirtmek iyi bir uygulamad\u0131r.<br \/>\n*   <code>--do-private-networking<\/code>: Droplet i\u00e7in \u00f6zel a\u011f (private networking) \u00f6zelli\u011fini etkinle\u015ftirir. Bu, ayn\u0131 b\u00f6lgedeki Droplet&#8217;ler aras\u0131nda g\u00fcvenli ve h\u0131zl\u0131 ileti\u015fim sa\u011flar.<br \/>\n*   <code>--tags \"TAG1,TAG2\"<\/code>: DigitalOcean Droplet&#8217;ine etiketler ekler. Bu etiketler, Droplet&#8217;leri organize etmek ve filtrelemek i\u00e7in kullan\u0131\u015fl\u0131d\u0131r.<br \/>\n*   <code>--user-data FILE_PATH<\/code>: Droplet olu\u015fturulurken \u00e7al\u0131\u015ft\u0131r\u0131lacak cloud-init beti\u011fini i\u00e7eren bir dosyan\u0131n yolu. Bu, Droplet&#8217;in ilk \u00f6ny\u00fcklemesi s\u0131ras\u0131nda ek yap\u0131land\u0131rmalar yapmak i\u00e7in kullan\u0131labilir.<br \/>\n*   <code>--identity-file PATH_TO_SSH_KEY<\/code>: Bootstrap i\u015flemi i\u00e7in kullan\u0131lacak \u00f6zel SSH anahtar\u0131n\u0131n yolu. E\u011fer varsay\u0131lan SSH anahtar\u0131n\u0131z (\u00f6rn. <code>~\/.ssh\/id_rsa<\/code>) farkl\u0131 bir konumdaysa veya belirli bir anahtar kullanmak istiyorsan\u0131z bu parametreyi kullan\u0131n.<br \/>\n*   <code>--ssh-user USERNAME<\/code>: Bootstrap i\u015flemi i\u00e7in SSH ba\u011flant\u0131s\u0131 kurarken kullan\u0131lacak kullan\u0131c\u0131 ad\u0131 (\u00f6rn. <code>root<\/code> veya <code>ubuntu<\/code>).<\/p>\n<p><strong>\u00d6rnek Senaryo<\/strong>: Yeni bir Nginx web sunucusu Droplet&#8217;i olu\u015fturma<\/p>\n<p>\u00d6nce Nginx cookbook&#8217;unu Chef sunucunuza y\u00fckledi\u011finizden emin olun:<\/p>\n<pre><code class=\"language-bash\">knife cookbook upload nginx<\/code><\/pre>\n<p>Ard\u0131ndan, Droplet&#8217;i olu\u015fturun ve bootstrap edin:<\/p>\n<pre><code class=\"language-bash\">knife digital_ocean server create \\\n  --server-name my-nginx-webserver \\\n  --image ubuntu-20-04-x64 \\\n  --size s-1vcpu-1gb \\\n  --region fra1 \\\n  --ssh-keys \"my_chef_key\" \\\n  --run-list 'recipe[apt],recipe[nginx]' \\\n  --node-name web-prod-01 \\\n  --bootstrap \\\n  --do-public-ip \\\n  --do-private-networking \\\n  --tags web,production,nginx \\\n  --identity-file ~\/.ssh\/id_rsa \\\n  --ssh-user root<\/code><\/pre>\n<p>Bu komut, <code>fra1<\/code> b\u00f6lgesinde <code>my-nginx-webserver<\/code> ad\u0131nda bir Ubuntu 20.04 Droplet olu\u015fturacak, <code>my_chef_key<\/code> adl\u0131 SSH anahtar\u0131n\u0131 kullanarak ba\u011flanacak, Chef istemcisini kuracak, <code>apt<\/code> ve <code>nginx<\/code> tariflerini \u00e7al\u0131\u015ft\u0131racak ve Droplet&#8217;e <code>web<\/code>, <code>production<\/code>, <code>nginx<\/code> etiketlerini ekleyecektir. \u0130\u015flem tamamland\u0131\u011f\u0131nda, Droplet haz\u0131r ve Nginx web sunucusu kurulu ve \u00e7al\u0131\u015f\u0131r durumda olacakt\u0131r.<\/p>\n<p>Bootstrap i\u015flemi s\u0131ras\u0131nda, Knife SSH \u00fczerinden Droplet&#8217;e ba\u011flan\u0131r, Chef istemcisini y\u00fckler, Chef sunucusuna kaydeder ve belirtilen run list&#8217;i \u00e7al\u0131\u015ft\u0131r\u0131r. Bu s\u00fcre\u00e7, Droplet&#8217;in tamamen yap\u0131land\u0131r\u0131lm\u0131\u015f ve kullan\u0131ma haz\u0131r hale gelmesini sa\u011flar.<\/p>\n<h3>Mevcut Droplet&#8217;leri Y\u00f6netme ve Chef Entegrasyonu<\/h3>\n<p><code>knife-digitalocean<\/code> eklentisi do\u011frudan mevcut Chef d\u00fc\u011f\u00fcmleri \u00fczerinde <code>chef-client<\/code> \u00e7al\u0131\u015ft\u0131rma veya run list&#8217;i de\u011fi\u015ftirme gibi i\u015flevler sunmaz. Ancak bu t\u00fcr i\u015flemler i\u00e7in Chef&#8217;in standart <code>knife<\/code> komutlar\u0131n\u0131 kullanabilirsiniz.<\/p>\n<h4>Mevcut Bir Droplet&#8217;i Chef ile Bootstrap Etme (E\u011fer <code>--bootstrap<\/code> kullan\u0131lmad\u0131ysa)<\/h4>\n<p>E\u011fer bir Droplet&#8217;i <code>knife digital_ocean server create<\/code> komutuyla <code>--bootstrap<\/code> bayra\u011f\u0131n\u0131 kullanmadan olu\u015fturduysan\u0131z veya manuel olarak olu\u015fturulmu\u015f bir Droplet&#8217;i Chef&#8217;e dahil etmek istiyorsan\u0131z, standart <code>knife bootstrap<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">knife bootstrap PUBLIC_IP_ADDRESS \\\n  --ssh-user root \\\n  --identity-file ~\/.ssh\/id_rsa \\\n  --node-name existing-droplet-node \\\n  --run-list 'recipe[my_base_config]'<\/code><\/pre>\n<p>*   <code>PUBLIC_IP_ADDRESS<\/code>: Droplet&#8217;in genel IP adresi.<br \/>\n*   <code>--ssh-user<\/code>: SSH ba\u011flant\u0131s\u0131 i\u00e7in kullan\u0131lacak kullan\u0131c\u0131 ad\u0131 (\u00f6rn. <code>root<\/code>, <code>ubuntu<\/code>).<br \/>\n*   <code>--identity-file<\/code>: SSH \u00f6zel anahtar dosyan\u0131z\u0131n yolu.<br \/>\n*   <code>--node-name<\/code>: Chef sunucusunda olu\u015fturulacak d\u00fc\u011f\u00fcm\u00fcn ad\u0131.<br \/>\n*   <code>--run-list<\/code>: \u0130lk Chef \u00e7al\u0131\u015ft\u0131rmas\u0131 i\u00e7in uygulanacak tarifler veya roller.<\/p>\n<h4>Chef D\u00fc\u011f\u00fcmlerinin Run List&#8217;ini G\u00fcncelleme<\/h4>\n<p>Mevcut bir Chef d\u00fc\u011f\u00fcm\u00fcn\u00fcn run list&#8217;ini g\u00fcncellemek i\u00e7in <code>knife node run_list<\/code> komutunu kullanabilirsiniz:<\/p>\n<pre><code class=\"language-bash\"># Yeni bir tarif ekleme\nknife node run_list add web-prod-01 'recipe[new_feature]'\n\n<h2>Mevcut bir tarifi kald\u0131rma<\/h2>\nknife node run_list remove web-prod-01 'recipe[old_feature]'\n\n<h2>T\u00fcm run list'i ayarlama<\/h2>\nknife node run_list set web-prod-01 'recipe[apt],recipe[nginx],recipe[new_feature]'<\/code><\/pre>\n<p>Bu komutlar Chef sunucusundaki d\u00fc\u011f\u00fcm objesini g\u00fcnceller. De\u011fi\u015fikliklerin Droplet \u00fczerinde uygulanmas\u0131 i\u00e7in <code>chef-client<\/code>&#8216;\u0131n \u00e7al\u0131\u015ft\u0131r\u0131lmas\u0131 gerekir.<\/p>\n<h4>Bir Droplet \u00dczerinde Chef Client&#8217;\u0131 \u00c7al\u0131\u015ft\u0131rma<\/h4>\n<p>Bir Droplet \u00fczerinde <code>chef-client<\/code>&#8216;\u0131 manuel olarak \u00e7al\u0131\u015ft\u0131rmak i\u00e7in <code>knife ssh<\/code> komutunu kullanabilirsiniz. Bu komut, belirtilen bir sorguya uyan t\u00fcm d\u00fc\u011f\u00fcmlerde SSH \u00fczerinden komut \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<pre><code class=\"language-bash\">knife ssh 'name:web-prod-01' 'sudo chef-client' \\\n  --ssh-user root \\\n  --identity-file ~\/.ssh\/id_rsa<\/code><\/pre>\n<p>*   <code>'name:web-prod-01'<\/code>: Chef sunucusunda <code>web-prod-01<\/code> adl\u0131 d\u00fc\u011f\u00fcm\u00fc hedefleyen bir sorgu. Daha karma\u015f\u0131k sorgular i\u00e7in <code>knife search node<\/code> komutunu inceleyebilirsiniz.<br \/>\n*   <code>'sudo chef-client'<\/code>: Hedef Droplet \u00fczerinde \u00e7al\u0131\u015ft\u0131r\u0131lacak komut.<br \/>\n*   <code>--ssh-user<\/code> ve <code>--identity-file<\/code>: SSH ba\u011flant\u0131s\u0131 i\u00e7in gerekli kimlik bilgileri.<\/p>\n<p>Bu komut, <code>web-prod-01<\/code> d\u00fc\u011f\u00fcm\u00fcne ba\u011flanacak ve <code>sudo chef-client<\/code> komutunu \u00e7al\u0131\u015ft\u0131rarak Chef sunucusundan en son yap\u0131land\u0131rma de\u011fi\u015fikliklerini al\u0131p uygulamas\u0131n\u0131 sa\u011flayacakt\u0131r.<\/p>\n<h3>Droplet Silme<\/h3>\n<p>Bir Droplet&#8217;i DigitalOcean hesab\u0131n\u0131zdan ve ayn\u0131 zamanda Chef sunucusundan kald\u0131rmak i\u00e7in <code>knife digital_ocean server delete<\/code> komutunu kullanabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">knife digital_ocean server delete SERVER_NAME_OR_ID \\\n  --purge<\/code><\/pre>\n<p>*   <code>SERVER_NAME_OR_ID<\/code>: Silinecek Droplet&#8217;in ad\u0131 veya ID&#8217;si. <code>knife digital_ocean server list<\/code> komutuyla bulabilirsiniz.<br \/>\n*   <code>--purge<\/code>: Bu \u00f6nemli bayrak, Droplet&#8217;i DigitalOcean&#8217;dan sildikten sonra, ilgili d\u00fc\u011f\u00fcm ve istemci (client) nesnelerini Chef sunucusundan da kald\u0131r\u0131r. Bu, Chef sunucunuzu temiz tutmak i\u00e7in \u00f6nemlidir.<\/p>\n<p><strong>\u00d6rnek<\/strong>: <code>my-nginx-webserver<\/code> adl\u0131 Droplet&#8217;i silme:<\/p>\n<pre><code class=\"language-bash\">knife digital_ocean server delete my-nginx-webserver --purge<\/code><\/pre>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda, Knife sizden onay isteyecektir:<\/p>\n<pre><code class=\"language-\">Do you really want to delete this server? (Y\/N)<\/code><\/pre>\n<p><code>Y<\/code> yaz\u0131p Enter tu\u015funa basarak silme i\u015flemini onaylayabilirsiniz. Bu i\u015flem, Droplet&#8217;i DigitalOcean&#8217;dan kal\u0131c\u0131 olarak kald\u0131racak ve Chef sunucusundaki kar\u015f\u0131l\u0131k gelen d\u00fc\u011f\u00fcm kayd\u0131n\u0131 silecektir.<\/p>\n<h3>Geli\u015fmi\u015f Senaryolar ve \u0130pu\u00e7lar\u0131<\/h3>\n<p><code>knife-digitalocean<\/code> ve Chef entegrasyonunu daha verimli kullanmak i\u00e7in baz\u0131 geli\u015fmi\u015f ipu\u00e7lar\u0131 ve senaryolar:<\/p>\n<h4><code>knife.rb<\/code> Dosyas\u0131nda Varsay\u0131lanlar\u0131 Tan\u0131mlama<\/h4>\n<p>S\u0131k kulland\u0131\u011f\u0131n\u0131z <code>image<\/code>, <code>size<\/code>, <code>region<\/code> veya <code>ssh-keys<\/code> gibi parametreleri <code>knife.rb<\/code> dosyan\u0131zda varsay\u0131lan olarak tan\u0131mlayabilirsiniz. Bu, <code>knife digital_ocean server create<\/code> komutunu her \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda bu parametreleri tekrar tekrar yazmaktan sizi kurtar\u0131r.<\/p>\n<pre><code class=\"language-ruby\"># knife.rb dosyan\u0131zda\ndigital_ocean_image \"ubuntu-20-04-x64\"\ndigital_ocean_size \"s-1vcpu-1gb\"\ndigital_ocean_region \"fra1\"\ndigital_ocean_ssh_keys \"my_chef_key\"\ndigital_ocean_ssh_user \"root\" # veya \"ubuntu\"\ndigital_ocean_identity_file \"~\/.ssh\/id_rsa\"<\/code><\/pre>\n<p>Bu varsay\u0131lanlar\u0131 komut sat\u0131r\u0131nda <code>--image<\/code>, <code>--size<\/code> vb. ile ge\u00e7ersiz k\u0131labilirsiniz.<\/p>\n<h4>Otomatikle\u015ftirme ve CI\/CD Entegrasyonu<\/h4>\n<p>Chef ve <code>knife-digitalocean<\/code> ikilisi, altyap\u0131 da\u011f\u0131t\u0131m\u0131n\u0131 otomatikle\u015ftirmenin temelini olu\u015fturur. Bash betikleri veya Ruby programlar\u0131 kullanarak Droplet olu\u015fturma, yap\u0131land\u0131rma ve silme i\u015flemlerini CI\/CD (S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m) boru hatlar\u0131n\u0131za entegre edebilirsiniz. \u00d6rne\u011fin, yeni bir uygulama s\u00fcr\u00fcm\u00fc da\u011f\u0131t\u0131ld\u0131\u011f\u0131nda otomatik olarak yeni sunucular olu\u015fturup yap\u0131land\u0131rabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">#!\/bin\/bash\n\n<h2>Yeni bir web sunucusu Droplet olu\u015ftur ve yap\u0131land\u0131r<\/h2>\nknife digital_ocean server create \\\n  --server-name \"web-app-$(date +%s)\" \\\n  --image ubuntu-20-04-x64 \\\n  --size s-1vcpu-1gb \\\n  --region fra1 \\\n  --ssh-keys \"my_chef_key\" \\\n  --run-list 'role[web_server]' \\\n  --node-name \"web-app-$(date +%s)\" \\\n  --bootstrap \\\n  --do-public-ip \\\n  --tags web,app,ci-cd<\/code><\/pre>\n<p>Bu t\u00fcr betikler, h\u0131zl\u0131 ve tutarl\u0131 da\u011f\u0131t\u0131mlar i\u00e7in paha bi\u00e7ilmezdir.<\/p>\n<h4>SSH Anahtar\u0131 Y\u00f6netimi<\/h4>\n<p>DigitalOcean hesab\u0131n\u0131za SSH anahtar\u0131 eklemek ve bu anahtarlar\u0131 <code>knife<\/code> ile kullanmak kritik \u00f6neme sahiptir.<br \/>\n1.  <strong>Anahtar Olu\u015fturma<\/strong>: <code>ssh-keygen -t rsa -b 4096<\/code> komutuyla yeni bir SSH anahtar\u0131 \u00e7ifti olu\u015fturun.<br \/>\n2.  <strong>DigitalOcean&#8217;a Y\u00fckleme<\/strong>: Genel anahtar\u0131n\u0131z\u0131 (<code>id_rsa.pub<\/code> gibi) DigitalOcean kontrol panelindeki &#8220;Security&#8221; -> &#8220;SSH Keys&#8221; b\u00f6l\u00fcm\u00fcnden y\u00fckleyin. Y\u00fcklerken anahtara bir isim verin (\u00f6rn. &#8220;My Chef Key&#8221;).<br \/>\n3.  <strong><code>knife<\/code> ile Kullan\u0131m<\/strong>: Droplet olu\u015ftururken <code>--ssh-keys \"My Chef Key\"<\/code> ve bootstrap ederken <code>--identity-file ~\/.ssh\/id_rsa<\/code> parametrelerini kullanarak bu anahtar\u0131 belirtin.<\/p>\n<h4>Hata Ay\u0131klama ve Sorun Giderme<\/h4>\n<p>*   <strong>API Token Hatalar\u0131<\/strong>: &#8220;Unauthorized&#8221; veya &#8220;Authentication failed&#8221; gibi hatalar al\u0131yorsan\u0131z, API token&#8217;\u0131n\u0131z\u0131n do\u011fru oldu\u011fundan, s\u00fcresinin dolmad\u0131\u011f\u0131ndan ve gerekli izinlere (Read\/Write) sahip oldu\u011fundan emin olun. Ortam de\u011fi\u015fkeninin do\u011fru ayarland\u0131\u011f\u0131n\u0131 kontrol edin.<br \/>\n*   <strong>SSH Ba\u011flant\u0131 Hatalar\u0131<\/strong>: &#8220;Permission denied&#8221; veya &#8220;Connection refused&#8221; gibi hatalar al\u0131yorsan\u0131z, SSH anahtar\u0131n\u0131z\u0131n DigitalOcean Droplet&#8217;ine eklenip eklenmedi\u011fini, <code>--ssh-user<\/code> ve <code>--identity-file<\/code> parametrelerinin do\u011fru oldu\u011fundan emin olun. Ayr\u0131ca, Droplet&#8217;in g\u00fcvenlik duvar\u0131 kurallar\u0131n\u0131n SSH (port 22) ba\u011flant\u0131s\u0131na izin verdi\u011finden emin olun.<br \/>\n*   <strong>Chef Bootstrap Hatalar\u0131<\/strong>: Chef istemcisi kurulurken veya run list \u00e7al\u0131\u015ft\u0131r\u0131l\u0131rken bir hata olu\u015fursa, \u00e7\u0131kt\u0131y\u0131 dikkatlice inceleyin. Genellikle eksik ba\u011f\u0131ml\u0131l\u0131klar, yanl\u0131\u015f tarif isimleri veya izin sorunlar\u0131 gibi nedenlerden kaynaklan\u0131r. <code>--verbosity debug<\/code> bayra\u011f\u0131n\u0131 kullanarak daha detayl\u0131 \u00e7\u0131kt\u0131 alabilirsiniz.<\/p>\n<pre><code class=\"language-bash\">knife digital_ocean server create ... --bootstrap --verbosity debug<\/code><\/pre>\n<h4>DigitalOcean Etiketleri (Tags) Kullan\u0131m\u0131<\/h4>\n<p>Droplet&#8217;lerinize etiketler eklemek (<code>--tags web,database<\/code>), altyap\u0131n\u0131z\u0131 daha iyi organize etmenizi sa\u011flar. Bu etiketleri daha sonra <code>knife digital_ocean server list --tags web<\/code> gibi komutlarla filtrelemek veya DigitalOcean kontrol panelinde Droplet&#8217;leri gruplamak i\u00e7in kullanabilirsiniz. Ayr\u0131ca Chef ile entegrasyonda, belirli etiketlere sahip Droplet&#8217;leri hedefleyen Chef arama sorgular\u0131 olu\u015fturmak i\u00e7in de faydal\u0131d\u0131r.<\/p>\n<h3>G\u00fcvenlik Hususlar\u0131<\/h3>\n<p>Altyap\u0131n\u0131z\u0131 otomatikle\u015ftirirken g\u00fcvenlik her zaman en \u00f6ncelikli konulardan biri olmal\u0131d\u0131r.<\/p>\n<p>1.  <strong>API Token G\u00fcvenli\u011fi<\/strong>: DigitalOcean API token&#8217;\u0131n\u0131z, hesab\u0131n\u0131z\u0131n anahtar\u0131d\u0131r. Asla a\u00e7\u0131k metin olarak veya versiyon kontrol sistemlerine (Git) y\u00fcklenmi\u015f bir dosyada saklamay\u0131n. Ortam de\u011fi\u015fkenleri veya Chef Vault gibi g\u00fcvenli depolama \u00e7\u00f6z\u00fcmleri kullan\u0131n. Token&#8217;a yaln\u0131zca kesinlikle gerekli olan izinleri verin (\u00f6rne\u011fin, sadece okuma izni yeterliyse yazma izni vermeyin).<br \/>\n2.  <strong>SSH Anahtar G\u00fcvenli\u011fi<\/strong>: \u00d6zel SSH anahtarlar\u0131n\u0131z\u0131 (<code>id_rsa<\/code> gibi) her zaman g\u00fcvenli bir \u015fekilde saklay\u0131n ve do\u011fru dosya izinlerine sahip olduklar\u0131ndan emin olun (\u00f6rn. <code>chmod 400 ~\/.ssh\/id_rsa<\/code>). Anahtarlar\u0131n\u0131z\u0131 parola ile koruyun.<br \/>\n3.  <strong>A\u011f G\u00fcvenli\u011fi<\/strong>: Droplet&#8217;leriniz i\u00e7in g\u00fcvenlik duvar\u0131 kurallar\u0131n\u0131 (DigitalOcean Firewall veya iptables\/ufw gibi Droplet i\u00e7i g\u00fcvenlik duvarlar\u0131) do\u011fru yap\u0131land\u0131r\u0131n. Yaln\u0131zca gerekli portlar\u0131 ve IP adreslerini a\u00e7\u0131n. \u00d6zel a\u011f (private networking) \u00f6zelli\u011fini kullanarak Droplet&#8217;ler aras\u0131 ileti\u015fimi daha g\u00fcvenli hale getirin.<br \/>\n4.  <strong>Chef Sunucusu G\u00fcvenli\u011fi<\/strong>: Chef sunucunuzun g\u00fcvenli\u011fini sa\u011flay\u0131n, yaln\u0131zca yetkili kullan\u0131c\u0131lar\u0131n ve d\u00fc\u011f\u00fcmlerin eri\u015fmesine izin verin. Chef istemci anahtarlar\u0131n\u0131 d\u00fczenli olarak d\u00f6nd\u00fcr\u00fcn.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Chef&#8217;in <code>knife-digitalocean<\/code> eklentisi, DigitalOcean \u00fczerindeki altyap\u0131n\u0131z\u0131 Chef ile entegre etmenin ve &#8220;altyap\u0131 kodu&#8221; prensibini uygulaman\u0131n g\u00fc\u00e7l\u00fc ve verimli bir yolunu sunar. Bu makalede ele al\u0131nan ad\u0131mlar\u0131 izleyerek, Droplet&#8217;lerinizi otomatik olarak olu\u015fturabilir, Chef tariflerinizle yap\u0131land\u0131rabilir ve ya\u015fam d\u00f6ng\u00fclerini y\u00f6netebilirsiniz. Bu entegrasyon, altyap\u0131 da\u011f\u0131t\u0131m s\u00fcre\u00e7lerinizi h\u0131zland\u0131r\u0131r, tutarl\u0131l\u0131\u011f\u0131 art\u0131r\u0131r ve insan hatas\u0131 olas\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r.<\/p>\n<p>Otomasyonun getirdi\u011fi bu avantajlar, geli\u015ftiricilerin ve operasyon ekiplerinin daha karma\u015f\u0131k ve de\u011ferli g\u00f6revlere odaklanmas\u0131n\u0131 sa\u011flar. <code>knife-digitalocean<\/code> eklentisi, basit bir web sunucusu kurmaktan, birden fazla bile\u015fene sahip karma\u015f\u0131k bir uygulama y\u0131\u011f\u0131n\u0131 da\u011f\u0131tmaya kadar geni\u015f bir yelpazedeki ihtiya\u00e7lar\u0131 kar\u015f\u0131layabilir. Dijital d\u00f6n\u00fc\u015f\u00fcm \u00e7a\u011f\u0131nda, bulut altyap\u0131n\u0131z\u0131 bu t\u00fcr ara\u00e7larla y\u00f6netmek, rekabet avantaj\u0131 sa\u011flamak ve i\u015f s\u00fcre\u00e7lerinizi optimize etmek i\u00e7in kritik bir ad\u0131md\u0131r. Bu yetenekleri ke\u015ffetmeye ve kendi altyap\u0131 otomasyon stratejilerinize entegre etmeye devam edin.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Chef ile DigitalOcean Droplet&#8217;lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma Rehberi\nBulut bili\u015fim, modern altyap\u0131 y\u00f6netiminin tem","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1401],"tags":[],"class_list":{"0":"post-31482","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-git","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Chef ile DigitalOcean Droplet&#039;lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma 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\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Chef ile DigitalOcean Droplet&#039;lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Chef ile DigitalOcean Droplet&#039;lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma Rehberi Bulut bili\u015fim, modern altyap\u0131 y\u00f6netiminin tem\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-10T08:41:11+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=\"19 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Chef ile DigitalOcean Droplet&#8217;lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma Rehberi\",\"datePublished\":\"2025-10-10T08:41:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/\"},\"wordCount\":3189,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Git\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/\",\"name\":\"Chef ile DigitalOcean Droplet'lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-10T08:41:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Chef ile DigitalOcean Droplet&#8217;lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma 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":"Chef ile DigitalOcean Droplet'lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma 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\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Chef ile DigitalOcean Droplet'lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma Rehberi","og_description":"Chef ile DigitalOcean Droplet'lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma Rehberi Bulut bili\u015fim, modern altyap\u0131 y\u00f6netiminin tem","og_url":"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-10T08:41:11+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"19 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Chef ile DigitalOcean Droplet&#8217;lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma Rehberi","datePublished":"2025-10-10T08:41:11+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/"},"wordCount":3189,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Git"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/","name":"Chef ile DigitalOcean Droplet'lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-10T08:41:11+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/chef-ile-digitalocean-dropletlerini-yonetmek-icin-knife-digitalocean-eklentisini-kullanma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Chef ile DigitalOcean Droplet&#8217;lerini Y\u00f6netmek i\u00e7in Knife DigitalOcean Eklentisini Kullanma 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\/31482","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=31482"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31482\/revisions"}],"predecessor-version":[{"id":31483,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31482\/revisions\/31483"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31482"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31482"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31482"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}