{"id":35544,"date":"2025-12-01T00:40:53","date_gmt":"2025-11-30T21:40:53","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=35544"},"modified":"2025-12-01T00:40:53","modified_gmt":"2025-11-30T21:40:53","slug":"flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/","title":{"rendered":"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform&#8217;a Da\u011f\u0131tma Rehberi"},"content":{"rendered":"<p><body><\/p>\n<h2>Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform&#8217;a Da\u011f\u0131tma Rehberi<\/h2>\n<h3>Giri\u015f<\/h3>\n<p>Modern web uygulamalar\u0131 geli\u015ftirme s\u00fcrecinde, h\u0131z, esneklik ve \u00f6l\u00e7eklenebilirlik temel \u00f6ncelikler haline gelmi\u015ftir. Python ekosisteminde Flask, hafifli\u011fi ve sundu\u011fu minimal yap\u0131 sayesinde bir\u00e7ok geli\u015ftirici taraf\u0131ndan tercih edilen pop\u00fcler bir mikro web \u00e7er\u00e7evesidir. Ancak Flask&#8217;\u0131n dahili geli\u015ftirme sunucusu, \u00fcretim ortamlar\u0131 i\u00e7in tasarlanmam\u0131\u015ft\u0131r; bu noktada Gunicorn gibi bir WSGI (Web Server Gateway Interface) sunucusu devreye girer. Gunicorn, e\u015fzamanl\u0131 istekleri y\u00f6neterek ve uygulaman\u0131n performans\u0131n\u0131 art\u0131rarak Flask uygulaman\u0131z\u0131 \u00fcretim ortam\u0131na haz\u0131rlar. Da\u011f\u0131t\u0131m s\u00fcrecini basitle\u015ftirmek ve altyap\u0131 y\u00f6netimi y\u00fck\u00fcn\u00fc ortadan kald\u0131rmak i\u00e7in ise DigitalOcean&#8217;\u0131n App Platform&#8217;u gibi tam y\u00f6netilen bir Platform as a Service (PaaS) \u00e7\u00f6z\u00fcm\u00fc idealdir.<\/p>\n<p>Bu makalede, Flask uygulaman\u0131z\u0131 Gunicorn kullanarak DigitalOcean App Platform&#8217;a nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131 ad\u0131m ad\u0131m detayl\u0131 bir \u015fekilde inceleyece\u011fiz. Bu rehber sayesinde, uygulaman\u0131z\u0131n geli\u015ftirme ortam\u0131ndan canl\u0131ya ge\u00e7i\u015f s\u00fcrecini sorunsuz ve verimli bir \u015fekilde tamamlayabileceksiniz. Amac\u0131m\u0131z, hem teorik bilgiyi hem de pratik uygulama ad\u0131mlar\u0131n\u0131 bir araya getirerek, bu s\u00fcreci ba\u015ftan sona anlaman\u0131z\u0131 ve kendi projelerinizde uygulayabilmenizi sa\u011flamakt\u0131r.<\/p>\n<h3>\u00d6n Ko\u015fullar<\/h3>\n<p>Bu rehbere ba\u015flamadan \u00f6nce, a\u015fa\u011f\u0131daki ara\u00e7lara ve hesaplara sahip oldu\u011funuzdan emin olmal\u0131s\u0131n\u0131z:<\/p>\n<p>*   <strong>Python 3.x ve pip:<\/strong> Python programlama dilinin ve paket y\u00f6neticisi pip&#8217;in sisteminizde kurulu olmas\u0131 gerekmektedir.<br \/>\n*   <strong>Flask ve Gunicorn:<\/strong> Bu paketler, projeniz i\u00e7in bir sanal ortamda kurulacakt\u0131r.<br \/>\n*   <strong>Git:<\/strong> Versiyon kontrol sistemi Git&#8217;in bilgisayar\u0131n\u0131zda kurulu ve yap\u0131land\u0131r\u0131lm\u0131\u015f olmas\u0131, projenizi bir Git deposuna g\u00f6ndermeniz i\u00e7in zorunludur.<br \/>\n*   <strong>DigitalOcean Hesab\u0131:<\/strong> Uygulaman\u0131z\u0131 da\u011f\u0131tmak i\u00e7in aktif bir DigitalOcean hesab\u0131na ihtiyac\u0131n\u0131z olacak.<br \/>\n*   <strong>GitHub\/GitLab\/Bitbucket Hesab\u0131:<\/strong> Uygulama kodunuzu bar\u0131nd\u0131rmak i\u00e7in bu platformlardan birinde bir uzak depo (remote repository) gereklidir. App Platform, bu depolardan otomatik olarak kodunuzu \u00e7eker.<br \/>\n*   <strong>(\u0130ste\u011fe Ba\u011fl\u0131) <code>doctl<\/code> CLI:<\/strong> DigitalOcean&#8217;\u0131n komut sat\u0131r\u0131 aray\u00fcz\u00fc <code>doctl<\/code>, uygulamalar\u0131 otomatize edilmi\u015f bir \u015fekilde da\u011f\u0131tmak ve y\u00f6netmek i\u00e7in kullan\u0131labilir. Bu makalede hem kontrol paneli \u00fczerinden hem de <code>doctl<\/code> ile da\u011f\u0131t\u0131m y\u00f6ntemlerine de\u011finece\u011fiz.<\/p>\n<h3>Flask Uygulamas\u0131 Olu\u015fturma<\/h3>\n<p>\u0130lk ad\u0131m olarak, da\u011f\u0131taca\u011f\u0131m\u0131z basit bir Flask uygulamas\u0131 olu\u015ftural\u0131m. Bu uygulama, App Platform&#8217;a da\u011f\u0131t\u0131m s\u00fcrecini g\u00f6stermek i\u00e7in yeterli olacakt\u0131r.<\/p>\n<h4>Proje Dizini ve Sanal Ortam Olu\u015fturma<\/h4>\n<p>\u00d6ncelikle projeniz i\u00e7in bir dizin olu\u015fturun ve bu dizine gidin:<\/p>\n<pre><code class=\"language-bash\">mkdir my_flask_app\ncd my_flask_app<\/code><\/pre>\n<p>\u015eimdi, projenizin ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole etmek i\u00e7in bir Python sanal ortam\u0131 olu\u015ftural\u0131m ve etkinle\u015ftirelim. Sanal ortamlar, farkl\u0131 projeler i\u00e7in farkl\u0131 ba\u011f\u0131ml\u0131l\u0131k setlerini y\u00f6netmenizi sa\u011flar ve sistem genelindeki Python kurulumunuzu temiz tutar.<\/p>\n<pre><code class=\"language-bash\">python3 -m venv venv\nsource venv\/bin\/activate # Linux\/macOS\n<h2>veya<\/h2>\n<h2>.\\venv\\Scripts\\activate # Windows<\/code><\/pre>\n<\/h2>\n<p>Sanal ortam etkinle\u015ftirildikten sonra, komut isteminizin ba\u015f\u0131nda <code>(venv)<\/code> gibi bir ibare g\u00f6rmelisiniz.<\/p>\n<h4>Flask ve Gunicorn Kurulumu<\/h4>\n<p>Sanal ortam etkin durumdayken, Flask ve Gunicorn&#8217;u kural\u0131m:<\/p>\n<pre><code class=\"language-bash\">pip install Flask gunicorn<\/code><\/pre>\n<h4>Basit Bir Flask Uygulamas\u0131 (<code>app.py<\/code>)<\/h4>\n<p>Proje dizininizde <code>app.py<\/code> ad\u0131nda bir dosya olu\u015fturun ve i\u00e7ine a\u015fa\u011f\u0131daki kodu ekleyin:<\/p>\n<pre><code class=\"language-python\">from flask import Flask\n\napp = Flask(__name__)\n\n@app.route('\/')\ndef hello_world():\n    return 'Merhaba, App Platform!'\n\n@app.route('\/about')\ndef about():\n    return 'Bu bir Flask uygulamas\u0131d\u0131r ve DigitalOcean App Platform \u00fczerinde \u00e7al\u0131\u015fmaktad\u0131r.'\n\nif __name__ == '__main__':\n    app.run(debug=True)<\/code><\/pre>\n<p>Bu kod, iki basit rota i\u00e7eren minimal bir Flask uygulamas\u0131d\u0131r: k\u00f6k dizin (<code>\/<\/code>) &#8220;Merhaba, App Platform!&#8221; mesaj\u0131n\u0131 d\u00f6nd\u00fcr\u00fcrken, <code>\/about<\/code> rotas\u0131 uygulama hakk\u0131nda bilgi verir. <code>if __name__ == '__main__':<\/code> blo\u011fu, uygulamay\u0131 do\u011frudan \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda Flask&#8217;\u0131n dahili geli\u015ftirme sunucusunu ba\u015flat\u0131r.<\/p>\n<h4>Ba\u011f\u0131ml\u0131l\u0131klar Dosyas\u0131 (<code>requirements.txt<\/code>)<\/h4>\n<p>App Platform (veya herhangi bir PaaS) uygulaman\u0131z\u0131 da\u011f\u0131t\u0131rken hangi ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklemesi gerekti\u011fini bilmelidir. Bunun i\u00e7in <code>requirements.txt<\/code> dosyas\u0131n\u0131 kullan\u0131r\u0131z. Mevcut ortam\u0131n\u0131zda y\u00fckl\u00fc olan paketleri bu dosyaya kaydedelim:<\/p>\n<pre><code class=\"language-bash\">pip freeze > requirements.txt<\/code><\/pre>\n<p>Bu komut, <code>Flask<\/code> ve <code>gunicorn<\/code> paketlerinin s\u00fcr\u00fcmleriyle birlikte <code>requirements.txt<\/code> dosyas\u0131n\u0131 olu\u015fturacakt\u0131r.<\/p>\n<p>Proje dizininiz \u015fu \u015fekilde g\u00f6r\u00fcnmelidir:<\/p>\n<pre><code class=\"language-\">my_flask_app\/\n\u251c\u2500\u2500 venv\/\n\u251c\u2500\u2500 app.py\n\u2514\u2500\u2500 requirements.txt<\/code><\/pre>\n<h3>Gunicorn ile Uygulamay\u0131 Yerelde \u00c7al\u0131\u015ft\u0131rma<\/h3>\n<p>Flask&#8217;\u0131n kendi sunucusu geli\u015ftirme amac\u0131yla harika olsa da, \u00fcretim ortamlar\u0131nda kullan\u0131lmas\u0131 \u00f6nerilmez. \u00dcretim ortamlar\u0131 i\u00e7in tasarlanm\u0131\u015f Gunicorn (Green Unicorn), e\u015fzamanl\u0131 istekleri daha verimli bir \u015fekilde y\u00f6netebilir, daha sa\u011flam ve performansl\u0131 bir \u00e7\u00f6z\u00fcm sunar.<\/p>\n<h4>Gunicorn Neden Gereklidir?<\/h4>\n<p>Flask, bir WSGI uygulamas\u0131d\u0131r. WSGI, Python web sunucular\u0131 ile Python web uygulamalar\u0131 aras\u0131nda standart bir aray\u00fcz tan\u0131mlar. Flask&#8217;\u0131n dahili sunucusu tek i\u015f par\u00e7ac\u0131kl\u0131 (single-threaded) ve tek i\u015flemlidir (single-process), bu da ayn\u0131 anda yaln\u0131zca bir iste\u011fi i\u015fleyebilece\u011fi anlam\u0131na gelir. Y\u00fcksek trafikli bir \u00fcretim ortam\u0131nda bu durum ciddi performans sorunlar\u0131na yol a\u00e7abilir.<\/p>\n<p>Gunicorn gibi bir WSGI sunucusu ise birden fazla worker s\u00fcreci (i\u015f\u00e7i s\u00fcreci) olu\u015fturarak e\u015fzamanl\u0131 istekleri paralel olarak i\u015fleyebilir. Bu, uygulaman\u0131z\u0131n daha fazla kullan\u0131c\u0131ya hizmet vermesini ve daha kararl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Gunicorn, ayn\u0131 zamanda uygulaman\u0131z\u0131n \u00e7\u00f6kmesi durumunda worker s\u00fcre\u00e7lerini yeniden ba\u015flatma gibi \u00f6zelliklerle de uygulaman\u0131n dayan\u0131kl\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<h4>Gunicorn ile Yerel Test<\/h4>\n<p>Sanal ortam\u0131n\u0131z hala etkin durumdayken, Gunicorn&#8217;u kullanarak Flask uygulaman\u0131z\u0131 yerel olarak \u00e7al\u0131\u015ft\u0131rabiliriz:<\/p>\n<pre><code class=\"language-bash\">gunicorn -w 4 app:app<\/code><\/pre>\n<p>Bu komutu inceleyelim:<\/p>\n<p>*   <code>gunicorn<\/code>: Gunicorn sunucusunu ba\u015flat\u0131r.<br \/>\n<em>   <code>-w 4<\/code>: D\u00f6rt adet worker s\u00fcreci kullanmas\u0131n\u0131 belirtir. Worker say\u0131s\u0131 genellikle CPU \u00e7ekirdek say\u0131n\u0131z\u0131n iki kat\u0131 art\u0131 bir olarak \u00f6nerilir (\u00f6rne\u011fin, 2 \u00e7ekirdekli bir sistem i\u00e7in <code>2<\/em>2+1 = 5<\/code> worker). Ancak bu, uygulaman\u0131z\u0131n i\u015f y\u00fck\u00fcne ve sunucunuzun kaynaklar\u0131na g\u00f6re ayarlanmal\u0131d\u0131r.<br \/>\n*   <code>app:app<\/code>: Gunicorn&#8217;a hangi WSGI uygulamas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131rmas\u0131 gerekti\u011fini s\u00f6yler. Buradaki ilk <code>app<\/code>, <code>app.py<\/code> dosyam\u0131z\u0131n ad\u0131d\u0131r (mod\u00fcl ad\u0131). \u0130kinci <code>app<\/code> ise, bu mod\u00fcl i\u00e7inde Flask uygulamas\u0131n\u0131 temsil eden <code>Flask(__name__)<\/code> ile olu\u015fturdu\u011fumuz de\u011fi\u015fkenin ad\u0131d\u0131r.<\/p>\n<p>Komutu \u00e7al\u0131\u015ft\u0131rd\u0131ktan sonra, Gunicorn&#8217;un 8000 numaral\u0131 portta dinlemeye ba\u015flad\u0131\u011f\u0131n\u0131 g\u00f6steren bir \u00e7\u0131kt\u0131 g\u00f6rmelisiniz. Taray\u0131c\u0131n\u0131zda <code>http:\/\/127.0.0.1:8000<\/code> adresine giderek uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulayabilirsiniz. <code>http:\/\/127.0.0.1:8000\/about<\/code> adresini de kontrol etmeyi unutmay\u0131n.<\/p>\n<h3>DigitalOcean App Platform Hakk\u0131nda<\/h3>\n<p>DigitalOcean App Platform, geli\u015ftiricilerin kodlar\u0131n\u0131 da\u011f\u0131tmak, \u00e7al\u0131\u015ft\u0131rmak ve \u00f6l\u00e7eklendirmek i\u00e7in tasarlanm\u0131\u015f tam y\u00f6netilen bir Platform as a Service (PaaS) \u00e7\u00f6z\u00fcm\u00fcd\u00fcr. Altyap\u0131 y\u00f6netimiyle u\u011fra\u015fmak yerine, geli\u015ftiricilerin sadece kod yazmaya odaklanmas\u0131n\u0131 sa\u011flar.<\/p>\n<h4>App Platform&#8217;un Avantajlar\u0131:<\/h4>\n<p>*   <strong>Otomatik Derleme ve Da\u011f\u0131t\u0131m:<\/strong> Kodunuzu bir Git deposuna (GitHub, GitLab, Bitbucket) ba\u011flad\u0131\u011f\u0131n\u0131zda, App Platform kodunuzdaki de\u011fi\u015fiklikleri otomatik olarak alg\u0131lar, derler ve da\u011f\u0131t\u0131r.<br \/>\n*   <strong>Y\u00f6netilen Altyap\u0131:<\/strong> Sunucu yap\u0131land\u0131rmas\u0131, i\u015fletim sistemi g\u00fcncellemeleri, g\u00fcvenlik yamalar\u0131 gibi altyap\u0131sal g\u00f6revlerle u\u011fra\u015fman\u0131za gerek kalmaz. DigitalOcean bu i\u015fleri sizin i\u00e7in y\u00f6netir.<br \/>\n*   <strong>Otomatik \u00d6l\u00e7eklendirme:<\/strong> Uygulaman\u0131z\u0131n trafik y\u00fck\u00fcne g\u00f6re otomatik olarak yatay (daha fazla \u00f6rnek) veya dikey (daha g\u00fc\u00e7l\u00fc \u00f6rnekler) \u00f6l\u00e7eklenebilir.<br \/>\n*   <strong>\u00dccretsiz SSL Sertifikalar\u0131:<\/strong> Uygulamalar\u0131n\u0131z i\u00e7in otomatik olarak \u00fccretsiz SSL sertifikalar\u0131 sa\u011flar, b\u00f6ylece g\u00fcvenli HTTPS ba\u011flant\u0131lar\u0131 kurabilirsiniz.<br \/>\n*   <strong>Yerle\u015fik CI\/CD:<\/strong> Her kod commit&#8217;i ile otomatik da\u011f\u0131t\u0131m, s\u00fcrekli entegrasyon ve s\u00fcrekli da\u011f\u0131t\u0131m (CI\/CD) s\u00fcre\u00e7lerini basitle\u015ftirir.<br \/>\n*   <strong>\u00c7e\u015fitli Bile\u015fen Tipleri:<\/strong> Web servisleri, worker&#8217;lar, statik siteler, veritabanlar\u0131 ve cron i\u015fleri gibi farkl\u0131 uygulama bile\u015fenlerini destekler.<br \/>\n*   <strong>Maliyet Etkinli\u011fi:<\/strong> Kullan\u0131m\u0131n\u0131za g\u00f6re \u00f6deme yapars\u0131n\u0131z ve ba\u015flang\u0131\u00e7 seviyesi projeler i\u00e7in genellikle uygun fiyatl\u0131 se\u00e7enekler sunar.<\/p>\n<p>App Platform, uygulaman\u0131z\u0131n dilini veya \u00e7er\u00e7evesini (\u00f6rne\u011fin Python, Node.js, Go, PHP, Ruby) otomatik olarak alg\u0131lamak i\u00e7in buildpack&#8217;leri kullan\u0131r. Python uygulamalar\u0131 i\u00e7in, <code>requirements.txt<\/code> dosyas\u0131n\u0131 ve <code>Procfile<\/code>&#8216;\u0131 tarayarak gerekli ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fckler ve uygulaman\u0131z\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r.<\/p>\n<h3>Uygulamay\u0131 DigitalOcean App Platform&#8217;a Haz\u0131rlama<\/h3>\n<p>Uygulamam\u0131z\u0131 App Platform&#8217;a da\u011f\u0131tmadan \u00f6nce son bir ad\u0131m olarak, App Platform&#8217;a uygulaman\u0131n nas\u0131l \u00e7al\u0131\u015ft\u0131r\u0131laca\u011f\u0131n\u0131 bildirmemiz gerekiyor.<\/p>\n<h4><code>Procfile<\/code> Olu\u015fturma<\/h4>\n<p><code>Procfile<\/code>, uygulaman\u0131z\u0131n farkl\u0131 s\u00fcre\u00e7 t\u00fcrlerini (web, worker, vb.) nas\u0131l ba\u015flatmas\u0131 gerekti\u011fini tan\u0131mlayan basit bir metin dosyas\u0131d\u0131r. App Platform, Python uygulamalar\u0131 i\u00e7in bu dosyay\u0131 otomatik olarak arar. Proje dizininizin k\u00f6k\u00fcnde <code>Procfile<\/code> ad\u0131nda bir dosya olu\u015fturun (dosya uzant\u0131s\u0131 yok) ve i\u00e7ine a\u015fa\u011f\u0131daki sat\u0131r\u0131 ekleyin:<\/p>\n<pre><code class=\"language-\">web: gunicorn -w ${WEB_CONCURRENCY:-4} app:app<\/code><\/pre>\n<p>Bu sat\u0131r:<\/p>\n<p>*   <code>web<\/code>: Bu s\u00fcrecin bir web servisi oldu\u011funu belirtir. App Platform, HTTP isteklerini bu s\u00fcrece y\u00f6nlendirecektir.<br \/>\n*   <code>gunicorn -w ${WEB_CONCURRENCY:-4} app:app<\/code>: Gunicorn&#8217;u ba\u015flatma komutumuzdur. Burada <code>WEB_CONCURRENCY<\/code> bir ortam de\u011fi\u015fkenidir. E\u011fer App Platform bu de\u011fi\u015fkeni ayarlamazsa (varsay\u0131lan olarak ayarlamaz), Gunicorn 4 worker ile \u00e7al\u0131\u015facakt\u0131r. Bu, uygulaman\u0131z\u0131n worker say\u0131s\u0131n\u0131 App Platform aray\u00fcz\u00fcnden veya <code>app.yaml<\/code> dosyas\u0131ndan kolayca yap\u0131land\u0131rman\u0131za olanak tan\u0131r.<\/p>\n<h4>Git Deposuna G\u00f6nderme<\/h4>\n<p>App Platform, kodunuzu bir Git deposundan \u00e7ekece\u011fi i\u00e7in, projenizi bir Git deposuna eklemeli ve uzak bir depoya g\u00f6ndermelisiniz.<\/p>\n<p>1.  <strong>Git deposunu ba\u015flat:<\/strong> Proje dizininizde (sanal ortam\u0131n d\u0131\u015f\u0131nda) a\u015fa\u011f\u0131daki komutlar\u0131 \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">git init<\/code><\/pre>\n<p>2.  <strong><code>.gitignore<\/code> dosyas\u0131 olu\u015ftur (iste\u011fe ba\u011fl\u0131 ama \u015fiddetle tavsiye edilir):<\/strong> Sanal ortam dosyalar\u0131 gibi gereksiz dosyalar\u0131n depoya y\u00fcklenmesini engellemek i\u00e7in <code>.gitignore<\/code> dosyas\u0131 olu\u015fturun.<\/p>\n<pre><code class=\"language-\">venv\/\n    __pycache__\/\n    .DS_Store\n    *.pyc<\/code><\/pre>\n<p>3.  <strong>Dosyalar\u0131 ekle ve commit et:<\/strong><\/p>\n<pre><code class=\"language-bash\">git add .\n    git commit -m \"Initial Flask app for App Platform deployment\"<\/code><\/pre>\n<p>4.  <strong>Uzak depo olu\u015ftur ve push et:<\/strong> GitHub, GitLab veya Bitbucket gibi bir platformda yeni bir bo\u015f depo olu\u015fturun. Ard\u0131ndan, yerel deponuzu bu uzak depoya ba\u011flay\u0131n ve kodunuzu g\u00f6nderin. \u00d6rne\u011fin, GitHub i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">git branch -M main\n    git remote add origin https:\/\/github.com\/your-username\/my-flask-app.git # Kendi depo URL'nizle de\u011fi\u015ftirin\n    git push -u origin main<\/code><\/pre>\n<p>Kodunuz art\u0131k uzak depoda ve App Platform&#8217;a da\u011f\u0131t\u0131lmaya haz\u0131r.<\/p>\n<h3>DigitalOcean App Platform&#8217;a Da\u011f\u0131t\u0131m<\/h3>\n<p>Uygulaman\u0131z\u0131 App Platform&#8217;a da\u011f\u0131tman\u0131n iki ana yolu vard\u0131r: DigitalOcean kontrol paneli \u00fczerinden veya <code>doctl<\/code> CLI arac\u0131yla. Her iki y\u00f6ntemi de ad\u0131m ad\u0131m inceleyelim.<\/p>\n<h4>Y\u00f6ntem 1: DigitalOcean Kontrol Paneli \u00dczerinden Da\u011f\u0131t\u0131m<\/h4>\n<p>Bu y\u00f6ntem, yeni ba\u015flayanlar i\u00e7in daha g\u00f6rsel ve kolayd\u0131r.<\/p>\n<p>1.  <strong>DigitalOcean Hesab\u0131na Giri\u015f:<\/strong> DigitalOcean kontrol panelinize giri\u015f yap\u0131n.<br \/>\n2.  <strong>Yeni Uygulama Olu\u015ftur:<\/strong> Sol kenar \u00e7ubu\u011fundaki men\u00fcden &#8220;Apps&#8221; se\u00e7ene\u011fine t\u0131klay\u0131n, ard\u0131ndan &#8220;Create App&#8221; veya &#8220;Launch Your First App&#8221; d\u00fc\u011fmesine bas\u0131n.<br \/>\n3.  <strong>Kaynak Se\u00e7imi:<\/strong> Uygulama kodunuzun bulundu\u011fu Git sa\u011flay\u0131c\u0131s\u0131n\u0131 se\u00e7in (GitHub, GitLab veya Bitbucket). E\u011fer daha \u00f6nce yetkilendirmediyseniz, DigitalOcean&#8217;\u0131n Git hesab\u0131n\u0131za eri\u015fimi i\u00e7in yetkilendirme yapman\u0131z istenecektir.<br \/>\n4.  <strong>Depo ve Branch Se\u00e7imi:<\/strong> A\u00e7\u0131l\u0131r listeden az \u00f6nce olu\u015fturdu\u011funuz <code>my_flask_app<\/code> deposunu ve <code>main<\/code> (veya kulland\u0131\u011f\u0131n\u0131z branch) branch&#8217;ini se\u00e7in. &#8220;Next&#8221; d\u00fc\u011fmesine t\u0131klay\u0131n.<br \/>\n5.  <strong>Kaynak Yap\u0131land\u0131rmas\u0131:<\/strong> App Platform, deponuzu tarayacak ve Python uygulaman\u0131z\u0131 otomatik olarak alg\u0131layacakt\u0131r. Bir web servisi olarak yap\u0131land\u0131rma \u00f6nerisi g\u00f6receksiniz.<br \/>\n    *   <strong>Resource Type:<\/strong> &#8220;Web Service&#8221; olarak kalmal\u0131d\u0131r.<br \/>\n    *   <strong>Name:<\/strong> Uygulaman\u0131z i\u00e7in benzersiz bir isim girin (\u00f6rne\u011fin, <code>my-flask-app<\/code>).<br \/>\n    *   <strong>Source:<\/strong> Git deponuz ve branch&#8217;iniz burada g\u00f6r\u00fcnmelidir.<br \/>\n    *   <strong>Build Command:<\/strong> App Platform, Python uygulamalar\u0131 i\u00e7in genellikle <code>pip install -r requirements.txt<\/code> komutunu otomatik olarak alg\u0131lar. Bu komut, ba\u011f\u0131ml\u0131l\u0131klar\u0131 y\u00fcklemek i\u00e7in kullan\u0131l\u0131r.<br \/>\n    *   <strong>Run Command:<\/strong> <code>Procfile<\/code> dosyan\u0131zdaki komut ( <code>gunicorn -w ${WEB_CONCURRENCY:-4} app:app<\/code>) burada otomatik olarak g\u00f6r\u00fcnmelidir. E\u011fer g\u00f6r\u00fcnm\u00fcyorsa, manuel olarak girebilirsiniz.<br \/>\n    *   <strong>HTTP Port:<\/strong> Varsay\u0131lan olarak 8080 olarak ayarlanmal\u0131d\u0131r. App Platform, gelen istekleri otomatik olarak bu porta y\u00f6nlendirir.<br \/>\n    *   <strong>Environment Variables:<\/strong> Uygulaman\u0131z i\u00e7in herhangi bir ortam de\u011fi\u015fkeni ayarlaman\u0131z gerekiyorsa (\u00f6rne\u011fin, veritaban\u0131 ba\u011flant\u0131 dizeleri, API anahtarlar\u0131), bu b\u00f6l\u00fcmde &#8220;Add&#8221; d\u00fc\u011fmesine t\u0131klayarak ekleyebilirsiniz. Bu konuya daha sonra de\u011finece\u011fiz.<br \/>\n    *   &#8220;Next&#8221; d\u00fc\u011fmesine t\u0131klay\u0131n.<br \/>\n6.  <strong>Uygulama Bilgileri ve Da\u011f\u0131t\u0131m:<\/strong><br \/>\n    *   <strong>Name:<\/strong> Uygulaman\u0131z\u0131n genel ad\u0131n\u0131 onaylay\u0131n.<br \/>\n    *   <strong>Project:<\/strong> Uygulaman\u0131z\u0131 atamak istedi\u011finiz DigitalOcean projesini se\u00e7in.<br \/>\n    *   <strong>Region:<\/strong> Uygulaman\u0131z\u0131 da\u011f\u0131tmak istedi\u011finiz b\u00f6lgeyi se\u00e7in. Kullan\u0131c\u0131lar\u0131n\u0131za en yak\u0131n b\u00f6lgeyi se\u00e7mek gecikmeyi azalt\u0131r.<br \/>\n    *   <strong>Plan:<\/strong> Uygulaman\u0131z i\u00e7in bir plan se\u00e7in (Basic, Professional). Ba\u015flang\u0131\u00e7 i\u00e7in &#8220;Basic&#8221; plan yeterli olacakt\u0131r. Bu planlar, uygulaman\u0131z\u0131n kaynaklar\u0131n\u0131 (CPU, RAM) ve maliyetini belirler.<br \/>\n    *   &#8220;Create Resources&#8221; d\u00fc\u011fmesine t\u0131klay\u0131n.<\/p>\n<p>App Platform \u015fimdi uygulaman\u0131z\u0131n derleme ve da\u011f\u0131t\u0131m s\u00fcrecini ba\u015flatacakt\u0131r. Bu i\u015flem birka\u00e7 dakika s\u00fcrebilir. \u0130\u015flem tamamland\u0131\u011f\u0131nda, uygulaman\u0131z\u0131n genel bir URL&#8217;si (\u00f6rne\u011fin, <code>my-flask-app-xxxx.ondigitalocean.app<\/code>) size sunulacakt\u0131r. Bu URL&#8217;yi taray\u0131c\u0131n\u0131zda a\u00e7arak uygulaman\u0131z\u0131n canl\u0131da \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulayabilirsiniz.<\/p>\n<h4>Y\u00f6ntem 2: <code>doctl<\/code> CLI ile Da\u011f\u0131t\u0131m (Geli\u015fmi\u015f Y\u00f6ntem)<\/h4>\n<p><code>doctl<\/code>, DigitalOcean kaynaklar\u0131n\u0131z\u0131 komut sat\u0131r\u0131ndan y\u00f6netmek i\u00e7in g\u00fc\u00e7l\u00fc bir ara\u00e7t\u0131r. Uygulama da\u011f\u0131t\u0131mlar\u0131n\u0131 otomatikle\u015ftirmek veya CI\/CD boru hatlar\u0131na entegre etmek i\u00e7in idealdir.<\/p>\n<p>1.  <strong><code>doctl<\/code> Kurulumu:<\/strong> <code>doctl<\/code> hen\u00fcz kurulu de\u011filse, DigitalOcean&#8217;\u0131n resmi belgelerinden i\u015fletim sisteminize uygun kurulum ad\u0131mlar\u0131n\u0131 takip edin.<br \/>\n2.  <strong><code>doctl<\/code> Yetkilendirme:<\/strong> <code>doctl<\/code>&#8216;\u0131 DigitalOcean hesab\u0131n\u0131zla yetkilendirin:<\/p>\n<pre><code class=\"language-bash\">doctl auth init<\/code><\/pre>\n<p>    Bu komut, bir taray\u0131c\u0131 a\u00e7acak ve DigitalOcean kontrol panelinde bir API token&#8217;\u0131 olu\u015fturman\u0131z\u0131 isteyecektir. Token&#8217;\u0131 kopyalay\u0131p terminale yap\u0131\u015ft\u0131r\u0131n.<br \/>\n3.  <strong><code>app.yaml<\/code> Dosyas\u0131 Olu\u015fturma:<\/strong> Uygulaman\u0131z\u0131n yap\u0131land\u0131rmas\u0131n\u0131 tan\u0131mlayan bir <code>app.yaml<\/code> dosyas\u0131 olu\u015fturun. Bu dosya, kontrol panelindeki ad\u0131mlar\u0131 kod olarak temsil eder. Proje dizininizin k\u00f6k\u00fcnde <code>app.yaml<\/code> ad\u0131nda bir dosya olu\u015fturun:<\/p>\n<pre><code class=\"language-yaml\">name: my-flask-app-cli\n    region: nyc3 # Uygulaman\u0131z\u0131 da\u011f\u0131tmak istedi\u011finiz b\u00f6lgeyi se\u00e7in (\u00f6rne\u011fin, nyc3, fra1)\n    services:\n    - name: web\n        git:\n        branch: main\n        repo: https:\/\/github.com\/your-username\/my-flask-app # Kendi depo URL'nizle de\u011fi\u015ftirin\n        build_command: pip install -r requirements.txt\n        run_command: gunicorn -w ${WEB_CONCURRENCY:-4} app:app\n        environment_variables:\n        - key: FLASK_ENV\n            scope: RUN_TIME\n            value: production\n        routes:\n        - path: \/<\/code><\/pre>\n<p>    Bu <code>app.yaml<\/code> dosyas\u0131nda:<br \/>\n    *   <code>name<\/code>: Uygulaman\u0131z\u0131n benzersiz ad\u0131.<br \/>\n    *   <code>region<\/code>: Uygulaman\u0131n da\u011f\u0131t\u0131laca\u011f\u0131 DigitalOcean b\u00f6lgesi.<br \/>\n    *   <code>services<\/code>: Uygulaman\u0131n bile\u015fenlerini tan\u0131mlar.<br \/>\n        *   <code>name: web<\/code>: Web servis bile\u015fenimiz.<br \/>\n        *   <code>git<\/code>: Depo bilgilerini i\u00e7erir.<br \/>\n        *   <code>build_command<\/code>: Uygulama derlenirken \u00e7al\u0131\u015facak komut.<br \/>\n        *   <code>run_command<\/code>: Uygulama ba\u015flat\u0131ld\u0131\u011f\u0131nda \u00e7al\u0131\u015facak komut.<br \/>\n        *   <code>environment_variables<\/code>: Ortam de\u011fi\u015fkenleri tan\u0131mlan\u0131r. <code>FLASK_ENV<\/code> de\u011fi\u015fkenini <code>production<\/code> olarak ayarlad\u0131k.<br \/>\n        *   <code>routes<\/code>: Gelen isteklerin hangi yola y\u00f6nlendirilece\u011fini belirtir.<br \/>\n4.  <strong>Uygulamay\u0131 Da\u011f\u0131tma:<\/strong> <code>app.yaml<\/code> dosyas\u0131n\u0131 kullanarak uygulamay\u0131 da\u011f\u0131t\u0131n:<\/p>\n<pre><code class=\"language-bash\">doctl apps create --spec app.yaml<\/code><\/pre>\n<p>    E\u011fer uygulamay\u0131 g\u00fcncellemek isterseniz (\u00f6rne\u011fin, <code>app.yaml<\/code> dosyas\u0131nda de\u011fi\u015fiklik yapt\u0131n\u0131z), uygulaman\u0131z\u0131n ID&#8217;sini alman\u0131z ve a\u015fa\u011f\u0131daki komutu kullanman\u0131z gerekir:<\/p>\n<pre><code class=\"language-bash\">doctl apps list # Uygulaman\u0131z\u0131n ID'sini almak i\u00e7in\n    doctl apps update <your-app-id> --spec app.yaml<\/code><\/pre>\n<p>    <code>doctl<\/code> komutu, da\u011f\u0131t\u0131m s\u00fcrecini ba\u015flatacak ve tamamland\u0131\u011f\u0131nda size uygulaman\u0131z\u0131n URL&#8217;sini ve durumunu g\u00f6sterecektir.<\/p>\n<h3>Ortam De\u011fi\u015fkenleri Y\u00f6netimi<\/h3>\n<p>\u00dcretim ortamlar\u0131nda hassas bilgileri (veritaban\u0131 \u015fifreleri, API anahtarlar\u0131, gizli anahtarlar vb.) do\u011frudan kod i\u00e7ine yazmak b\u00fcy\u00fck bir g\u00fcvenlik riskidir. Ortam de\u011fi\u015fkenleri, bu t\u00fcr bilgileri uygulaman\u0131zdan ayr\u0131 tutman\u0131n ve g\u00fcvenli bir \u015fekilde y\u00f6netmenin standart yoludur.<\/p>\n<p>DigitalOcean App Platform, ortam de\u011fi\u015fkenlerini kolayca ayarlaman\u0131za olanak tan\u0131r:<\/p>\n<p>*   <strong>Kontrol Paneli \u00dczerinden:<\/strong> Uygulaman\u0131z\u0131n bile\u015fen ayarlar\u0131na gidin. &#8220;Environment Variables&#8221; b\u00f6l\u00fcm\u00fcnde &#8220;Add&#8221; d\u00fc\u011fmesine t\u0131klayarak yeni de\u011fi\u015fkenler ekleyebilirsiniz. Her de\u011fi\u015fken i\u00e7in bir anahtar (Key), bir de\u011fer (Value) ve bir kapsam (Scope) belirtmeniz gerekir.<br \/>\n    *   <strong>Scope:<\/strong><br \/>\n        *   <code>BUILD_TIME<\/code>: De\u011fi\u015fken, uygulaman\u0131n derleme (build) a\u015famas\u0131nda kullan\u0131labilir.<br \/>\n        *   <code>RUN_TIME<\/code>: De\u011fi\u015fken, uygulaman\u0131n \u00e7al\u0131\u015fma (runtime) a\u015famas\u0131nda kullan\u0131labilir. Hassas bilgiler genellikle <code>RUN_TIME<\/code> kapsam\u0131nda olmal\u0131d\u0131r.<br \/>\n    *   <strong>Encrypt:<\/strong> Hassas de\u011ferleri \u015fifrelemek i\u00e7in bu se\u00e7ene\u011fi i\u015faretleyebilirsiniz.<br \/>\n*   <strong><code>app.yaml<\/code> ile:<\/strong> Yukar\u0131daki <code>app.yaml<\/code> \u00f6rne\u011finde g\u00f6sterildi\u011fi gibi, <code>environment_variables<\/code> alt\u0131nda anahtar-de\u011fer \u00e7iftleri olarak tan\u0131mlayabilirsiniz.<\/p>\n<p>Uygulaman\u0131z i\u00e7inde bu ortam de\u011fi\u015fkenlerine Python&#8217;da <code>os.environ.get('YOUR_VARIABLE_NAME')<\/code> kullanarak eri\u015febilirsiniz.<\/p>\n<pre><code class=\"language-python\">import os\n\nsecret_key = os.environ.get('FLASK_SECRET_KEY', 'default_secret_key_for_dev')\ndatabase_url = os.environ.get('DATABASE_URL')\n\n<h2>Uygulaman\u0131zda bu de\u011fi\u015fkenleri kullanabilirsiniz<\/code><\/pre>\n<\/h2>\n<h3>Loglar\u0131 \u0130zleme ve Hata Ay\u0131klama<\/h3>\n<p>Uygulaman\u0131z canl\u0131ya al\u0131nd\u0131ktan sonra, performans\u0131n\u0131 ve sa\u011fl\u0131\u011f\u0131n\u0131 izlemek, olas\u0131 sorunlar\u0131 tespit etmek ve hata ay\u0131klamak kritik \u00f6neme sahiptir. App Platform, bu s\u00fcre\u00e7leri kolayla\u015ft\u0131ran kapsaml\u0131 g\u00fcnl\u00fck (log) ve izleme ara\u00e7lar\u0131 sunar.<\/p>\n<h4>Loglara Eri\u015fim<\/h4>\n<p>DigitalOcean kontrol panelinde uygulaman\u0131z\u0131n sayfas\u0131na gitti\u011finizde, her bir bile\u015fen (web servisi, worker, veritaban\u0131 vb.) i\u00e7in ayr\u0131 log ak\u0131\u015flar\u0131n\u0131 g\u00f6receksiniz.<\/p>\n<p>*   <strong>Build Logs:<\/strong> Uygulaman\u0131z\u0131n derleme a\u015famas\u0131nda (ba\u011f\u0131ml\u0131l\u0131klar\u0131n y\u00fcklenmesi, kodun derlenmesi) olu\u015fan \u00e7\u0131kt\u0131lar\u0131 ve hatalar\u0131 g\u00f6sterir. E\u011fer uygulaman\u0131z da\u011f\u0131t\u0131lam\u0131yorsa, ilk bakman\u0131z gereken yer buras\u0131d\u0131r.<br \/>\n*   <strong>Runtime Logs:<\/strong> Uygulaman\u0131z\u0131n \u00e7al\u0131\u015fma zaman\u0131nda \u00fcretti\u011fi t\u00fcm \u00e7\u0131kt\u0131lar\u0131 (\u00f6rne\u011fin, <code>print()<\/code> ifadeleri, Flask&#8217;\u0131n hata mesajlar\u0131, Gunicorn&#8217;un eri\u015fim loglar\u0131) g\u00f6sterir. Uygulaman\u0131z\u0131n beklenmedik davran\u0131\u015flar sergilemesi veya \u00e7\u00f6kmesi durumunda bu loglar size yol g\u00f6sterecektir.<\/p>\n<p>Loglar\u0131 ger\u00e7ek zamanl\u0131 olarak takip edebilir veya ge\u00e7mi\u015f loglar\u0131 inceleyebilirsiniz.<\/p>\n<h4>Yayg\u0131n Hatalar ve \u00c7\u00f6z\u00fcmleri<\/h4>\n<p>*   <strong>Uygulama Ba\u015flat\u0131lam\u0131yor (<code>Procfile<\/code> Hatas\u0131):<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> <code>Procfile<\/code> dosyas\u0131 do\u011fru yerde de\u011fil (proje k\u00f6k\u00fcnde olmal\u0131), dosya ad\u0131 yanl\u0131\u015f yaz\u0131lm\u0131\u015f (<code>Procfile<\/code> yerine <code>procfile<\/code> veya <code>Procfile.txt<\/code>), veya i\u00e7indeki komut hatal\u0131.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>Procfile<\/code> ad\u0131n\u0131n ve i\u00e7eri\u011finin do\u011fru oldu\u011fundan emin olun. Gunicorn komutunun yerel olarak \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulay\u0131n.<br \/>\n*   <strong>Ba\u011f\u0131ml\u0131l\u0131k Y\u00fckleme Hatas\u0131:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> <code>requirements.txt<\/code> dosyas\u0131 eksik, yanl\u0131\u015f bi\u00e7imlendirilmi\u015f veya eksik ba\u011f\u0131ml\u0131l\u0131klar i\u00e7eriyor.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> <code>pip freeze > requirements.txt<\/code> komutunu kullanarak <code>requirements.txt<\/code> dosyas\u0131n\u0131 yeniden olu\u015fturun ve t\u00fcm gerekli paketlerin orada oldu\u011fundan emin olun.<br \/>\n*   <strong>Port Hatas\u0131:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Uygulaman\u0131z\u0131n 8080 numaral\u0131 portta dinlemedi\u011fi bir durum. App Platform, web servislerinden 8080 portunda dinlemesini bekler.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Gunicorn komutunuzun varsay\u0131lan olarak 8080 portunda dinledi\u011finden emin olun. Genellikle <code>gunicorn<\/code> komutu varsay\u0131lan olarak 8000 portunu kullan\u0131r. E\u011fer <code>Procfile<\/code>&#8216;\u0131n\u0131zda port belirtmezseniz, App Platform genellikle Gunicorn&#8217;u 8080&#8217;e y\u00f6nlendirir. Ancak emin olmak i\u00e7in <code>gunicorn -b 0.0.0.0:8080 -w ${WEB_CONCURRENCY:-4} app:app<\/code> \u015feklinde a\u00e7\u0131k\u00e7a belirtebilirsiniz.<br \/>\n*   <strong>Ortam De\u011fi\u015fkeni Eksikli\u011fi:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> Uygulaman\u0131z\u0131n ihtiya\u00e7 duydu\u011fu bir ortam de\u011fi\u015fkeni App Platform&#8217;da ayarlanmam\u0131\u015f veya yanl\u0131\u015f yaz\u0131lm\u0131\u015f.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Uygulaman\u0131z\u0131n ihtiya\u00e7 duydu\u011fu t\u00fcm ortam de\u011fi\u015fkenlerinin App Platform kontrol panelinde veya <code>app.yaml<\/code> dosyas\u0131nda do\u011fru anahtar ve de\u011ferlerle tan\u0131mland\u0131\u011f\u0131ndan emin olun. <code>RUN_TIME<\/code> kapsam\u0131na dikkat edin.<br \/>\n*   <strong>Git Deposu Senkronizasyon Sorunlar\u0131:<\/strong><br \/>\n    *   <strong>Sorun:<\/strong> En son kod de\u011fi\u015fiklikleriniz App Platform&#8217;a yans\u0131m\u0131yor.<br \/>\n    *   <strong>\u00c7\u00f6z\u00fcm:<\/strong> Kodunuzu uzak Git deponuza <code>git push<\/code> ile ba\u015far\u0131yla g\u00f6nderdi\u011finizden emin olun. App Platform&#8217;daki da\u011f\u0131t\u0131m ge\u00e7mi\u015fini kontrol edin ve yeni bir da\u011f\u0131t\u0131m tetiklemeyi deneyin.<\/p>\n<h3>\u00d6l\u00e7eklendirme ve Performans \u0130pu\u00e7lar\u0131<\/h3>\n<p>Uygulaman\u0131z\u0131n kullan\u0131c\u0131 say\u0131s\u0131 artt\u0131k\u00e7a veya i\u015f y\u00fck\u00fc yo\u011funla\u015ft\u0131k\u00e7a, performans\u0131n\u0131 korumak ve kesintisiz hizmet vermek i\u00e7in \u00f6l\u00e7eklendirme hayati \u00f6nem ta\u015f\u0131r. DigitalOcean App Platform, bu konuda esnek ve g\u00fc\u00e7l\u00fc ara\u00e7lar sunar.<\/p>\n<h4>App Platform&#8217;da \u00d6l\u00e7eklendirme Se\u00e7enekleri<\/h4>\n<p>1.  <strong>Dikey \u00d6l\u00e7eklendirme (Vertical Scaling):<\/strong><br \/>\n    *   Uygulaman\u0131z\u0131n mevcut \u00f6rneklerinin (instance) CPU ve RAM gibi kaynaklar\u0131n\u0131 art\u0131rmay\u0131 ifade eder. App Platform&#8217;da, uygulaman\u0131z\u0131n web servisi veya worker bile\u015feninin plan\u0131n\u0131 (\u00f6rne\u011fin, Basic&#8217;ten Professional&#8217;a veya daha y\u00fcksek bir boyuta) de\u011fi\u015ftirerek bunu yapabilirsiniz. Daha g\u00fc\u00e7l\u00fc bir plan, daha fazla i\u015flem g\u00fcc\u00fc ve bellek sa\u011flar.<br \/>\n2.  <strong>Yatay \u00d6l\u00e7eklendirme (Horizontal Scaling):<\/strong><br \/>\n    *   Uygulaman\u0131z\u0131n \u00e7al\u0131\u015fan \u00f6rneklerinin say\u0131s\u0131n\u0131 art\u0131rmay\u0131 ifade eder. Her \u00f6rnek, uygulaman\u0131z\u0131n ayr\u0131 bir kopyas\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r ve gelen trafi\u011fi bu \u00f6rneklere da\u011f\u0131tarak y\u00fck\u00fc payla\u015f\u0131r. App Platform, web servisleri i\u00e7in birden fazla instance \u00e7al\u0131\u015ft\u0131rman\u0131za olanak tan\u0131r.<br \/>\n    *   <strong>Otomatik \u00d6l\u00e7eklendirme:<\/strong> App Platform, uygulaman\u0131z\u0131n CPU kullan\u0131m\u0131 veya gelen HTTP iste\u011fi say\u0131s\u0131 gibi metrikleri izleyerek otomatik olarak yeni \u00f6rnekler ekleyebilir veya gereksiz \u00f6rnekleri kald\u0131rabilir. Bu, trafik dalgalanmalar\u0131na dinamik olarak yan\u0131t vermenizi sa\u011flar ve maliyetleri optimize etmenize yard\u0131mc\u0131 olur. Kontrol panelinde uygulaman\u0131z\u0131n bile\u015fen ayarlar\u0131nda otomatik \u00f6l\u00e7eklendirme kurallar\u0131n\u0131 yap\u0131land\u0131rabilirsiniz.<\/p>\n<h4>Gunicorn Worker Say\u0131s\u0131 Ayarlama<\/h4>\n<p>Gunicorn&#8217;un worker say\u0131s\u0131, uygulaman\u0131z\u0131n e\u015fzamanl\u0131 istekleri ne kadar iyi i\u015fleyebilece\u011fini do\u011frudan etkiler. Optimal worker say\u0131s\u0131, uygulaman\u0131z\u0131n do\u011fas\u0131na (CPU yo\u011fun mu, I\/O yo\u011fun mu), sunucunuzun kaynaklar\u0131na ve beklenen trafik y\u00fck\u00fcne ba\u011fl\u0131d\u0131r.<\/p>\n<p><em>   <strong>Genel Kural:<\/strong> Genellikle, CPU \u00e7ekirdek say\u0131n\u0131z\u0131n iki kat\u0131 art\u0131 bir worker \u00f6nerilir (<code>2 <\/em> CPU_\u00c7ekirde\u011fi + 1<\/code>). \u00d6rne\u011fin, 2 \u00e7ekirdekli bir sunucuda 5 worker.<br \/>\n*   <strong><code>WEB_CONCURRENCY<\/code> Ortam De\u011fi\u015fkeni:<\/strong> <code>Procfile<\/code>&#8216;\u0131m\u0131zda kulland\u0131\u011f\u0131m\u0131z <code>${WEB_CONCURRENCY:-4}<\/code> yap\u0131s\u0131, App Platform&#8217;da bu de\u011fi\u015fkeni ayarlaman\u0131za olanak tan\u0131r. App Platform kontrol panelinden veya <code>app.yaml<\/code> dosyas\u0131ndan <code>WEB_CONCURRENCY<\/code> adl\u0131 bir ortam de\u011fi\u015fkeni tan\u0131mlayarak Gunicorn&#8217;un worker say\u0131s\u0131n\u0131 dinamik olarak ayarlayabilirsiniz. Bu, uygulaman\u0131z\u0131 yeniden da\u011f\u0131tmadan worker say\u0131s\u0131n\u0131 de\u011fi\u015ftirebilmeniz anlam\u0131na gelir.<\/p>\n<h4>Di\u011fer Performans \u0130pu\u00e7lar\u0131<\/h4>\n<p>*   <strong>Veritaban\u0131 Entegrasyonu:<\/strong> E\u011fer uygulaman\u0131z bir veritaban\u0131 kullan\u0131yorsa, DigitalOcean Managed Databases (PostgreSQL, MySQL, Redis) ile entegrasyonu d\u00fc\u015f\u00fcnebilirsiniz. Y\u00f6netilen veritabanlar\u0131, performans, yedekleme ve g\u00fcvenlik gibi konularda size b\u00fcy\u00fck kolayl\u0131klar sa\u011flar. Uygulaman\u0131z ile veritaban\u0131 aras\u0131ndaki ba\u011flant\u0131, App Platform&#8217;un otomatik olarak sa\u011flad\u0131\u011f\u0131 g\u00fcvenli i\u00e7 a\u011f \u00fczerinden ger\u00e7ekle\u015fir.<br \/>\n*   <strong>Statik Dosyalar ve CDN:<\/strong> Flask uygulamalar\u0131 genellikle HTML, CSS, JavaScript ve resimler gibi statik dosyalar sunar. Bu dosyalar\u0131 do\u011frudan Flask \u00fczerinden sunmak yerine, App Platform&#8217;daki &#8220;Static Site&#8221; bile\u015fenini kullanarak veya bir Content Delivery Network (CDN) entegre ederek uygulaman\u0131z\u0131n performans\u0131n\u0131 art\u0131rabilirsiniz. Bu, web servisinizin y\u00fck\u00fcn\u00fc azalt\u0131r ve son kullan\u0131c\u0131lar i\u00e7in daha h\u0131zl\u0131 y\u00fckleme s\u00fcreleri sa\u011flar.<br \/>\n*   <strong>\u00d6nbellekleme:<\/strong> Uygulaman\u0131zda s\u0131k\u00e7a eri\u015filen veriler veya sayfalar i\u00e7in \u00f6nbellekleme stratejileri uygulay\u0131n (\u00f6rne\u011fin, Redis veya Memcached kullanarak). Bu, veritaban\u0131 sorgular\u0131n\u0131n veya pahal\u0131 hesaplamalar\u0131n tekrar tekrar yap\u0131lmas\u0131n\u0131 \u00f6nler.<\/p>\n<h3>Sonu\u00e7<\/h3>\n<p>Bu kapsaml\u0131 rehberde, Flask uygulaman\u0131z\u0131 Gunicorn ile DigitalOcean App Platform&#8217;a da\u011f\u0131tman\u0131n t\u00fcm ad\u0131mlar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. Flask&#8217;\u0131n esnekli\u011fi, Gunicorn&#8217;un \u00fcretim ortam\u0131 sa\u011flaml\u0131\u011f\u0131 ve App Platform&#8217;un y\u00f6netilen PaaS yetenekleri bir araya geldi\u011finde, geli\u015ftiriciler i\u00e7in g\u00fc\u00e7l\u00fc, \u00f6l\u00e7eklenebilir ve bak\u0131m\u0131 kolay web uygulamalar\u0131 olu\u015fturman\u0131n yolu a\u00e7\u0131l\u0131r.<\/p>\n<p>Art\u0131k basit bir Flask uygulamas\u0131n\u0131 nas\u0131l olu\u015fturaca\u011f\u0131n\u0131z\u0131, Gunicorn ile yerel olarak nas\u0131l test edece\u011finizi, uygulaman\u0131z\u0131 App Platform&#8217;a da\u011f\u0131t\u0131m i\u00e7in nas\u0131l haz\u0131rlayaca\u011f\u0131n\u0131z\u0131 (\u00f6zellikle <code>Procfile<\/code> kullan\u0131m\u0131), DigitalOcean kontrol paneli veya <code>doctl<\/code> CLI arac\u0131l\u0131\u011f\u0131yla nas\u0131l da\u011f\u0131taca\u011f\u0131n\u0131z\u0131, ortam de\u011fi\u015fkenlerini nas\u0131l y\u00f6netece\u011finizi, loglar\u0131 nas\u0131l izleyip hata ay\u0131klayaca\u011f\u0131n\u0131z\u0131 ve son olarak uygulaman\u0131z\u0131n performans\u0131n\u0131 ve \u00f6l\u00e7eklenebilirli\u011fini nas\u0131l optimize edece\u011finizi biliyorsunuz.<\/p>\n<p>DigitalOcean App Platform, altyap\u0131 y\u00f6netimi y\u00fck\u00fcn\u00fc ortadan kald\u0131rarak geli\u015ftiricilerin ana i\u015flerine, yani harika uygulamalar yazmaya odaklanmas\u0131n\u0131 sa\u011flar. Bu rehberdeki bilgileri kullanarak, kendi Flask projelerinizi g\u00fcvenle canl\u0131ya ta\u015f\u0131yabilir ve modern web geli\u015ftirmenin sundu\u011fu t\u00fcm avantajlardan yararlanabilirsiniz. Unutmay\u0131n, her da\u011f\u0131t\u0131m bir \u00f6\u011frenme s\u00fcrecidir ve s\u00fcrekli izleme ve iyile\u015ftirme, ba\u015far\u0131l\u0131 bir \u00fcretim uygulamas\u0131n\u0131n anahtar\u0131d\u0131r.<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform&#8217;a Da\u011f\u0131tma Rehberi\nGiri\u015f\nModern web uygulamalar\u0131 geli\u015ftirme s\u00fcrecinde, h\u0131z, esneklik ve \u00f6l\u00e7ek","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":[1],"tags":[],"class_list":{"0":"post-35544","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","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>Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform&#039;a Da\u011f\u0131tma 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\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform&#039;a Da\u011f\u0131tma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform&#039;a Da\u011f\u0131tma Rehberi Giri\u015f Modern web uygulamalar\u0131 geli\u015ftirme s\u00fcrecinde, h\u0131z, esneklik ve \u00f6l\u00e7ek\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-11-30T21:40:53+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"21 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform&#8217;a Da\u011f\u0131tma Rehberi\",\"datePublished\":\"2025-11-30T21:40:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/\"},\"wordCount\":3815,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/\",\"name\":\"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform'a Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-11-30T21:40:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform&#8217;a Da\u011f\u0131tma 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":"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform'a Da\u011f\u0131tma 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\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform'a Da\u011f\u0131tma Rehberi","og_description":"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform'a Da\u011f\u0131tma Rehberi Giri\u015f Modern web uygulamalar\u0131 geli\u015ftirme s\u00fcrecinde, h\u0131z, esneklik ve \u00f6l\u00e7ek","og_url":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-11-30T21:40:53+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"21 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform&#8217;a Da\u011f\u0131tma Rehberi","datePublished":"2025-11-30T21:40:53+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/"},"wordCount":3815,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/","name":"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform'a Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-11-30T21:40:53+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/flask-uygulamasini-gunicorn-ile-app-platforma-dagitma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Flask Uygulamas\u0131n\u0131 Gunicorn ile App Platform&#8217;a Da\u011f\u0131tma 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\/35544","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=35544"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35544\/revisions"}],"predecessor-version":[{"id":35545,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/35544\/revisions\/35545"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=35544"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=35544"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=35544"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}