{"id":31569,"date":"2025-10-11T10:41:18","date_gmt":"2025-10-11T07:41:18","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=31569"},"modified":"2025-10-11T10:41:18","modified_gmt":"2025-10-11T07:41:18","slug":"digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/","title":{"rendered":"DigitalOcean Ubuntu 16.04 Droplet&#8217;lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek"},"content":{"rendered":"<p><body><\/p>\n<h2>DigitalOcean Ubuntu 16.04 Droplet&#8217;lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek<\/h2>\n<h2>Giri\u015f: Otomatik \u00d6l\u00e7eklendirme Neden \u00d6nemli?<\/h2>\n<p>Modern web uygulamalar\u0131, kullan\u0131c\u0131 taleplerindeki ani art\u0131\u015flar veya d\u00fc\u015f\u00fc\u015flerle ba\u015fa \u00e7\u0131kmak zorundad\u0131r. Bir e-ticaret sitesinin Kara Cuma indirimi s\u0131ras\u0131nda ya\u015fad\u0131\u011f\u0131 trafik patlamas\u0131 ya da bir haber sitesinin g\u00fcndemdeki s\u0131cak bir geli\u015fmeyle aniden pop\u00fclerle\u015fmesi gibi senaryolarda, uygulaman\u0131n performans\u0131n\u0131 ve kullan\u0131labilirli\u011fini korumak hayati \u00f6nem ta\u015f\u0131r. Geleneksel olarak, bu t\u00fcr durumlar i\u00e7in sunucu kapasitesini manuel olarak art\u0131rmak veya azaltmak, zaman al\u0131c\u0131, hataya a\u00e7\u0131k ve verimsiz bir s\u00fcre\u00e7tir. Bu noktada, otomatik \u00f6l\u00e7eklendirme devreye girer.<\/p>\n<p>Otomatik \u00f6l\u00e7eklendirme, bir uygulaman\u0131n veya hizmetin de\u011fi\u015fen i\u015f y\u00fck\u00fcne g\u00f6re kaynaklar\u0131n\u0131 (sunucular, veritabanlar\u0131 vb.) dinamik olarak ayarlama yetene\u011fidir. Bu, uygulaman\u0131z\u0131n her zaman yeterli kayna\u011fa sahip olmas\u0131n\u0131 sa\u011flarken, ayn\u0131 zamanda gereksiz kaynak kullan\u0131m\u0131n\u0131 \u00f6nleyerek maliyetleri optimize eder. DigitalOcean gibi bulut sa\u011flay\u0131c\u0131lar\u0131, bu s\u00fcreci kolayla\u015ft\u0131rmak i\u00e7in g\u00fc\u00e7l\u00fc API&#8217;ler ve entegre hizmetler sunar. Ubuntu 16.04 Droplet&#8217;leri \u00fczerinde \u00e7al\u0131\u015fan bir web uygulamas\u0131n\u0131n otomatik \u00f6l\u00e7eklendirmesini ele al\u0131rken, bu eski i\u015fletim sistemi s\u00fcr\u00fcm\u00fcn\u00fcn baz\u0131 g\u00fcncel yakla\u015f\u0131mlarla tam uyumlu olmayabilece\u011fini, ancak temel prensiplerin ayn\u0131 kald\u0131\u011f\u0131n\u0131 belirtmek \u00f6nemlidir. G\u00fcvenlik ve performans i\u00e7in her zaman daha g\u00fcncel Ubuntu s\u00fcr\u00fcmlerini (\u00f6rne\u011fin 20.04 veya 22.04) kullanman\u0131z \u015fiddetle tavsiye edilir.<\/p>\n<p>Otomatik \u00f6l\u00e7eklendirmenin temel faydalar\u0131 \u015funlard\u0131r:<br \/>\n*   <strong>Performans ve Kullan\u0131labilirlik:<\/strong> Y\u00fcksek trafik anlar\u0131nda bile uygulaman\u0131z\u0131n h\u0131zl\u0131 ve duyarl\u0131 kalmas\u0131n\u0131 sa\u011flar, kullan\u0131c\u0131 deneyimini iyile\u015ftirir.<br \/>\n*   <strong>Maliyet Optimizasyonu:<\/strong> Sadece ihtiyac\u0131n\u0131z olan kaynaklar i\u00e7in \u00f6deme yapman\u0131z\u0131 sa\u011flar. D\u00fc\u015f\u00fck trafik d\u00f6nemlerinde gereksiz sunucular\u0131 kapatarak maliyetleri d\u00fc\u015f\u00fcr\u00fcr.<br \/>\n*   <strong>Esneklik ve \u00c7eviklik:<\/strong> Uygulaman\u0131z\u0131n de\u011fi\u015fen taleplere h\u0131zla uyum sa\u011flamas\u0131na olanak tan\u0131r, geli\u015ftiricilerin altyap\u0131 y\u00f6netiminden \u00e7ok uygulama geli\u015ftirmeye odaklanmas\u0131n\u0131 sa\u011flar.<br \/>\n*   <strong>Hata Tolerans\u0131:<\/strong> Bir sunucunun \u00e7\u00f6kmesi durumunda, otomatik \u00f6l\u00e7eklendirme yeni bir sunucuyu h\u0131zla devreye alarak hizmet kesintisini minimize edebilir.<\/p>\n<h2>\u00d6l\u00e7eklendirme Temelleri: Dikey ve Yatay Yakla\u015f\u0131mlar<\/h2>\n<p>Web uygulamalar\u0131n\u0131 \u00f6l\u00e7eklendirmenin iki ana yolu vard\u0131r: dikey ve yatay \u00f6l\u00e7eklendirme. Otomatik \u00f6l\u00e7eklendirme genellikle yatay yakla\u015f\u0131ma odaklan\u0131r.<\/p>\n<h3>Dikey \u00d6l\u00e7eklendirme (Vertical Scaling)<\/h3>\n<p>Dikey \u00f6l\u00e7eklendirme, mevcut bir sunucunun kaynaklar\u0131n\u0131 (CPU, RAM, depolama) art\u0131rarak kapasitesini y\u00fckseltmektir. \u00d6rne\u011fin, bir Droplet&#8217;i daha g\u00fc\u00e7l\u00fc bir pakete y\u00fckseltmek dikey \u00f6l\u00e7eklendirmedir.<\/p>\n<p><strong>Avantajlar\u0131:<\/strong><br \/>\n*   Uygulama mimarisinde genellikle daha az de\u011fi\u015fiklik gerektirir.<br \/>\n*   Tek bir sunucuyu y\u00f6netmek daha basittir.<\/p>\n<p><strong>Dezavantajlar\u0131:<\/strong><br \/>\n*   Tek bir sunucunun ula\u015fabilece\u011fi bir \u00fcst s\u0131n\u0131r vard\u0131r. Sonsuz \u00f6l\u00e7eklenemez.<br \/>\n*   Y\u00fckseltme s\u0131ras\u0131nda genellikle k\u0131sa bir kesinti ya\u015fan\u0131r.<br \/>\n*   Tek bir hata noktas\u0131 olu\u015fturur; sunucu \u00e7\u00f6kerse uygulama tamamen \u00e7evrimd\u0131\u015f\u0131 kal\u0131r.<br \/>\n*   Maliyetleri h\u0131zla art\u0131rabilir, \u00e7\u00fcnk\u00fc daha b\u00fcy\u00fck sunucular orant\u0131s\u0131z \u015fekilde daha pahal\u0131 olabilir.<\/p>\n<h3>Yatay \u00d6l\u00e7eklendirme (Horizontal Scaling)<\/h3>\n<p>Yatay \u00f6l\u00e7eklendirme, mevcut sunucular\u0131n kaynaklar\u0131n\u0131 art\u0131rmak yerine, sisteme daha fazla sunucu (Droplet) ekleyerek kapasiteyi geni\u015fletmektir. Y\u00fck dengeleyiciler (Load Balancers) gelen trafi\u011fi bu sunucular aras\u0131nda da\u011f\u0131t\u0131r.<\/p>\n<p><strong>Avantajlar\u0131:<\/strong><br \/>\n*   Neredeyse s\u0131n\u0131rs\u0131z \u00f6l\u00e7eklenebilirlik potansiyeli sunar.<br \/>\n*   Hata tolerans\u0131n\u0131 art\u0131r\u0131r; bir sunucu \u00e7\u00f6kerse di\u011ferleri hizmet vermeye devam eder.<br \/>\n*   Maliyet etkinli\u011fi sa\u011flar, \u00e7\u00fcnk\u00fc ihtiyaca g\u00f6re k\u00fc\u00e7\u00fck sunucular ekleyip \u00e7\u0131karabilirsiniz.<br \/>\n*   Kesintisiz y\u00fckseltmeler ve bak\u0131mlar i\u00e7in daha uygundur.<\/p>\n<p><strong>Dezavantajlar\u0131:<\/strong><br \/>\n*   Uygulaman\u0131n durumsuz (stateless) olmas\u0131 gerekir.<br \/>\n*   Daha karma\u015f\u0131k bir altyap\u0131 y\u00f6netimi ve da\u011f\u0131t\u0131m gerektirir.<br \/>\n*   Y\u00fck dengeleyici ve payla\u015f\u0131ml\u0131 depolama gibi ek bile\u015fenler gerektirir.<\/p>\n<h3>Durumsuz (Stateless) ve Durumlu (Stateful) Uygulamalar<\/h3>\n<p>Yatay \u00f6l\u00e7eklendirme i\u00e7in uygulaman\u0131z\u0131n <strong>durumsuz<\/strong> olmas\u0131 kritik bir \u00f6neme sahiptir. Durumsuz bir uygulama, her iste\u011fi ba\u011f\u0131ms\u0131z olarak i\u015fler ve \u00f6nceki isteklerden veya belirli bir sunucunun yerel durumundan herhangi bir bilgiye ihtiya\u00e7 duymaz. Kullan\u0131c\u0131 oturum bilgileri, al\u0131\u015fveri\u015f sepeti verileri gibi durum bilgileri, merkezi bir veritaban\u0131 (PostgreSQL, MySQL), bir \u00f6nbellek (Redis, Memcached) veya bir oturum deposu (\u00f6rne\u011fin, veritaban\u0131 destekli oturumlar) gibi harici bir depolama mekanizmas\u0131nda tutulmal\u0131d\u0131r.<\/p>\n<p><strong>Durumlu<\/strong> bir uygulama ise, belirli bir sunucuya ba\u011fl\u0131 kal\u0131r ve o sunucunun yerel belle\u011finde veya dosya sisteminde durum bilgileri tutar. Bu t\u00fcr uygulamalar, yatay \u00f6l\u00e7eklendirme i\u00e7in uygun de\u011fildir, \u00e7\u00fcnk\u00fc bir kullan\u0131c\u0131 bir sunucuya ba\u011fland\u0131ktan sonra, ba\u015fka bir sunucuya y\u00f6nlendirilirse \u00f6nceki durum bilgilerini kaybedebilir.<\/p>\n<p>Veritabanlar\u0131 genellikle durumlu bile\u015fenlerdir. Bunlar\u0131 yatay olarak \u00f6l\u00e7eklendirmek daha karma\u015f\u0131kt\u0131r (\u00f6rne\u011fin, okuma replikalar\u0131, sharding) ve genellikle y\u00f6netilen hizmetler (DigitalOcean Managed Databases) kullan\u0131larak veya ayr\u0131 bir uzmanl\u0131k gerektiren \u00e7\u00f6z\u00fcmlerle ele al\u0131n\u0131r.<\/p>\n<h2>DigitalOcean Ortam\u0131n\u0131n Temel Bile\u015fenleri<\/h2>\n<p>DigitalOcean, web uygulamalar\u0131n\u0131z\u0131 \u00f6l\u00e7eklendirmek i\u00e7in bir dizi hizmet sunar.<\/p>\n<h3>Droplet&#8217;ler (Ubuntu 16.04)<\/h3>\n<p>Droplet&#8217;ler, DigitalOcean&#8217;\u0131n sanal \u00f6zel sunucular\u0131d\u0131r (VPS). Web uygulaman\u0131z\u0131n kodunu ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 bar\u0131nd\u0131racak temel i\u015flem birimleridir. \u0130stek gereksinimi artt\u0131\u011f\u0131nda yeni Droplet&#8217;ler olu\u015fturulur, azald\u0131\u011f\u0131nda ise kald\u0131r\u0131l\u0131r. Ubuntu 16.04, uzun zaman \u00f6nce ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn sonuna (End of Life &#8211; EOL) ula\u015fm\u0131\u015f bir i\u015fletim sistemi s\u00fcr\u00fcm\u00fcd\u00fcr. G\u00fcvenlik g\u00fcncellemeleri almad\u0131\u011f\u0131 i\u00e7in \u00fcretim ortamlar\u0131nda kullan\u0131lmas\u0131 risklidir. Ancak bu makalenin konusu gere\u011fi, 16.04 Droplet&#8217;leri \u00fczerinde otomasyonu anlataca\u011f\u0131z. Temel prensipler daha yeni Ubuntu s\u00fcr\u00fcmleriyle de ayn\u0131d\u0131r.<\/p>\n<h3>Y\u00fck Dengeleyiciler (Load Balancers)<\/h3>\n<p>Y\u00fck dengeleyiciler, gelen a\u011f trafi\u011fini birden fazla Droplet aras\u0131nda da\u011f\u0131tan kritik bile\u015fenlerdir. Uygulaman\u0131z\u0131n tek bir hata noktas\u0131 olmas\u0131n\u0131 engeller ve trafi\u011fi Droplet&#8217;lerinizin kapasitesine g\u00f6re e\u015fit \u015fekilde da\u011f\u0131tarak performans\u0131 art\u0131r\u0131r. DigitalOcean Y\u00fck Dengeleyiciler, otomatik SSL sonland\u0131rma, sa\u011fl\u0131k kontrolleri ve farkl\u0131 da\u011f\u0131t\u0131m algoritmalar\u0131 (round robin, least connections) gibi \u00f6zellikler sunar. Otomatik \u00f6l\u00e7eklendirme senaryosunda, yeni olu\u015fturulan Droplet&#8217;ler otomatik olarak y\u00fck dengeleyiciye eklenmeli, silinenler ise \u00e7\u0131kar\u0131lmal\u0131d\u0131r.<\/p>\n<h3>Y\u00f6netilen Veritabanlar\u0131 (Managed Databases)<\/h3>\n<p>Uygulaman\u0131z\u0131n durum bilgisini depolayan veritabanlar\u0131, yatay \u00f6l\u00e7eklendirme i\u00e7in genellikle ayr\u0131 bir katmanda, y\u00f6netilen bir hizmet olarak kullan\u0131lmal\u0131d\u0131r. DigitalOcean, PostgreSQL, MySQL ve Redis gibi pop\u00fcler veritabanlar\u0131 i\u00e7in y\u00f6netilen hizmetler sunar. Bu hizmetler, otomatik yedekleme, replikasyon, \u00f6l\u00e7eklendirme ve g\u00fcvenlik gibi karma\u015f\u0131k y\u00f6netim g\u00f6revlerini sizin yerinize halleder. Uygulaman\u0131z\u0131n Droplet&#8217;leri durumsuz kal\u0131rken, veritaban\u0131n\u0131z kendi ba\u015f\u0131na \u00f6l\u00e7eklenebilir ve y\u00fcksek kullan\u0131labilirlik sunar.<\/p>\n<h3>DigitalOcean Spaces (Nesne Depolama)<\/h3>\n<p>Statik dosyalar (resimler, CSS, JavaScript), kullan\u0131c\u0131 y\u00fcklemeleri veya uygulama g\u00fcnl\u00fckleri gibi veriler i\u00e7in DigitalOcean Spaces gibi bir nesne depolama hizmeti kullanmak \u00f6nemlidir. Bu, Droplet&#8217;lerinizin yerel depolama alan\u0131na ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 ortadan kald\u0131r\u0131r ve t\u00fcm Droplet&#8217;lerin ayn\u0131 verilere eri\u015fmesini sa\u011flar. Spaces, S3 uyumlu bir API sunar ve y\u00fcksek \u00f6l\u00e7eklenebilirlik, dayan\u0131kl\u0131l\u0131k ve d\u00fc\u015f\u00fck maliyet avantajlar\u0131 sunar.<\/p>\n<h3>Anl\u0131k G\u00f6r\u00fcnt\u00fcler (Snapshots) ve Yedeklemeler (Backups)<\/h3>\n<p>Anl\u0131k g\u00f6r\u00fcnt\u00fcler (Snapshots), bir Droplet&#8217;in t\u00fcm disk i\u00e7eri\u011finin bir kopyas\u0131d\u0131r. Otomatik \u00f6l\u00e7eklendirme i\u00e7in, uygulaman\u0131z\u0131n y\u00fckl\u00fc ve yap\u0131land\u0131r\u0131lm\u0131\u015f oldu\u011fu &#8220;alt\u0131n bir imaj&#8221; (golden image) olu\u015fturmak i\u00e7in bir anl\u0131k g\u00f6r\u00fcnt\u00fc kullanmak \u00e7ok etkilidir. Yeni bir Droplet olu\u015fturuldu\u011funda, bu anl\u0131k g\u00f6r\u00fcnt\u00fcden ba\u015flat\u0131larak h\u0131zla kullan\u0131ma haz\u0131r hale getirilebilir. Yedeklemeler ise felaket kurtarma ve veri kayb\u0131n\u0131 \u00f6nlemek i\u00e7in d\u00fczenli olarak al\u0131nan Droplet kopyalar\u0131d\u0131r.<\/p>\n<h3>Etiketleme (Tagging)<\/h3>\n<p>DigitalOcean&#8217;da kaynaklar\u0131 (Droplet&#8217;ler, Y\u00fck Dengeleyiciler vb.) etiketlemek, onlar\u0131 grupland\u0131rmak ve y\u00f6netmek i\u00e7in kullan\u0131\u015fl\u0131 bir yoldur. Otomatik \u00f6l\u00e7eklendirme senaryosunda, bir web uygulamas\u0131n\u0131n t\u00fcm Droplet&#8217;lerini belirli bir etiketle (\u00f6rne\u011fin, <code>web-app-prod<\/code>) i\u015faretleyebilir ve \u00f6l\u00e7eklendirme beti\u011finizin bu etiket \u00fczerinden Droplet&#8217;leri bulmas\u0131n\u0131 veya yeni Droplet&#8217;leri ayn\u0131 etiketle olu\u015fturmas\u0131n\u0131 sa\u011flayabilirsiniz.<\/p>\n<h2>Otomatik \u00d6l\u00e7eklendirme \u0130\u00e7in \u00d6n Ko\u015fullar ve Uygulama Mimarisi<\/h2>\n<p>Otomatik \u00f6l\u00e7eklendirmeyi ba\u015far\u0131l\u0131 bir \u015fekilde uygulamak i\u00e7in uygulaman\u0131z\u0131n ve altyap\u0131n\u0131z\u0131n belirli gereksinimleri kar\u015f\u0131lamas\u0131 gerekir.<\/p>\n<h3>Uygulama Tasar\u0131m\u0131 \u0130lkeleri<\/h3>\n<p>*   <strong>Durumsuzluk (Statelessness):<\/strong> Daha \u00f6nce de belirtildi\u011fi gibi, uygulaman\u0131z\u0131n durumsuz olmas\u0131, her iste\u011fi ba\u011f\u0131ms\u0131z olarak i\u015fleyebilmesi gerekir. Oturum y\u00f6netimi i\u00e7in payla\u015f\u0131ml\u0131 bir oturum deposu (Redis, veritaban\u0131) veya JWT (JSON Web Tokens) kullan\u0131n.<br \/>\n*   <strong>Harici Veritaban\u0131 ve \u00d6nbellek Kullan\u0131m\u0131:<\/strong> Uygulama sunucular\u0131n\u0131z\u0131n yerelinde veri depolamaktan ka\u00e7\u0131n\u0131n. T\u00fcm kal\u0131c\u0131 veriler merkezi bir veritaban\u0131nda, \u00f6nbellek verileri ise Redis veya Memcached gibi harici bir \u00f6nbellek hizmetinde tutulmal\u0131d\u0131r.<br \/>\n*   <strong>Payla\u015f\u0131ml\u0131 Dosya Sistemleri:<\/strong> Kullan\u0131c\u0131 y\u00fcklemeleri, statik varl\u0131klar veya di\u011fer payla\u015f\u0131lan dosyalar i\u00e7in DigitalOcean Spaces, NFS veya ba\u015fka bir merkezi dosya depolama \u00e7\u00f6z\u00fcm\u00fc kullan\u0131n.<br \/>\n*   <strong>Harici Konfig\u00fcrasyon:<\/strong> Uygulama ayarlar\u0131, veritaban\u0131 ba\u011flant\u0131 dizeleri, API anahtarlar\u0131 gibi konfig\u00fcrasyon bilgilerini kod i\u00e7inde tutmak yerine, ortam de\u011fi\u015fkenleri, konfig\u00fcrasyon dosyalar\u0131 veya bir merkezi konfig\u00fcrasyon y\u00f6netimi arac\u0131 (\u00f6rne\u011fin, Consul) arac\u0131l\u0131\u011f\u0131yla d\u0131\u015far\u0131dan sa\u011flamal\u0131s\u0131n\u0131z. Bu, ayn\u0131 uygulama imaj\u0131n\u0131 farkl\u0131 ortamlar (geli\u015ftirme, test, \u00fcretim) i\u00e7in kullanabilmenizi sa\u011flar.<\/p>\n<h3>Altyap\u0131 Olarak Kod (Infrastructure as Code &#8211; IaC)<\/h3>\n<p>Otomatik \u00f6l\u00e7eklendirme, altyap\u0131n\u0131n programatik olarak y\u00f6netilmesini gerektirir. Terraform gibi IaC ara\u00e7lar\u0131, DigitalOcean kaynaklar\u0131n\u0131 (Droplet&#8217;ler, Y\u00fck Dengeleyiciler, Veritabanlar\u0131) kod olarak tan\u0131mlaman\u0131za olanak tan\u0131r. Bu, altyap\u0131n\u0131z\u0131n versiyon kontrol\u00fcn\u00fc yapman\u0131z\u0131, tekrarlanabilir da\u011f\u0131t\u0131mlar ger\u00e7ekle\u015ftirmenizi ve h\u0131zl\u0131 bir \u015fekilde yeni ortamlar olu\u015fturman\u0131z\u0131 sa\u011flar. Ansible veya Cloud-init gibi ara\u00e7lar ise Droplet&#8217;ler olu\u015fturulduktan sonra \u00fczerlerindeki yaz\u0131l\u0131mlar\u0131n otomatik olarak yap\u0131land\u0131r\u0131lmas\u0131 ve da\u011f\u0131t\u0131lmas\u0131 i\u00e7in kullan\u0131l\u0131r.<\/p>\n<h3>Merkezi \u0130zleme ve G\u00fcnl\u00fck Kayd\u0131 (Monitoring &#038; Logging)<\/h3>\n<p>Otomatik \u00f6l\u00e7eklendirme kararlar\u0131, uygulaman\u0131z\u0131n ve altyap\u0131n\u0131z\u0131n performans metriklerine dayan\u0131r.<br \/>\n*   <strong>\u0130zleme:<\/strong> DigitalOcean Monitoring, Droplet&#8217;lerinizin CPU kullan\u0131m\u0131, RAM kullan\u0131m\u0131, disk I\/O ve a\u011f trafi\u011fi gibi temel metriklerini toplar. Bu metrikler \u00fczerinden e\u015fik de\u011ferler belirleyerek \u00f6l\u00e7eklendirme tetikleyicileri olu\u015fturabilirsiniz. Prometheus ve Grafana gibi daha geli\u015fmi\u015f izleme \u00e7\u00f6z\u00fcmleri de kullan\u0131labilir.<br \/>\n*   <strong>G\u00fcnl\u00fck Kayd\u0131:<\/strong> T\u00fcm Droplet&#8217;lerinizden gelen uygulama ve sistem g\u00fcnl\u00fcklerini merkezi bir konumda (ELK Stack &#8211; Elasticsearch, Logstash, Kibana; Grafana Loki; veya bir g\u00fcnl\u00fck y\u00f6netim hizmeti) toplamak, sorun giderme ve uygulama davran\u0131\u015f\u0131n\u0131 analiz etmek i\u00e7in \u00f6nemlidir.<\/p>\n<h3>S\u00fcrekli Entegrasyon\/S\u00fcrekli Da\u011f\u0131t\u0131m (CI\/CD)<\/h3>\n<p>Otomatik \u00f6l\u00e7eklendirme ile birlikte, uygulaman\u0131z\u0131n yeni s\u00fcr\u00fcmlerini Droplet&#8217;lere otomatik olarak da\u011f\u0131tmak i\u00e7in bir CI\/CD hatt\u0131 (Jenkins, GitLab CI, GitHub Actions) kullanmak verimlili\u011fi art\u0131r\u0131r. Yeni bir kod de\u011fi\u015fikli\u011fi devreye al\u0131nd\u0131\u011f\u0131nda, CI\/CD hatt\u0131 otomatik olarak bir test Droplet&#8217;i \u00fczerinde testi \u00e7al\u0131\u015ft\u0131rabilir, ba\u015far\u0131l\u0131 olursa yeni bir Droplet anl\u0131k g\u00f6r\u00fcnt\u00fcs\u00fc olu\u015fturabilir ve bu yeni imaj\u0131 \u00f6l\u00e7eklendirme grubunuz i\u00e7in varsay\u0131lan olarak ayarlayabilir.<\/p>\n<h2>DigitalOcean API ile \u00d6l\u00e7eklendirme Mant\u0131\u011f\u0131 Geli\u015ftirme<\/h2>\n<p>Otomatik \u00f6l\u00e7eklendirme, DigitalOcean API&#8217;nin g\u00fcc\u00fcne dayan\u0131r. Bir betik veya servis, API arac\u0131l\u0131\u011f\u0131yla DigitalOcean kaynaklar\u0131n\u0131 izler ve y\u00f6netir.<\/p>\n<h3>DigitalOcean API&#8217;nin G\u00fcc\u00fc<\/h3>\n<p>DigitalOcean API, bulut altyap\u0131n\u0131z\u0131 programatik olarak olu\u015fturman\u0131za, yap\u0131land\u0131rman\u0131za ve y\u00f6netmenize olanak tan\u0131yan bir RESTful API&#8217;dir. T\u00fcm DigitalOcean hizmetleri (Droplet&#8217;ler, Y\u00fck Dengeleyiciler, Spaces vb.) API \u00fczerinden eri\u015filebilir ve kontrol edilebilir. Bu, \u00f6zel otomatik \u00f6l\u00e7eklendirme \u00e7\u00f6z\u00fcmleri geli\u015ftirmenize olanak tan\u0131r. API&#8217;ye eri\u015fim, ki\u015fisel bir eri\u015fim token&#8217;\u0131 (Personal Access Token) ile sa\u011flan\u0131r. Bu token&#8217;\u0131n g\u00fcvenli bir \u015fekilde saklanmas\u0131 ve y\u00f6netilmesi \u00e7ok \u00f6nemlidir.<\/p>\n<h3>\u00d6l\u00e7eklendirme Metrikleri ve E\u015fik De\u011ferleri<\/h3>\n<p>Otomatik \u00f6l\u00e7eklendirme kararlar\u0131 genellikle belirli metriklerin \u00f6nceden tan\u0131mlanm\u0131\u015f e\u015fik de\u011ferlerini a\u015ft\u0131\u011f\u0131nda tetiklenir. Yayg\u0131n metrikler \u015funlard\u0131r:<br \/>\n*   <strong>CPU Kullan\u0131m\u0131:<\/strong> Belirli bir s\u00fcre boyunca (\u00f6rne\u011fin, 5 dakika) ortalama CPU kullan\u0131m\u0131n\u0131n %70&#8217;in \u00fczerine \u00e7\u0131kmas\u0131, \u00f6l\u00e7eklendirme yukar\u0131 (scale-up) i\u00e7in bir tetikleyici olabilir. %30&#8217;un alt\u0131na d\u00fc\u015fmesi ise \u00f6l\u00e7eklendirme a\u015fa\u011f\u0131 (scale-down) i\u00e7in.<br \/>\n*   <strong>RAM Kullan\u0131m\u0131:<\/strong> Bellek t\u00fckenmesi performans\u0131 ciddi \u015fekilde etkileyebilir.<br \/>\n*   <strong>A\u011f Trafi\u011fi:<\/strong> Gelen\/giden a\u011f trafi\u011fi belirli bir e\u015fi\u011fi a\u015ft\u0131\u011f\u0131nda.<br \/>\n*   <strong>\u0130stek Say\u0131s\u0131\/Gecikme S\u00fcresi:<\/strong> Y\u00fck dengeleyici veya uygulama metrikleri \u00fczerinden belirli bir s\u00fcre i\u00e7inde gelen istek say\u0131s\u0131n\u0131n artmas\u0131 veya yan\u0131t s\u00fcrelerinin uzamas\u0131.<\/p>\n<p>E\u015fik de\u011ferleri, uygulaman\u0131z\u0131n ve beklenen y\u00fck\u00fcn do\u011fas\u0131na g\u00f6re dikkatlice belirlenmelidir. \u00c7ok d\u00fc\u015f\u00fck e\u015fikler gereksiz \u00f6l\u00e7eklendirmeye, \u00e7ok y\u00fcksek e\u015fikler ise performans d\u00fc\u015f\u00fc\u015flerine yol a\u00e7abilir.<\/p>\n<h3>Otomatik \u00d6l\u00e7ekleyici (Autoscaler) Bile\u015feninin Geli\u015ftirilmesi<\/h3>\n<p>Otomatik \u00f6l\u00e7ekleyici, DigitalOcean API&#8217;sini kullanarak \u00f6l\u00e7eklendirme kararlar\u0131n\u0131 uygulayan \u00f6zel bir betik veya servistir. Bu betik, ayr\u0131 bir Droplet \u00fczerinde veya sunucusuz bir ortamda (DigitalOcean Functions) \u00e7al\u0131\u015ft\u0131r\u0131labilir.<\/p>\n<p><strong>Temel \u0130\u015flevleri:<\/strong><br \/>\n1.  <strong>Metrikleri Toplama:<\/strong> DigitalOcean Monitoring API&#8217;sini kullanarak veya Droplet&#8217;ler \u00fczerinde \u00e7al\u0131\u015fan \u00f6zel izleme ajanlar\u0131ndan (Prometheus Node Exporter gibi) metrikleri d\u00fczenli aral\u0131klarla sorgular.<br \/>\n2.  <strong>Karar Verme:<\/strong> Toplanan metrikleri \u00f6nceden tan\u0131mlanm\u0131\u015f e\u015fik de\u011ferleriyle kar\u015f\u0131la\u015ft\u0131r\u0131r. \u00d6l\u00e7eklendirme yukar\u0131 veya a\u015fa\u011f\u0131 i\u00e7in bir karar verir.<br \/>\n3.  <strong>API \u00c7a\u011fr\u0131lar\u0131 ile Eyleme Ge\u00e7me:<\/strong><br \/>\n    *   <strong>\u00d6l\u00e7eklendirme Yukar\u0131 (Scale-Up):<\/strong><br \/>\n        *   Yeni bir Droplet olu\u015fturur (\u00f6nceden haz\u0131rlanm\u0131\u015f bir anl\u0131k g\u00f6r\u00fcnt\u00fcden).<br \/>\n        *   Olu\u015fturulan Droplet&#8217;e belirli etiketler atar.<br \/>\n        *   Droplet haz\u0131r oldu\u011funda (sa\u011fl\u0131k kontrol\u00fcnden ge\u00e7ti\u011finde), onu Y\u00fck Dengeleyici&#8217;nin hedef havuzuna ekler.<br \/>\n    *   <strong>\u00d6l\u00e7eklendirme A\u015fa\u011f\u0131 (Scale-Down):<\/strong><br \/>\n        *   Mevcut Droplet&#8217;ler aras\u0131nda en az y\u00fckl\u00fc veya en eski Droplet&#8217;i belirler.<br \/>\n        *   Droplet&#8217;i Y\u00fck Dengeleyici&#8217;nin hedef havuzundan \u00e7\u0131kar\u0131r (bu, mevcut ba\u011flant\u0131lar\u0131n kesilmemesi i\u00e7in \u00f6nemlidir).<br \/>\n        *   Belirli bir bekleme s\u00fcresinden sonra (mevcut isteklerin tamamlanmas\u0131 i\u00e7in), Droplet&#8217;i siler.<\/p>\n<h3>\u00d6rnek \u00d6l\u00e7eklendirme Ak\u0131\u015f\u0131 (Pseudocode\/Mant\u0131ksal Ad\u0131mlar)<\/h3>\n<p>A\u015fa\u011f\u0131da, bir Python beti\u011fi ile DigitalOcean API&#8217;sinin nas\u0131l kullan\u0131labilece\u011fine dair basitle\u015ftirilmi\u015f bir ak\u0131\u015f g\u00f6sterilmi\u015ftir:<\/p>\n<pre><code class=\"language-python\">import digitalocean\nimport time\n\n<h2>DigitalOcean API Token'\u0131n\u0131z\u0131 buraya ekleyin<\/h2>\nDO_TOKEN = \"YOUR_DIGITALOCEAN_API_TOKEN\"\nmanager = digitalocean.Manager(token=DO_TOKEN)\n\nLOAD_BALANCER_ID = \"YOUR_LOAD_BALANCER_ID\" # Y\u00fck Dengeleyici ID'si\nSNAPSHOT_ID = \"YOUR_SNAPSHOT_ID\" # Alt\u0131n imaj\u0131n\u0131z\u0131n ID'si\nREGION = \"nyc3\" # Droplet'lerin olu\u015fturulaca\u011f\u0131 b\u00f6lge\nSIZE_SLUG = \"s-1vcpu-1gb\" # Droplet boyutu\nAPP_TAG = \"web-app-prod\" # Uygulama Droplet'leri i\u00e7in etiket\n\nMIN_DROPLETS = 2\nMAX_DROPLETS = 10\nCPU_THRESHOLD_UP = 70 # %70 CPU kullan\u0131m\u0131 \u00fczerinde scale-up\nCPU_THRESHOLD_DOWN = 30 # %30 CPU kullan\u0131m\u0131 alt\u0131nda scale-down\nCHECK_INTERVAL = 60 # Saniye cinsinden kontrol aral\u0131\u011f\u0131\n\ndef get_current_droplets():\n    # Belirli bir etikete sahip Droplet'leri getir\n    all_droplets = manager.get_all_droplets(tag_name=APP_TAG)\n    return [d for d in all_droplets if d.status == 'active']\n\ndef get_droplet_cpu_usage(droplet_id):\n    # DigitalOcean Monitoring API'sinden CPU kullan\u0131m\u0131n\u0131 al (basitle\u015ftirilmi\u015f)\n    # Ger\u00e7ek uygulamada, bu k\u0131s\u0131m DigitalOcean Monitoring API'sine veya\n    # Prometheus\/Grafana API'sine yap\u0131lan ger\u00e7ek bir \u00e7a\u011fr\u0131 olacakt\u0131r.\n    # \u015eimdilik rastgele bir de\u011fer d\u00f6nd\u00fcrelim.\n    import random\n    return random.randint(10, 90)\n\ndef scale_up():\n    current_droplets = get_current_droplets()\n    if len(current_droplets) < MAX_DROPLETS:\n        print(\"\u00d6l\u00e7eklendirme yukar\u0131: Yeni Droplet olu\u015fturuluyor...\")\n        droplet = digitalocean.Droplet(token=DO_TOKEN,\n                                     name=f\"web-app-{int(time.time())}\",\n                                     region=REGION,\n                                     image=SNAPSHOT_ID,\n                                     size=SIZE_SLUG,\n                                     tags=[APP_TAG],\n                                     backups=False,\n                                     ssh_keys=[]) # SSH anahtarlar\u0131n\u0131z\u0131 buraya ekleyin\n        droplet.create()\n        print(f\"Droplet olu\u015fturuluyor: {droplet.name} (ID: {droplet.id})\")\n        # Droplet'in aktif olmas\u0131n\u0131 bekle\n        while droplet.status != 'active':\n            time.sleep(10)\n            droplet.load()\n        print(f\"Droplet {droplet.name} aktif. Y\u00fck dengeleyiciye ekleniyor...\")\n        \n        # Y\u00fck dengeleyiciye Droplet ekleme (doctl veya API ile)\n        # Bu k\u0131s\u0131m DigitalOcean API'sinin Load Balancer endpoint'leri ile yap\u0131l\u0131r.\n        # Basitlik ad\u0131na burada do\u011frudan manager objesi \u00fczerinden bir \u00f6rnek yok,\n        # ancak API \u00e7a\u011fr\u0131s\u0131 ile yap\u0131labilir.\n        # \u00d6rne\u011fin: manager.get_load_balancer(LOAD_BALANCER_ID).add_droplets([droplet.id])\n        print(f\"Droplet {droplet.id} y\u00fck dengeleyiciye eklendi (varsay\u0131msal).\")\n        return True\n    return False\n\ndef scale_down():\n    current_droplets = get_current_droplets()\n    if len(current_droplets) > MIN_DROPLETS:\n        # En az y\u00fckl\u00fc veya en eski Droplet'i bul (ger\u00e7ek senaryoda daha ak\u0131ll\u0131ca bir se\u00e7im yap\u0131l\u0131r)\n        droplet_to_remove = current_droplets[0] \n        print(f\"\u00d6l\u00e7eklendirme a\u015fa\u011f\u0131: Droplet {droplet_to_remove.name} (ID: {droplet_to_remove.id}) kald\u0131r\u0131l\u0131yor...\")\n        \n        # Y\u00fck dengeleyiciden Droplet'i \u00e7\u0131kar\n        # manager.get_load_balancer(LOAD_BALANCER_ID).remove_droplets([droplet_to_remove.id])\n        print(f\"Droplet {droplet_to_remove.id} y\u00fck dengeleyiciden \u00e7\u0131kar\u0131ld\u0131 (varsay\u0131msal).\")\n        \n        # Graceful shutdown i\u00e7in bekleme s\u00fcresi\n        time.sleep(300) # 5 dakika bekle\n        \n        droplet_to_remove.destroy()\n        print(f\"Droplet {droplet_to_remove.id} silindi.\")\n        return True\n    return False\n\ndef main():\n    while True:\n        current_droplets = get_current_droplets()\n        total_cpu_usage = 0\n        \n        if not current_droplets:\n            print(\"Hi\u00e7 aktif Droplet bulunamad\u0131. En az Droplet olu\u015fturuluyor...\")\n            scale_up()\n            time.sleep(CHECK_INTERVAL)\n            continue\n\n        for droplet in current_droplets:\n            cpu = get_droplet_cpu_usage(droplet.id)\n            total_cpu_usage += cpu\n            print(f\"Droplet {droplet.name} (ID: {droplet.id}) CPU: {cpu}%\")\n\n        avg_cpu_usage = total_cpu_usage \/ len(current_droplets)\n        print(f\"Ortalama CPU kullan\u0131m\u0131: {avg_cpu_usage}%\")\n\n        if avg_cpu_usage > CPU_THRESHOLD_UP:\n            print(\"Ortalama CPU y\u00fcksek, \u00f6l\u00e7eklendirme yukar\u0131 tetikleniyor.\")\n            scale_up()\n        elif avg_cpu_usage < CPU_THRESHOLD_DOWN:\n            print(\"Ortalama CPU d\u00fc\u015f\u00fck, \u00f6l\u00e7eklendirme a\u015fa\u011f\u0131 tetikleniyor.\")\n            scale_down()\n        else:\n            print(\"CPU kullan\u0131m\u0131 normal s\u0131n\u0131rlar i\u00e7inde.\")\n\n        time.sleep(CHECK_INTERVAL)\n\nif __name__ == \"__main__\":\n    main()<\/code><\/pre>\n<p>Yukar\u0131daki kod sadece bir konsepttir ve DigitalOcean API'sinin ger\u00e7ek kullan\u0131m\u0131 i\u00e7in <code>python-digitalocean<\/code> k\u00fct\u00fcphanesinin ve <code>doctl<\/code> CLI arac\u0131n\u0131n dok\u00fcmantasyonuna ba\u015fvurulmal\u0131d\u0131r. \u00d6zellikle y\u00fck dengeleyiciye Droplet ekleme\/\u00e7\u0131karma i\u015flemleri ve metrik toplama k\u0131s\u0131mlar\u0131 daha detayl\u0131 API \u00e7a\u011fr\u0131lar\u0131 gerektirir.<\/p>\n<h2>Ad\u0131m Ad\u0131m Otomatik \u00d6l\u00e7eklendirme Uygulamas\u0131 (Konsept)<\/h2>\n<p>\u015eimdi, yukar\u0131daki bile\u015fenleri ve prensipleri bir araya getirerek otomatik \u00f6l\u00e7eklendirme \u00e7\u00f6z\u00fcm\u00fcn\u00fc nas\u0131l uygulayabilece\u011fimize dair ad\u0131mlar\u0131 inceleyelim.<\/p>\n<h3>1. Uygulaman\u0131z\u0131 Durumsuz Hale Getirin<\/h3>\n<p>Bu, otomatik \u00f6l\u00e7eklendirmenin temelidir.<br \/>\n*   <strong>Oturum Y\u00f6netimi:<\/strong> Oturum verilerini sunucular\u0131n\u0131z\u0131n yerel belle\u011finde de\u011fil, Redis veya veritaban\u0131 gibi merkezi bir yerde saklay\u0131n.<br \/>\n*   <strong>Veritaban\u0131:<\/strong> DigitalOcean Managed Databases kullan\u0131n veya kendi veritaban\u0131 sunucunuzu ayr\u0131 bir Droplet'te \u00e7al\u0131\u015ft\u0131r\u0131n. Uygulama Droplet'lerinizin sadece veritaban\u0131na ba\u011flanmas\u0131n\u0131 sa\u011flay\u0131n.<br \/>\n*   <strong>Dosya Depolama:<\/strong> Kullan\u0131c\u0131 y\u00fcklemeleri ve statik dosyalar i\u00e7in DigitalOcean Spaces gibi bir nesne depolama hizmeti kullan\u0131n.<br \/>\n*   <strong>Konfig\u00fcrasyon:<\/strong> Uygulama ayarlar\u0131n\u0131 ortam de\u011fi\u015fkenleri veya harici konfig\u00fcrasyon dosyalar\u0131 arac\u0131l\u0131\u011f\u0131yla y\u00f6netin.<\/p>\n<h3>2. Temel Droplet Anl\u0131k G\u00f6r\u00fcnt\u00fcs\u00fc Olu\u015fturun (Golden Image)<\/h3>\n<p>Bir \"golden image\" olu\u015fturmak, yeni Droplet'leri h\u0131zl\u0131 ve tutarl\u0131 bir \u015fekilde ba\u015flatman\u0131n en verimli yoludur.<br \/>\n*   Bir Ubuntu 16.04 Droplet'i olu\u015fturun.<br \/>\n*   Uygulaman\u0131z\u0131n t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 (web sunucusu, uygulama \u00e7al\u0131\u015fma zaman\u0131, k\u00fct\u00fcphaneler vb.) y\u00fckleyin.<br \/>\n*   Uygulama kodunuzu da\u011f\u0131t\u0131n ve d\u00fczg\u00fcn \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun.<br \/>\n*   DigitalOcean Monitoring agent'\u0131n\u0131 veya di\u011fer izleme ajanlar\u0131n\u0131 (Prometheus Node Exporter gibi) kurun ve yap\u0131land\u0131r\u0131n.<br \/>\n*   SSH anahtarlar\u0131n\u0131z\u0131 ve gerekli t\u00fcm g\u00fcvenlik ayarlar\u0131n\u0131z\u0131 yap\u0131n.<br \/>\n*   Bu Droplet'in bir anl\u0131k g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc (Snapshot) al\u0131n. Bu anl\u0131k g\u00f6r\u00fcnt\u00fc, otomatik \u00f6l\u00e7ekleyici taraf\u0131ndan yeni Droplet'ler olu\u015fturmak i\u00e7in kullan\u0131lacakt\u0131r.<\/p>\n<h3>3. DigitalOcean Y\u00fck Dengeleyici Kurulumu<\/h3>\n<p>*   DigitalOcean kontrol panelinden veya <code>doctl<\/code> CLI arac\u0131l\u0131\u011f\u0131yla bir Y\u00fck Dengeleyici olu\u015fturun.<br \/>\n*   Y\u00fck dengeleyicinin dinleyece\u011fi portlar\u0131 (\u00f6rn. 80 ve 443) ve hedef Droplet'lerin dinleyece\u011fi portlar\u0131 yap\u0131land\u0131r\u0131n.<br \/>\n*   Sa\u011fl\u0131k kontrol\u00fc (health check) ayarlar\u0131n\u0131 yap\u0131land\u0131r\u0131n. Y\u00fck dengeleyici, bu kontrol\u00fc kullanarak Droplet'lerin canl\u0131 olup olmad\u0131\u011f\u0131n\u0131 belirler ve sa\u011fl\u0131kl\u0131 olmayan Droplet'lere trafik g\u00f6ndermeyi durdurur. \u00d6rne\u011fin, uygulaman\u0131z\u0131n <code>\/health<\/code> endpoint'ine HTTP GET iste\u011fi g\u00f6nderebilir.<br \/>\n*   Ba\u015flang\u0131\u00e7ta, anl\u0131k g\u00f6r\u00fcnt\u00fcs\u00fcn\u00fc ald\u0131\u011f\u0131n\u0131z Droplet'i y\u00fck dengeleyiciye manuel olarak ekleyin.<\/p>\n<h3>4. \u0130zleme ve Uyar\u0131 Sistemini Yap\u0131land\u0131r\u0131n<\/h3>\n<p>*   <strong>DigitalOcean Monitoring:<\/strong> Droplet'lerinizde DigitalOcean Monitoring agent'\u0131n\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun. Bu, CPU, RAM, disk ve a\u011f metriklerini toplar.<br \/>\n*   <strong>\u00d6zel Metrikler:<\/strong> Uygulaman\u0131z\u0131n kendi metriklerini (istek say\u0131s\u0131, hata oranlar\u0131, yan\u0131t s\u00fcreleri) toplamak i\u00e7in Prometheus veya ba\u015fka bir ara\u00e7 kullan\u0131yorsan\u0131z, bunlar\u0131 da entegre edin.<br \/>\n*   <strong>E\u015fik De\u011ferleri:<\/strong> \u00d6l\u00e7eklendirme yukar\u0131 ve a\u015fa\u011f\u0131 tetikleyicileri i\u00e7in e\u015fik de\u011ferlerini belirleyin (\u00f6rn. ortalama CPU %70'in \u00fczerinde, ortalama CPU %30'un alt\u0131nda).<\/p>\n<h3>5. Otomatik \u00d6l\u00e7eklendirme Beti\u011fini\/Servisini Geli\u015ftirin<\/h3>\n<p>Daha \u00f6nce bahsetti\u011fimiz gibi, bir Python, Node.js veya Go beti\u011fi geli\u015ftirin.<br \/>\n*   Bu betik, DigitalOcean API'sini kullanarak Droplet metriklerini sorgulayacak.<br \/>\n*   Belirlenen e\u015fik de\u011ferlerine g\u00f6re \u00f6l\u00e7eklendirme kararlar\u0131 alacak.<br \/>\n*   <code>doctl<\/code> komut sat\u0131r\u0131 arac\u0131n\u0131 veya DigitalOcean API istemci k\u00fct\u00fcphanelerini kullanarak yeni Droplet'ler olu\u015fturacak veya mevcut Droplet'leri silecek.<br \/>\n*   Y\u00fck dengeleyiciye Droplet ekleme\/\u00e7\u0131karma i\u015flemlerini y\u00f6netecek.<br \/>\n*   Bu beti\u011fi ayr\u0131 ve k\u00fc\u00e7\u00fck bir Droplet \u00fczerinde veya DigitalOcean Functions gibi sunucusuz bir ortamda \u00e7al\u0131\u015ft\u0131r\u0131n. \u00d6l\u00e7ekleyicinin kendisinin y\u00fcksek kullan\u0131labilirli\u011fe sahip olmas\u0131 \u00f6nemlidir.<\/p>\n<p><strong>\u00d6rnek <code>doctl<\/code> Komutlar\u0131:<\/strong><br \/>\n*   <strong>Droplet Olu\u015fturma:<\/strong><\/p>\n<pre><code class=\"language-bash\">doctl compute droplet create web-app-new --image <SNAPSHOT_ID> --size s-1vcpu-1gb --region nyc3 --tag web-app-prod --ssh-keys <SSH_KEY_ID><\/code><\/pre>\n<p>*   <strong>Droplet'i Y\u00fck Dengeleyiciye Ekleme:<\/strong><\/p>\n<pre><code class=\"language-bash\">doctl compute load-balancer add-droplets <LOAD_BALANCER_ID> --droplet-ids <NEW_DROPLET_ID><\/code><\/pre>\n<p>*   <strong>Droplet'i Y\u00fck Dengeleyiciden \u00c7\u0131karma:<\/strong><\/p>\n<pre><code class=\"language-bash\">doctl compute load-balancer remove-droplets <LOAD_BALANCER_ID> --droplet-ids <DROPLET_TO_REMOVE_ID><\/code><\/pre>\n<p>*   <strong>Droplet Silme:<\/strong><\/p>\n<pre><code class=\"language-bash\">doctl compute droplet delete <DROPLET_ID> --force<\/code><\/pre>\n<h3>6. \u00d6l\u00e7ekleyiciyi Da\u011f\u0131t\u0131n ve Test Edin<\/h3>\n<p>*   Otomatik \u00f6l\u00e7eklendirme beti\u011finizi, g\u00fcvenli bir \u015fekilde API token'\u0131n\u0131za eri\u015febilece\u011fi bir Droplet'te veya sunucusuz bir i\u015flev olarak da\u011f\u0131t\u0131n.<br \/>\n*   Sisteminizin do\u011fru \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olmak i\u00e7in y\u00fck testi ara\u00e7lar\u0131yla (Apache JMeter, k6, Locust) uygulaman\u0131za yapay y\u00fck olu\u015fturun.<br \/>\n*   Y\u00fck art\u0131\u015f\u0131yla Droplet'lerin otomatik olarak eklendi\u011fini, y\u00fck azald\u0131\u011f\u0131nda ise gereksiz Droplet'lerin kald\u0131r\u0131ld\u0131\u011f\u0131n\u0131 do\u011frulay\u0131n.<br \/>\n*   Loglar\u0131 ve izleme panellerini dikkatlice takip edin.<\/p>\n<h2>Zorluklar ve En \u0130yi Uygulamalar<\/h2>\n<p>Otomatik \u00f6l\u00e7eklendirme bir\u00e7ok avantaj sunsa da, baz\u0131 zorluklar\u0131 ve en iyi uygulamalar\u0131 g\u00f6z \u00f6n\u00fcnde bulundurmak \u00f6nemlidir.<\/p>\n<h3>\"Cold Start\" S\u00fcreleri<\/h3>\n<p>Yeni bir Droplet olu\u015fturuldu\u011funda ve uygulamay\u0131 ba\u015flatmak i\u00e7in haz\u0131r hale gelmesi zaman alabilir. Bu \"cold start\" s\u00fcresi, ani trafik art\u0131\u015flar\u0131nda uygulaman\u0131z\u0131n ge\u00e7ici olarak yava\u015flamas\u0131na neden olabilir.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Anl\u0131k g\u00f6r\u00fcnt\u00fcn\u00fcz\u00fc optimize ederek ba\u015flatma s\u00fcresini k\u0131salt\u0131n. Gerekirse, minimum say\u0131da Droplet'i her zaman \u00e7al\u0131\u015f\u0131r durumda tutun (MIN_DROPLETS). Daha geli\u015fmi\u015f senaryolarda, \u00f6nceden ba\u015flat\u0131lm\u0131\u015f ancak hen\u00fcz trafi\u011fe a\u00e7\u0131k olmayan bir \"haz\u0131r havuz\" (warm pool) Droplet'leri tutulabilir.<\/p>\n<h3>Droplet'lerin Zarif Kapan\u0131\u015f\u0131 (Graceful Shutdown)<\/h3>\n<p>\u00d6l\u00e7eklendirme a\u015fa\u011f\u0131 durumunda bir Droplet'i aniden kapatmak, o Droplet \u00fczerindeki devam eden isteklerin kesilmesine neden olabilir.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Bir Droplet'i Y\u00fck Dengeleyici'den \u00e7\u0131kard\u0131ktan sonra, ona belirli bir \"bekleme s\u00fcresi\" (cooldown period) tan\u0131y\u0131n. Bu s\u00fcre zarf\u0131nda Droplet yeni istek almaz, ancak mevcut istekleri tamamlar. Ard\u0131ndan g\u00fcvenli bir \u015fekilde kapat\u0131labilir.<\/p>\n<h3>Veritaban\u0131 \u00d6l\u00e7eklendirmesi<\/h3>\n<p>Uygulama sunucular\u0131n\u0131z\u0131 \u00f6l\u00e7eklendirmek kolayd\u0131r, ancak veritaban\u0131 genellikle en b\u00fcy\u00fck darbo\u011fazd\u0131r.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> DigitalOcean Managed Databases kullan\u0131n. Okuma yo\u011fun uygulamalar i\u00e7in salt okunur replikalar (read replicas) ekleyerek okuma y\u00fck\u00fcn\u00fc da\u011f\u0131tabilirsiniz. \u00c7ok y\u00fcksek yazma y\u00fckleri i\u00e7in veritaban\u0131 sharding gibi daha karma\u015f\u0131k \u00e7\u00f6z\u00fcmler gerekebilir.<\/p>\n<h3>\u00d6nbellekleme Stratejileri<\/h3>\n<p>Veritaban\u0131 y\u00fck\u00fcn\u00fc azaltmak ve yan\u0131t s\u00fcrelerini iyile\u015ftirmek i\u00e7in \u00f6nbellekleme kullan\u0131n.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Redis veya Memcached gibi da\u011f\u0131t\u0131k \u00f6nbellek sistemlerini kullan\u0131n. DigitalOcean, y\u00f6netilen Redis hizmeti sunar.<\/p>\n<h3>G\u00fcvenlik<\/h3>\n<p>Otomatik \u00f6l\u00e7eklendirme, API anahtarlar\u0131n\u0131n ve di\u011fer hassas bilgilerin y\u00f6netimini gerektirir.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> DigitalOcean API token'lar\u0131n\u0131z\u0131 g\u00fcvenli bir \u015fekilde saklay\u0131n (ortam de\u011fi\u015fkenleri, s\u0131r y\u00f6netim sistemleri). Sadece gerekli izinlere sahip token'lar kullan\u0131n. Droplet'ler aras\u0131nda ve veritaban\u0131yla ileti\u015fim i\u00e7in g\u00fcvenlik duvarlar\u0131 (firewalls) ve \u00f6zel a\u011flar (VPC) kullan\u0131n.<\/p>\n<h3>Maliyet Y\u00f6netimi<\/h3>\n<p>Otomatik \u00f6l\u00e7eklendirme maliyetleri d\u00fc\u015f\u00fcrmeye yard\u0131mc\u0131 olsa da, yanl\u0131\u015f yap\u0131land\u0131rma gereksiz harcamalara yol a\u00e7abilir.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> \u00d6l\u00e7eklendirme e\u015fiklerini dikkatlice belirleyin. \u00c7ok s\u0131k \u00f6l\u00e7eklendirme yukar\u0131 ve a\u015fa\u011f\u0131, Droplet olu\u015fturma\/silme d\u00f6ng\u00fcs\u00fc maliyetli olabilir. Cooldown s\u00fcrelerini iyi ayarlay\u0131n.<\/p>\n<h3>Test Etme<\/h3>\n<p>\u00d6l\u00e7eklendirme mant\u0131\u011f\u0131n\u0131z\u0131n beklendi\u011fi gibi \u00e7al\u0131\u015ft\u0131\u011f\u0131ndan emin olun.<br \/>\n*   <strong>\u00c7\u00f6z\u00fcm:<\/strong> \u00dcretim ortam\u0131na da\u011f\u0131tmadan \u00f6nce bir haz\u0131rl\u0131k (staging) ortam\u0131nda y\u00fck testleri yaparak otomatik \u00f6l\u00e7ekleyicinin davran\u0131\u015f\u0131n\u0131 do\u011frulay\u0131n.<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>DigitalOcean Ubuntu 16.04 Droplet'lerinde web uygulaman\u0131z\u0131n \u00f6l\u00e7eklendirmesini otomatikle\u015ftirmek, uygulaman\u0131z\u0131n performans\u0131n\u0131, g\u00fcvenilirli\u011fini ve maliyet etkinli\u011fini \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131rabilir. Bu s\u00fcre\u00e7, uygulaman\u0131z\u0131n durumsuz olarak tasarlanmas\u0131n\u0131, DigitalOcean'\u0131n Y\u00fck Dengeleyiciler, Managed Databases ve Spaces gibi hizmetlerinden yararlan\u0131lmas\u0131n\u0131 ve DigitalOcean API'sini kullanarak \u00f6zel bir \u00f6l\u00e7eklendirme mant\u0131\u011f\u0131 geli\u015ftirilmesini gerektirir.<\/p>\n<p>Ancak, Ubuntu 16.04'\u00fcn ya\u015fam d\u00f6ng\u00fcs\u00fcn\u00fcn sonuna ula\u015ft\u0131\u011f\u0131n\u0131 ve g\u00fcvenlik g\u00fcncellemeleri almad\u0131\u011f\u0131n\u0131 bir kez daha vurgulamak \u00f6nemlidir. \u00dcretim ortamlar\u0131 i\u00e7in her zaman en son LTS (Uzun S\u00fcreli Destek) s\u00fcr\u00fcmlerini (\u00f6rne\u011fin Ubuntu 20.04 veya 22.04) kullanman\u0131z \u015fiddetle tavsiye edilir. Bu, hem g\u00fcvenlik risklerini azaltacak hem de daha modern ara\u00e7lar ve k\u00fct\u00fcphanelerle daha iyi uyumluluk sa\u011flayacakt\u0131r.<\/p>\n<p>Otomatik \u00f6l\u00e7eklendirme, bir kez kurulduktan sonra uygulaman\u0131z\u0131n trafik dalgalanmalar\u0131na otonom bir \u015fekilde uyum sa\u011flamas\u0131na olanak tan\u0131yarak operasyonel y\u00fck\u00fc azalt\u0131r ve i\u015finize odaklanman\u0131z\u0131 sa\u011flar. Daha da ileri gitmek isterseniz, DigitalOcean Kubernetes (DOKS) gibi y\u00f6netilen Kubernetes \u00e7\u00f6z\u00fcmleri, konteynerle\u015ftirilmi\u015f uygulamalar i\u00e7in \u00e7ok daha geli\u015fmi\u015f ve yerle\u015fik otomatik \u00f6l\u00e7eklendirme yetenekleri sunar. Ancak Droplet tabanl\u0131 \u00e7\u00f6z\u00fcmler de bir\u00e7ok senaryo i\u00e7in yeterli ve g\u00fc\u00e7l\u00fc bir otomasyon katman\u0131 sa\u011flayabilir.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"DigitalOcean Ubuntu 16.04 Droplet&#8217;lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek\nGiri\u015f: Otomatik \u00d6l\u00e7eklendirme Neden \u00d6nemli?","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-31569","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 Ubuntu 16.04 Droplet&#039;lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek - 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-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"DigitalOcean Ubuntu 16.04 Droplet&#039;lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek\" \/>\n<meta property=\"og:description\" content=\"DigitalOcean Ubuntu 16.04 Droplet&#039;lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek Giri\u015f: Otomatik \u00d6l\u00e7eklendirme Neden \u00d6nemli?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-11T07:41:18+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=\"22 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"DigitalOcean Ubuntu 16.04 Droplet&#8217;lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek\",\"datePublished\":\"2025-10-11T07:41:18+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/\"},\"wordCount\":3831,\"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-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/\",\"name\":\"DigitalOcean Ubuntu 16.04 Droplet'lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-11T07:41:18+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DigitalOcean Ubuntu 16.04 Droplet&#8217;lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek\"}]},{\"@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 Ubuntu 16.04 Droplet'lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek - 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-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/","og_locale":"tr_TR","og_type":"article","og_title":"DigitalOcean Ubuntu 16.04 Droplet'lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek","og_description":"DigitalOcean Ubuntu 16.04 Droplet'lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek Giri\u015f: Otomatik \u00d6l\u00e7eklendirme Neden \u00d6nemli?","og_url":"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-11T07:41:18+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"22 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"DigitalOcean Ubuntu 16.04 Droplet&#8217;lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek","datePublished":"2025-10-11T07:41:18+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/"},"wordCount":3831,"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-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/","url":"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/","name":"DigitalOcean Ubuntu 16.04 Droplet'lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-11T07:41:18+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/digitalocean-ubuntu-16-04-dropletlerinde-web-uygulamanizin-olceklendirmesini-otomatiklestirmek\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"DigitalOcean Ubuntu 16.04 Droplet&#8217;lerinde Web Uygulaman\u0131z\u0131n \u00d6l\u00e7eklendirmesini Otomatikle\u015ftirmek"}]},{"@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\/31569","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=31569"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31569\/revisions"}],"predecessor-version":[{"id":31570,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31569\/revisions\/31570"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31569"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31569"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31569"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}