{"id":41684,"date":"2026-05-10T08:00:48","date_gmt":"2026-05-10T05:00:48","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/?p=41684"},"modified":"2026-05-10T08:00:48","modified_gmt":"2026-05-10T05:00:48","slug":"flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/","title":{"rendered":"Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.4 \u00dczerine Da\u011f\u0131tma Rehberi"},"content":{"rendered":"<h2>Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.4 \u00dczerine Da\u011f\u0131tma Rehberi<\/h2>\n<p><body><\/p>\n<h2>Giri\u015f<\/h2>\n<p>Modern web uygulamalar\u0131 geli\u015ftirilirken, genellikle bir uygulama sunucusu (application server) ile bir ters proxy (reverse proxy) sunucusunun birlikte kullan\u0131ld\u0131\u011f\u0131 katmanl\u0131 mimariler tercih edilir. Bu yakla\u015f\u0131m, performans, g\u00fcvenlik, \u00f6l\u00e7eklenebilirlik ve bak\u0131m kolayl\u0131\u011f\u0131 a\u00e7\u0131s\u0131ndan \u00f6nemli avantajlar sunar. Bu makalede, Python tabanl\u0131 hafif ve g\u00fc\u00e7l\u00fc bir web \u00e7at\u0131s\u0131 olan Flask ile geli\u015ftirilmi\u015f bir web uygulamas\u0131n\u0131, uWSGI uygulama sunucusu ve Nginx ters proxy sunucusu kullanarak CentOS 6.4 i\u015fletim sistemi \u00fczerinde nas\u0131l da\u011f\u0131taca\u011f\u0131m\u0131z\u0131 detayl\u0131 bir \u015fekilde inceleyece\u011fiz.<\/p>\n<p>Flask, k\u00fc\u00e7\u00fck ve orta \u00f6l\u00e7ekli projeler i\u00e7in ideal olan, &#8220;mikro \u00e7er\u00e7eve&#8221; olarak bilinen bir yap\u0131d\u0131r. Geli\u015ftiricilere esneklik sunar ve h\u0131zl\u0131 prototipleme imkan\u0131 sa\u011flar. Ancak Flask&#8217;\u0131n kendisi do\u011frudan internete a\u00e7\u0131k bir sunucu olarak tasarlanmam\u0131\u015ft\u0131r; \u00fcretim ortam\u0131nda kullan\u0131ld\u0131\u011f\u0131nda bir WSGI (Web Server Gateway Interface) sunucusu ile \u00e7al\u0131\u015fmas\u0131 gerekir. \u0130\u015fte bu noktada uWSGI devreye girer. uWSGI, Python uygulamalar\u0131 i\u00e7in tasarlanm\u0131\u015f, y\u00fcksek performansl\u0131, C dilinde yaz\u0131lm\u0131\u015f bir WSGI uygulama sunucusudur. Flask uygulaman\u0131z ile web sunucusu (Nginx) aras\u0131ndaki ileti\u015fimi y\u00f6netir.<\/p>\n<p>Nginx ise, y\u00fcksek performansl\u0131, a\u00e7\u0131k kaynakl\u0131 bir web sunucusu ve ters proxy sunucusudur. Statik dosyalar\u0131 sunma, y\u00fck dengeleme, SSL sonland\u0131rma ve \u00f6nbellekleme gibi g\u00f6revlerde \u00fcst\u00fcn bir performans sergiler. Bir ters proxy olarak Nginx, gelen HTTP isteklerini al\u0131r ve bunlar\u0131 uWSGI gibi arka u\u00e7 uygulama sunucular\u0131na y\u00f6nlendirir. Bu yap\u0131land\u0131rma, uygulaman\u0131n do\u011frudan internete maruz kalmas\u0131n\u0131 engeller, g\u00fcvenlik katman\u0131 sa\u011flar ve ayn\u0131 zamanda Nginx&#8217;in statik dosya sunma yetene\u011fi sayesinde uygulaman\u0131z\u0131n performans\u0131n\u0131 art\u0131r\u0131r.<\/p>\n<p>CentOS 6.4, bu makalenin yaz\u0131ld\u0131\u011f\u0131 d\u00f6nemde yayg\u0131n olarak kullan\u0131lan, kurumsal d\u00fczeyde stabil bir Linux da\u011f\u0131t\u0131m\u0131yd\u0131. Her ne kadar g\u00fcncel s\u00fcr\u00fcmler (CentOS 7, 8 Stream veya AlmaLinux\/Rocky Linux) mevcut olsa da, mevcut altyap\u0131larda CentOS 6.4 kullanan sistem y\u00f6neticileri veya geli\u015ftiriciler i\u00e7in bu rehber, eski nesil sistemlerde Flask uygulamalar\u0131n\u0131 da\u011f\u0131tma konusunda de\u011ferli bilgiler sunacakt\u0131r. Bu rehber, ad\u0131m ad\u0131m kurulum ve yap\u0131land\u0131rma s\u00fcre\u00e7lerini ele alarak, okuyucular\u0131n kendi Flask uygulamalar\u0131n\u0131 g\u00fcvenli ve verimli bir \u015fekilde da\u011f\u0131tmalar\u0131na yard\u0131mc\u0131 olmay\u0131 ama\u00e7lamaktad\u0131r.<\/p>\n<h2>\u00d6n Gereksinimler<\/h2>\n<p>Bu rehberi takip edebilmek i\u00e7in a\u015fa\u011f\u0131daki \u00f6n gereksinimlere sahip olman\u0131z gerekmektedir:<\/p>\n<p>*   <strong>CentOS 6.4 Sunucu:<\/strong> Kurulumu yap\u0131lm\u0131\u015f ve a\u011f ba\u011flant\u0131s\u0131 olan bir CentOS 6.4 sanal veya fiziksel sunucu.<br \/>\n*   <strong>Root veya Sudo Eri\u015fimi:<\/strong> Sunucu \u00fczerinde sistem genelinde paket kurma ve yap\u0131land\u0131rma de\u011fi\u015fiklikleri yapabilmek i\u00e7in root kullan\u0131c\u0131s\u0131 olarak veya <code>sudo<\/code> yetkisine sahip bir kullan\u0131c\u0131 olarak oturum a\u00e7m\u0131\u015f olman\u0131z gerekmektedir.<br \/>\n*   <strong>\u0130nternet Ba\u011flant\u0131s\u0131:<\/strong> Paket indirme ve g\u00fcncelleme i\u015flemleri i\u00e7in sunucunun internet ba\u011flant\u0131s\u0131na sahip olmas\u0131 \u015fartt\u0131r.<br \/>\n*   <strong>Temel Linux Bilgisi:<\/strong> Komut sat\u0131r\u0131 kullan\u0131m\u0131, dosya sisteminde gezinme ve temel metin d\u00fczenleyicileri (vi, nano) hakk\u0131nda bilgi sahibi olmak faydal\u0131 olacakt\u0131r.<\/p>\n<h2>Sistem G\u00fcncellemesi ve Temel Ara\u00e7lar\u0131n Kurulumu<\/h2>\n<p>Kuruluma ba\u015flamadan \u00f6nce, sistemin g\u00fcncel oldu\u011fundan ve gerekli geli\u015ftirme ara\u00e7lar\u0131n\u0131n y\u00fckl\u00fc oldu\u011fundan emin olmal\u0131y\u0131z.<\/p>\n<h3>Sistem G\u00fcncellemesi<\/h3>\n<p>\u00d6ncelikle, sistemdeki t\u00fcm paketleri g\u00fcncelleyelim. Bu, olas\u0131 g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 kapatmaya ve en son kararl\u0131 s\u00fcr\u00fcmleri kullanmaya yard\u0131mc\u0131 olacakt\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo yum update -y<\/code><\/pre>\n<h3>EPEL Deposunun Kurulumu<\/h3>\n<p>CentOS&#8217;un varsay\u0131lan depolar\u0131nda bulunmayan baz\u0131 paketler i\u00e7in EPEL (Extra Packages for Enterprise Linux) deposunu eklememiz gerekebilir. Nginx gibi baz\u0131 paketler genellikle EPEL \u00fczerinden temin edilir.<\/p>\n<pre><code class=\"language-bash\">sudo rpm -Uvh http:\/\/dl.fedoraproject.org\/pub\/epel\/6\/x86_64\/epel-release-6-8.noarch.rpm<\/code><\/pre>\n<p>_Not: Yukar\u0131daki URL zamanla de\u011fi\u015febilir. E\u011fer hata al\u0131rsan\u0131z, EPEL&#8217;in resmi web sitesinden CentOS 6 i\u00e7in g\u00fcncel <code>epel-release<\/code> paketini bulup indirmelisiniz._<\/p>\n<h3>Gerekli Geli\u015ftirme Ara\u00e7lar\u0131n\u0131n Kurulumu<\/h3>\n<p>uWSGI gibi baz\u0131 Python paketleri, C kodu i\u00e7erir ve derlenmesi gerekir. Bu nedenle, bir C derleyicisi (GCC) ve Python geli\u015ftirme ba\u015fl\u0131k dosyalar\u0131na ihtiyac\u0131m\u0131z olacak. Ayr\u0131ca <code>pip<\/code> (Python paket y\u00f6neticisi) i\u00e7in de gerekli olan <code>setuptools<\/code> ve <code>wheel<\/code> gibi paketleri kurmak faydal\u0131d\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo yum install -y gcc python-devel python-setuptools python-pip<\/code><\/pre>\n<p>Bu komut, derleyiciyi, Python&#8217;\u0131n geli\u015ftirme dosyalar\u0131n\u0131 ve Python paketlerini y\u00f6netmek i\u00e7in gerekli olan <code>pip<\/code>&#8216;i kuracakt\u0131r.<\/p>\n<h2>Python Ortam\u0131n\u0131n Haz\u0131rlanmas\u0131<\/h2>\n<p>Uygulamam\u0131z\u0131n ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 izole etmek ve sistem genelindeki Python kurulumunu kirletmemek i\u00e7in bir sanal ortam (virtual environment) kullanmak en iyi uygulamad\u0131r.<\/p>\n<h3>Sanal Ortam (Virtualenv) Kullan\u0131m\u0131<\/h3>\n<p><code>virtualenv<\/code>, Python projeleri i\u00e7in izole edilmi\u015f ortamlar olu\u015fturmaya yarayan bir ara\u00e7t\u0131r. Her proje kendi ba\u011f\u0131ml\u0131l\u0131klar\u0131na sahip olabilir ve bu ba\u011f\u0131ml\u0131l\u0131klar di\u011fer projelerle veya sistem Python kurulumuyla \u00e7ak\u0131\u015fmaz.<\/p>\n<p><code>virtualenv<\/code>&#8216;i kurmak i\u00e7in <code>pip<\/code>&#8216;i kullanabiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo pip install virtualenv<\/code><\/pre>\n<p>\u015eimdi, Flask uygulaman\u0131z i\u00e7in bir proje dizini olu\u015ftural\u0131m ve bu dizin i\u00e7inde bir sanal ortam kural\u0131m. Varsay\u0131lan olarak <code>\/var\/www\/<\/code> alt\u0131nda bir dizin olu\u015fturmak iyi bir yakla\u015f\u0131md\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/www\/myflaskapp\nsudo chown -R <code>whoami<\/code>:<code>whoami<\/code> \/var\/www\/myflaskapp # Dizin sahibini mevcut kullan\u0131c\u0131ya de\u011fi\u015ftirin\ncd \/var\/www\/myflaskapp\nvirtualenv venv<\/code><\/pre>\n<p>Sanal ortam\u0131 etkinle\u015ftirelim:<\/p>\n<pre><code class=\"language-bash\">source venv\/bin\/activate<\/code><\/pre>\n<p>Komut sat\u0131r\u0131n\u0131z\u0131n ba\u015f\u0131nda <code>(venv)<\/code> g\u00f6rd\u00fc\u011f\u00fcn\u00fczde, sanal ortam\u0131n etkinle\u015ftirildi\u011fi anlam\u0131na gelir.<\/p>\n<h3>Flask Uygulamas\u0131n\u0131n Olu\u015fturulmas\u0131<\/h3>\n<p>\u015eimdi basit bir Flask uygulamas\u0131 olu\u015ftural\u0131m. Proje dizinimizde (<code>\/var\/www\/myflaskapp<\/code>) <code>app.py<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">nano app.py<\/code><\/pre>\n<p>\u0130\u00e7ine a\u015fa\u011f\u0131daki kodu yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-python\">from flask import Flask\n\napp = Flask(__name__)\n\n@app.route('\/')\ndef hello():\n    return \"Merhaba, uWSGI ve Nginx ile Flask Uygulamas\u0131 \u00c7al\u0131\u015f\u0131yor!\"\n\n@app.route('\/test')\ndef test():\n    return \"Bu bir test sayfas\u0131d\u0131r.\"\n\nif __name__ == '__main__':\n    app.run(debug=True)<\/code><\/pre>\n<p>Uygulaman\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in Flask&#8217;\u0131 sanal ortam\u0131m\u0131za kurmam\u0131z gerekiyor. Ayr\u0131ca, <code>requirements.txt<\/code> dosyas\u0131 olu\u015fturarak uygulaman\u0131n ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 belirtmek iyi bir pratiktir.<\/p>\n<pre><code class=\"language-bash\">nano requirements.txt<\/code><\/pre>\n<p>\u0130\u00e7ine a\u015fa\u011f\u0131daki sat\u0131r\u0131 ekleyin:<\/p>\n<pre><code class=\"language-\">Flask==0.10.1<\/code><\/pre>\n<p>_Not: CentOS 6.4&#8217;teki Python s\u00fcr\u00fcm\u00fcyle uyumlu bir Flask s\u00fcr\u00fcm\u00fc se\u00e7mek \u00f6nemlidir. Flask&#8217;\u0131n en yeni s\u00fcr\u00fcmleri Python 3.x gerektirebilir. Flask 0.10.1, Python 2.6\/2.7 ile uyumludur._<\/p>\n<p>\u015eimdi ba\u011f\u0131ml\u0131l\u0131klar\u0131 kural\u0131m:<\/p>\n<pre><code class=\"language-bash\">pip install -r requirements.txt<\/code><\/pre>\n<p>Flask uygulaman\u0131z\u0131 test etmek i\u00e7in do\u011frudan \u00e7al\u0131\u015ft\u0131rabilirsiniz (sadece geli\u015ftirme ama\u00e7l\u0131d\u0131r):<\/p>\n<pre><code class=\"language-bash\">python app.py<\/code><\/pre>\n<p>\u00c7\u0131kt\u0131da <code>Running on http:\/\/127.0.0.1:5000\/<\/code> gibi bir mesaj g\u00f6rmelisiniz. Taray\u0131c\u0131n\u0131zdan bu adrese eri\u015fmeye \u00e7al\u0131\u015f\u0131rsan\u0131z, &#8220;Merhaba, uWSGI ve Nginx ile Flask Uygulamas\u0131 \u00c7al\u0131\u015f\u0131yor!&#8221; mesaj\u0131n\u0131 g\u00f6rmeniz gerekir. Testi bitirdikten sonra <code>Ctrl+C<\/code> ile uygulamay\u0131 durdurun.<\/p>\n<p>Sanal ortamdan \u00e7\u0131kmak i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">deactivate<\/code><\/pre>\n<p>Ancak uWSGI ve Nginx kurulumu i\u00e7in sanal ortamda kalman\u0131zda fayda var.<\/p>\n<h2>uWSGI Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h2>\n<p>uWSGI, Flask uygulaman\u0131z ile Nginx aras\u0131nda bir k\u00f6pr\u00fc g\u00f6revi g\u00f6recektir.<\/p>\n<h3>uWSGI&#8217;nin Kurulumu<\/h3>\n<p>Sanal ortam\u0131n\u0131z etkin durumdayken (e\u011fer \u00e7\u0131k\u0131\u015f yapt\u0131ysan\u0131z <code>source venv\/bin\/activate<\/code> ile tekrar etkinle\u015ftirin), uWSGI&#8217;yi kurun:<\/p>\n<pre><code class=\"language-bash\">pip install uwsgi<\/code><\/pre>\n<h3>uWSGI&#8217;nin Test Edilmesi<\/h3>\n<p>uWSGI&#8217;nin Flask uygulaman\u0131zla d\u00fczg\u00fcn \u00e7al\u0131\u015f\u0131p \u00e7al\u0131\u015fmad\u0131\u011f\u0131n\u0131 test edelim. Proje dizininizdeyken (sanal ortam etkin), a\u015fa\u011f\u0131daki komutu \u00e7al\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">uwsgi --socket 127.0.0.1:8000 --protocol=http -w app:app<\/code><\/pre>\n<p>Burada:<br \/>\n*   <code>--socket 127.0.0.1:8000<\/code>: uWSGI&#8217;nin dinleyece\u011fi adres ve port.<br \/>\n*   <code>--protocol=http<\/code>: uWSGI&#8217;nin HTTP protokol\u00fcn\u00fc kullanarak do\u011frudan istekleri kabul etmesini sa\u011flar (test ama\u00e7l\u0131). Normalde Nginx ile konu\u015furken uWSGI protokol\u00fc kullan\u0131l\u0131r.<br \/>\n*   <code>-w app:app<\/code>: <code>app.py<\/code> dosyas\u0131ndaki <code>app<\/code> adl\u0131 Flask uygulamas\u0131n\u0131 belirtir. (\u0130lk <code>app<\/code> dosya ad\u0131, ikinci <code>app<\/code> Flask uygulamas\u0131n\u0131n ad\u0131).<\/p>\n<p>\u015eimdi taray\u0131c\u0131n\u0131zdan <code>http:\/\/<sunucu_ip_adresi>:8000<\/code> adresine giderek uygulaman\u0131z\u0131n \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulay\u0131n. E\u011fer her \u015fey yolundaysa, &#8220;Merhaba, uWSGI ve Nginx ile Flask Uygulamas\u0131 \u00c7al\u0131\u015f\u0131yor!&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz. Testi bitirdikten sonra <code>Ctrl+C<\/code> ile uWSGI&#8217;yi durdurun.<\/p>\n<h3>uWSGI Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma<\/h3>\n<p>\u00dcretim ortam\u0131 i\u00e7in uWSGI&#8217;yi bir yap\u0131land\u0131rma dosyas\u0131 kullanarak \u00e7al\u0131\u015ft\u0131rmak daha iyidir. Proje dizininizde <code>uwsgi.ini<\/code> ad\u0131nda bir dosya olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">nano uwsgi.ini<\/code><\/pre>\n<p>\u0130\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-ini\">[uwsgi]\n<h2>uWSGI'nin Flask uygulaman\u0131z\u0131 nerede bulaca\u011f\u0131n\u0131 belirtir.<\/h2>\n<h2>chdir: Flask uygulaman\u0131z\u0131n bulundu\u011fu dizin.<\/h2>\nchdir = \/var\/www\/myflaskapp\n<h2>module: app.py dosyas\u0131ndaki Flask uygulamas\u0131n\u0131n ad\u0131 (app:app).<\/h2>\nmodule = app:app\n\n<h2>Flask uygulaman\u0131z\u0131n sanal ortam\u0131n\u0131 etkinle\u015ftirin.<\/h2>\nhome = \/var\/www\/myflaskapp\/venv\n\n<h2>uWSGI'nin dinleyece\u011fi socket adresi.<\/h2>\n<h2>Nginx bu socket \u00fczerinden uWSGI ile ileti\u015fim kuracak.<\/h2>\n<h2>Bir unix socket kullanmak daha performansl\u0131d\u0131r.<\/h2>\nsocket = \/tmp\/myflaskapp.sock\n<h2>Socket izinlerini ayarla (Nginx'in eri\u015febilmesi i\u00e7in).<\/h2>\nchmod-socket = 666\n\n<h2>Uygulaman\u0131n master process'ini \u00e7al\u0131\u015ft\u0131r\u0131n.<\/h2>\nmaster = true\n<h2>Uygulama i\u00e7in ka\u00e7 worker process olu\u015fturulaca\u011f\u0131n\u0131 belirtir.<\/h2>\n<h2>Genellikle CPU \u00e7ekirde\u011fi say\u0131s\u0131 * 2 + 1 olarak ayarlan\u0131r.<\/h2>\nprocesses = 5\n<h2>Her worker process i\u00e7inde ka\u00e7 thread olu\u015fturulaca\u011f\u0131n\u0131 belirtir.<\/h2>\nthreads = 2\n\n<h2>uWSGI'nin log dosyas\u0131.<\/h2>\nlogto = \/var\/log\/uwsgi\/myflaskapp.log\n\n<h2>uWSGI'nin process id (PID) dosyas\u0131n\u0131 kaydetme yeri.<\/h2>\npidfile = \/tmp\/myflaskapp.pid\n\n<h2>Ba\u011flant\u0131lar\u0131n belirli bir s\u00fcre i\u00e7inde yan\u0131t vermemesi durumunda worker'lar\u0131 \u00f6ld\u00fcr.<\/h2>\nharakiri = 20\n\n<h2>uWSGI'nin ba\u015flang\u0131\u00e7ta t\u00fcm socket'leri temizlemesini sa\u011flar.<\/h2>\nvacuum = true\n\n<h2>Master process \u00f6ld\u00fc\u011f\u00fcnde worker'lar\u0131 da \u00f6ld\u00fcr.<\/h2>\ndie-on-term = true\n\n<h2>Otomatik olarak yeniden ba\u015flatma (geli\u015ftirme i\u00e7in faydal\u0131 olabilir).<\/h2>\n<h2>Bu genellikle Nginx ile birlikte kullan\u0131lmaz, Nginx yeniden ba\u015flatmay\u0131 \u00fcstlenir.<\/h2>\n<h2>lazy-apps = true<\/h2>\n<h2>max-requests = 5000<\/code><\/pre>\n<\/h2>\n<p><code>logto<\/code> ve <code>pidfile<\/code> i\u00e7in belirtti\u011fimiz dizinlerin var oldu\u011fundan ve uWSGI&#8217;nin yazma iznine sahip oldu\u011fundan emin olmal\u0131y\u0131z.<\/p>\n<pre><code class=\"language-bash\">sudo mkdir -p \/var\/log\/uwsgi\nsudo chown -R <code>whoami<\/code>:<code>whoami<\/code> \/var\/log\/uwsgi # Log dizini sahibini mevcut kullan\u0131c\u0131ya de\u011fi\u015ftirin<\/code><\/pre>\n<p>\u015eimdi uWSGI&#8217;yi bu yap\u0131land\u0131rma dosyas\u0131 ile \u00e7al\u0131\u015ft\u0131rmay\u0131 deneyin:<\/p>\n<pre><code class=\"language-bash\">uwsgi --ini uwsgi.ini<\/code><\/pre>\n<p>Herhangi bir hata g\u00f6rmemelisiniz. uWSGI arka planda \u00e7al\u0131\u015f\u0131yor olmal\u0131. <code>ps aux | grep uwsgi<\/code> komutu ile kontrol edebilirsiniz.<\/p>\n<h2>Nginx Kurulumu ve Yap\u0131land\u0131rmas\u0131<\/h2>\n<p>Nginx, gelen HTTP isteklerini alacak ve bunlar\u0131 uWSGI&#8217;ye y\u00f6nlendirecektir. Ayr\u0131ca statik dosyalar\u0131 do\u011frudan Nginx \u00fczerinden sunmak, performans\u0131 art\u0131r\u0131r.<\/p>\n<h3>Nginx&#8217;in Kurulumu<\/h3>\n<p>EPEL deposunu daha \u00f6nce ekledi\u011fimiz i\u00e7in Nginx&#8217;i kolayca kurabiliriz:<\/p>\n<pre><code class=\"language-bash\">sudo yum install -y nginx<\/code><\/pre>\n<h3>Nginx&#8217;in Ba\u015flat\u0131lmas\u0131 ve Otomatik Ba\u015flatma<\/h3>\n<p>Nginx servisini ba\u015flatal\u0131m ve sistem ba\u015flang\u0131c\u0131nda otomatik olarak ba\u015flamas\u0131 i\u00e7in yap\u0131land\u0131ral\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo service nginx start\nsudo chkconfig nginx on<\/code><\/pre>\n<p>Taray\u0131c\u0131n\u0131zdan sunucunuzun IP adresine giderek Nginx&#8217;in varsay\u0131lan &#8220;Welcome to Nginx!&#8221; sayfas\u0131n\u0131 g\u00f6rmeniz gerekir.<\/p>\n<h3>Nginx Yap\u0131land\u0131rma Dosyas\u0131 Olu\u015fturma<\/h3>\n<p>Varsay\u0131lan Nginx yap\u0131land\u0131rma dosyas\u0131n\u0131 de\u011fi\u015ftirmek yerine, kendi uygulamam\u0131z i\u00e7in ayr\u0131 bir yap\u0131land\u0131rma dosyas\u0131 olu\u015fturmak daha iyi bir yakla\u015f\u0131md\u0131r.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/nginx\/conf.d\/myflaskapp.conf<\/code><\/pre>\n<p>\u0130\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-nginx\">server {\n    listen 80;\n    server_name your_domain.com www.your_domain.com your_server_ip; # Kendi alan ad\u0131n\u0131z\u0131 veya IP adresinizi buraya yaz\u0131n\n\n    # Flask uygulamas\u0131n\u0131n statik dosyalar\u0131 (CSS, JS, resimler vb.)\n    # Genellikle Flask uygulamalar\u0131 statik dosyalar\u0131 kendi b\u00fcnyesinde bar\u0131nd\u0131r\u0131r,\n    # ancak Nginx \u00fczerinden sunmak performans\u0131 art\u0131r\u0131r.\n    # E\u011fer uygulaman\u0131z\u0131n static klas\u00f6r\u00fc yoksa veya kullanm\u0131yorsan\u0131z bu blo\u011fu kald\u0131rabilirsiniz.\n    location \/static {\n        alias \/var\/www\/myflaskapp\/static; # Flask uygulaman\u0131z\u0131n static klas\u00f6r\u00fcn\u00fcn yolu\n    }\n\n    location \/ {\n        include uwsgi_params; # uWSGI ile ileti\u015fim i\u00e7in gerekli parametreleri i\u00e7erir\n        uwsgi_pass unix:\/tmp\/myflaskapp.sock; # uWSGI'nin dinledi\u011fi Unix socket yolu\n    }\n\n    # Hata sayfalar\u0131n\u0131 yap\u0131land\u0131rabilirsiniz\n    error_page 500 502 503 504 \/50x.html;\n    location = \/50x.html {\n        root \/usr\/share\/nginx\/html;\n    }\n}<\/code><\/pre>\n<p><code>your_domain.com<\/code>, <code>www.your_domain.com<\/code> ve <code>your_server_ip<\/code> k\u0131s\u0131mlar\u0131n\u0131 kendi sunucunuzun IP adresi veya alan adlar\u0131yla de\u011fi\u015ftirmeyi unutmay\u0131n.<\/p>\n<p>_Not: E\u011fer Flask uygulaman\u0131zda statik dosyalar\u0131n\u0131z varsa (<code>\/var\/www\/myflaskapp\/static<\/code> gibi bir dizinde), yukar\u0131daki <code>\/static<\/code> blo\u011funu kullanabilirsiniz. E\u011fer yoksa veya Nginx \u00fczerinden sunmayacaksan\u0131z bu blo\u011fu silebilirsiniz._<\/p>\n<h3>Nginx Yap\u0131land\u0131rmas\u0131n\u0131 Test Etme ve Yeniden Y\u00fckleme<\/h3>\n<p>Yap\u0131land\u0131rma dosyas\u0131n\u0131 kaydettikten sonra, Nginx yap\u0131land\u0131rmas\u0131n\u0131n s\u00f6zdizimsel olarak do\u011fru olup olmad\u0131\u011f\u0131n\u0131 kontrol etmek \u00f6nemlidir:<\/p>\n<pre><code class=\"language-bash\">sudo nginx -t<\/code><\/pre>\n<p>E\u011fer <code>syntax is ok<\/code> ve <code>test is successful<\/code> mesajlar\u0131n\u0131 g\u00f6r\u00fcrseniz, yap\u0131land\u0131rma do\u011frudur. \u015eimdi Nginx&#8217;i yeniden y\u00fckleyerek yeni yap\u0131land\u0131rmay\u0131 etkinle\u015ftirelim:<\/p>\n<pre><code class=\"language-bash\">sudo service nginx reload<\/code><\/pre>\n<p>\u015eimdi taray\u0131c\u0131n\u0131zdan <code>http:\/\/<sunucu_ip_adresi><\/code> veya alan ad\u0131n\u0131za giderek Flask uygulaman\u0131z\u0131n Nginx \u00fczerinden \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 do\u011frulay\u0131n. &#8220;Merhaba, uWSGI ve Nginx ile Flask Uygulamas\u0131 \u00c7al\u0131\u015f\u0131yor!&#8221; mesaj\u0131n\u0131 g\u00f6rmelisiniz.<\/p>\n<h2>Sistem Servisleri ve Otomatik Ba\u015flatma<\/h2>\n<p>uWSGI&#8217;nin sunucu yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak ba\u015flamas\u0131n\u0131 sa\u011flamak i\u00e7in bir <code>init.d<\/code> script&#8217;i olu\u015fturmam\u0131z gerekiyor. CentOS 6.4, <code>systemd<\/code> yerine SysV <code>init<\/code> sistemini kullan\u0131r.<\/p>\n<h3>uWSGI i\u00e7in Init Script Olu\u015fturma<\/h3>\n<p><code>myflaskapp<\/code> i\u00e7in <code>\/etc\/init.d\/uwsgi<\/code> ad\u0131nda bir init script dosyas\u0131 olu\u015ftural\u0131m:<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/init.d\/uwsgi<\/code><\/pre>\n<p>\u0130\u00e7ine a\u015fa\u011f\u0131daki i\u00e7eri\u011fi yap\u0131\u015ft\u0131r\u0131n:<\/p>\n<pre><code class=\"language-bash\">#!\/bin\/bash\n<h2># uwsgi       This starts and stops the uwsgi daemon<\/h2>\n<h2># chkconfig: - 85 15<\/h2>\n<h2>description: uWSGI is a fast, self-healing and developer-friendly application server.<\/h2>\n<h2>processname: uwsgi<\/h2>\n<h2>config: \/var\/www\/myflaskapp\/uwsgi.ini<\/h2>\n<h2>pidfile: \/tmp\/myflaskapp.pid<\/h2>\n\n### BEGIN INIT INFO\n<h2>Provides: uwsgi<\/h2>\n<h2>Required-Start: $local_fs $network<\/h2>\n<h2>Required-Stop: $local_fs $network<\/h2>\n<h2>Default-Start:<\/h2>\n<h2>Default-Stop:<\/h2>\n<h2>Short-Description: Start and stop the uWSGI server<\/h2>\n<h2>Description: uWSGI is a fast, self-healing and developer-friendly application server.<\/h2>\n### END INIT INFO\n\n<h2>Source function library.<\/h2>\n. \/etc\/rc.d\/init.d\/functions\n\n<h2>Configuration<\/h2>\nUWSGI_INI=\"\/var\/www\/myflaskapp\/uwsgi.ini\"\nUWSGI_PIDFILE=\"\/tmp\/myflaskapp.pid\"\nUWSGI_LOGFILE=\"\/var\/log\/uwsgi\/myflaskapp.log\"\nUWSGI_BINARY=\"\/var\/www\/myflaskapp\/venv\/bin\/uwsgi\" # Sanal ortamdaki uwsgi binary yolu\n\n<h2>Check if uWSGI binary exists<\/h2>\n[ -x \"$UWSGI_BINARY\" ] || exit 5\n\n<h2>Check if uWSGI config exists<\/h2>\n[ -f \"$UWSGI_INI\" ] || exit 6\n\nstart() {\n    echo -n $\"Starting uWSGI: \"\n    daemon --pidfile=$UWSGI_PIDFILE \"$UWSGI_BINARY --ini $UWSGI_INI --daemonize $UWSGI_LOGFILE\"\n    RETVAL=$?\n    echo\n    [ $RETVAL -eq 0 ] && touch \/var\/lock\/subsys\/uwsgi\n    return $RETVAL\n}\n\nstop() {\n    echo -n $\"Stopping uWSGI: \"\n    killproc -p $UWSGI_PIDFILE uwsgi\n    RETVAL=$?\n    echo\n    [ $RETVAL -eq 0 ] && rm -f \/var\/lock\/subsys\/uwsgi\n    return $RETVAL\n}\n\nrestart() {\n    stop\n    start\n}\n\nreload() {\n    echo -n $\"Reloading uWSGI: \"\n    killproc -p $UWSGI_PIDFILE uwsgi -HUP\n    RETVAL=$?\n    echo\n    return $RETVAL\n}\n\ncase \"$1\" in\n    start)\n        start\n        ;;\n    stop)\n        stop\n        ;;\n    status)\n        status -p $UWSGI_PIDFILE uwsgi\n        RETVAL=$?\n        ;;\n    restart)\n        restart\n        ;;\n    condrestart|try-restart)\n        [ -f \/var\/lock\/subsys\/uwsgi ] && restart || :\n        ;;\n    reload)\n        reload\n        ;;\n    force-reload)\n        reload\n        ;;\n    *)\n        echo $\"Usage: $0 {start|stop|status|restart|condrestart|reload}\"\n        RETVAL=2\nesac\n\nexit $RETVAL<\/code><\/pre>\n<p>Script&#8217;i kaydettikten sonra, \u00e7al\u0131\u015ft\u0131r\u0131labilir hale getirelim ve <code>chkconfig<\/code> ile sisteme ekleyelim:<\/p>\n<pre><code class=\"language-bash\">sudo chmod +x \/etc\/init.d\/uwsgi\nsudo chkconfig --add uwsgi\nsudo chkconfig uwsgi on<\/code><\/pre>\n<p>\u015eimdi uWSGI servisini manuel olarak ba\u015flatabilir, durdurabilir veya yeniden ba\u015flatabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo service uwsgi start\nsudo service uwsgi stop\nsudo service uwsgi restart\nsudo service uwsgi status<\/code><\/pre>\n<p>Bu ad\u0131mlarla, hem uWSGI hem de Nginx sunucular\u0131, sistem yeniden ba\u015flat\u0131ld\u0131\u011f\u0131nda otomatik olarak ba\u015flayacakt\u0131r.<\/p>\n<h2>G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h2>\n<p>\u00dcretim ortam\u0131nda bir web uygulamas\u0131 da\u011f\u0131t\u0131rken g\u00fcvenlik her zaman \u00f6ncelikli olmal\u0131d\u0131r.<\/p>\n<h3>Firewall (iptables) Yap\u0131land\u0131rmas\u0131<\/h3>\n<p>CentOS 6.4&#8217;te varsay\u0131lan g\u00fcvenlik duvar\u0131 <code>iptables<\/code>&#8216;t\u0131r. Sadece gerekli portlar\u0131 (80 HTTP, 443 HTTPS, 22 SSH) a\u00e7mal\u0131s\u0131n\u0131z.<\/p>\n<pre><code class=\"language-bash\">sudo nano \/etc\/sysconfig\/iptables<\/code><\/pre>\n<p>A\u015fa\u011f\u0131daki kurallar\u0131n var oldu\u011fundan veya ekledi\u011finizden emin olun (genellikle <code>REJECT<\/code> kural\u0131ndan \u00f6nce eklenir):<\/p>\n<pre><code class=\"language-\">-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT\n-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT\n<h2>E\u011fer HTTPS kullanacaksan\u0131z:<\/h2>\n#-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT<\/code><\/pre>\n<p>De\u011fi\u015fiklikleri kaydettikten sonra <code>iptables<\/code> servisini yeniden ba\u015flat\u0131n:<\/p>\n<pre><code class=\"language-bash\">sudo service iptables restart<\/code><\/pre>\n<h3>SELinux<\/h3>\n<p>SELinux (Security-Enhanced Linux), CentOS&#8217;ta ek bir g\u00fcvenlik katman\u0131 sa\u011flar. Ancak bazen uygulaman\u0131n veya servislerin \u00e7al\u0131\u015fmas\u0131n\u0131 engelleyebilir. \u00dcretim ortam\u0131nda SELinux&#8217;u do\u011fru yap\u0131land\u0131rmak karma\u015f\u0131k olabilir. E\u011fer SELinux sorunlara neden oluyorsa, ge\u00e7ici olarak veya kal\u0131c\u0131 olarak devre d\u0131\u015f\u0131 b\u0131rakmay\u0131 d\u00fc\u015f\u00fcnebilirsiniz (ancak bu bir g\u00fcvenlik riski olu\u015fturur).<\/p>\n<p>SELinux durumunu kontrol etmek i\u00e7in:<\/p>\n<pre><code class=\"language-bash\">sestatus<\/code><\/pre>\n<p>E\u011fer <code>Enforcing<\/code> durumundaysa ve sorun ya\u015f\u0131yorsan\u0131z, ge\u00e7ici olarak <code>Permissive<\/code> moda alabilirsiniz:<\/p>\n<pre><code class=\"language-bash\">sudo setenforce 0<\/code><\/pre>\n<p>Kal\u0131c\u0131 olarak devre d\u0131\u015f\u0131 b\u0131rakmak i\u00e7in <code>\/etc\/selinux\/config<\/code> dosyas\u0131n\u0131 d\u00fczenleyin ve <code>SELINUX=enforcing<\/code> sat\u0131r\u0131n\u0131 <code>SELINUX=disabled<\/code> olarak de\u011fi\u015ftirin, ard\u0131ndan sunucuyu yeniden ba\u015flat\u0131n. Bu \u00f6nerilen bir y\u00f6ntem de\u011fildir, ancak h\u0131zl\u0131 sorun giderme i\u00e7in kullan\u0131labilir. G\u00fcvenlik i\u00e7in SELinux&#8217;u etkin tutmak ve gerekli politikalar\u0131 olu\u015fturmak en iyisidir.<\/p>\n<h3>Uygulama ve Sunucu G\u00fcncellemeleri<\/h3>\n<p>Sistemdeki t\u00fcm paketleri ve uygulaman\u0131z\u0131n ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131 d\u00fczenli olarak g\u00fcncelleyin. Bu, bilinen g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131n kapat\u0131lmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<pre><code class=\"language-bash\">sudo yum update -y\ncd \/var\/www\/myflaskapp\nsource venv\/bin\/activate\npip install -r requirements.txt # Ba\u011f\u0131ml\u0131l\u0131klar\u0131 g\u00fcncelleyin (e\u011fer requirements.txt'de yeni versiyonlar varsa)\ndeactivate<\/code><\/pre>\n<h3>SSH G\u00fcvenli\u011fi<\/h3>\n<p>SSH eri\u015fiminizi g\u00fcvenli hale getirin:<br \/>\n*   Varsay\u0131lan SSH portunu (22) de\u011fi\u015ftirin.<br \/>\n*   Parola yerine SSH anahtar \u00e7iftleri kullan\u0131n.<br \/>\n*   Root kullan\u0131c\u0131s\u0131n\u0131n do\u011frudan SSH eri\u015fimini devre d\u0131\u015f\u0131 b\u0131rak\u0131n.<br \/>\n*   <code>fail2ban<\/code> gibi ara\u00e7larla kaba kuvvet sald\u0131r\u0131lar\u0131na kar\u015f\u0131 koruma sa\u011flay\u0131n.<\/p>\n<h2>Sorun Giderme (Troubleshooting)<\/h2>\n<p>Kurulum veya yap\u0131land\u0131rma s\u0131ras\u0131nda sorunlarla kar\u015f\u0131la\u015fmak olas\u0131d\u0131r. \u0130\u015fte yayg\u0131n sorunlar ve \u00e7\u00f6z\u00fcmleri:<\/p>\n<h3>Log Dosyalar\u0131<\/h3>\n<p>Sorun gidermenin ilk ad\u0131m\u0131 log dosyalar\u0131n\u0131 kontrol etmektir.<br \/>\n*   <strong>uWSGI Loglar\u0131:<\/strong> <code>\/var\/log\/uwsgi\/myflaskapp.log<\/code><br \/>\n*   <strong>Nginx Hata Loglar\u0131:<\/strong> <code>\/var\/log\/nginx\/error.log<\/code><br \/>\n*   <strong>Nginx Eri\u015fim Loglar\u0131:<\/strong> <code>\/var\/log\/nginx\/access.log<\/code><br \/>\n*   <strong>Sistem Loglar\u0131:<\/strong> <code>\/var\/log\/messages<\/code>, <code>\/var\/log\/audit\/audit.log<\/code> (SELinux ile ilgili sorunlar i\u00e7in)<\/p>\n<p>Log dosyalar\u0131n\u0131 <code>tail -f<\/code> komutuyla canl\u0131 olarak izleyebilirsiniz:<\/p>\n<pre><code class=\"language-bash\">tail -f \/var\/log\/uwsgi\/myflaskapp.log\ntail -f \/var\/log\/nginx\/error.log<\/code><\/pre>\n<h3>Socket \u0130zinleri<\/h3>\n<p>Nginx&#8217;in uWSGI socket&#8217;ine eri\u015fim izni yoksa hata al\u0131rs\u0131n\u0131z.<br \/>\n*   <code>uwsgi.ini<\/code> dosyas\u0131ndaki <code>chmod-socket = 666<\/code> ayar\u0131n\u0131n do\u011fru oldu\u011fundan emin olun.<br \/>\n*   Socket dosyas\u0131n\u0131n bulundu\u011fu dizin (<code>\/tmp\/<\/code> gibi) i\u00e7in Nginx kullan\u0131c\u0131s\u0131n\u0131n (genellikle <code>nginx<\/code>) yazma\/okuma iznine sahip oldu\u011fundan emin olun.<\/p>\n<pre><code class=\"language-bash\">ls -l \/tmp\/myflaskapp.sock<\/code><\/pre>\n<p>E\u011fer izinler yanl\u0131\u015fsa, uWSGI servisini yeniden ba\u015flatmak genellikle socket dosyas\u0131n\u0131 do\u011fru izinlerle yeniden olu\u015fturur.<\/p>\n<h3>Python Ba\u011f\u0131ml\u0131l\u0131klar\u0131<\/h3>\n<p>Flask uygulaman\u0131z\u0131n t\u00fcm ba\u011f\u0131ml\u0131l\u0131klar\u0131n\u0131n sanal ortamda y\u00fckl\u00fc oldu\u011fundan emin olun.<br \/>\n*   Sanal ortam\u0131 etkinle\u015ftirin (<code>source venv\/bin\/activate<\/code>).<br \/>\n*   <code>pip list<\/code> komutuyla y\u00fckl\u00fc paketleri kontrol edin.<br \/>\n*   <code>requirements.txt<\/code> dosyan\u0131zdaki t\u00fcm paketlerin y\u00fckl\u00fc oldu\u011fundan emin olun (<code>pip install -r requirements.txt<\/code>).<\/p>\n<h3>Nginx Yap\u0131land\u0131rma Hatalar\u0131<\/h3>\n<p>Nginx yap\u0131land\u0131rman\u0131zda bir hata varsa, <code>sudo nginx -t<\/code> komutu size hatay\u0131 g\u00f6sterecektir.<br \/>\n*   <code>server_name<\/code> veya <code>listen<\/code> direktiflerini kontrol edin.<br \/>\n*   <code>uwsgi_pass<\/code> yolunun <code>uwsgi.ini<\/code> dosyas\u0131ndaki <code>socket<\/code> yoluyla e\u015fle\u015fti\u011finden emin olun.<br \/>\n*   <code>include uwsgi_params;<\/code> sat\u0131r\u0131n\u0131n do\u011fru yerde oldu\u011fundan emin olun.<\/p>\n<h3>uWSGI Yap\u0131land\u0131rma Hatalar\u0131<\/h3>\n<p>uWSGI yap\u0131land\u0131rman\u0131zda bir hata varsa, <code>uwsgi --ini uwsgi.ini<\/code> komutunu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda konsolda hata mesajlar\u0131 g\u00f6receksiniz.<br \/>\n*   <code>chdir<\/code>, <code>module<\/code>, <code>home<\/code> yollar\u0131n\u0131n do\u011fru oldu\u011fundan emin olun.<br \/>\n*   <code>socket<\/code> yolunun Nginx yap\u0131land\u0131rmas\u0131yla e\u015fle\u015fti\u011finden emin olun.<br \/>\n*   <code>pidfile<\/code> ve <code>logto<\/code> dizinlerinin var oldu\u011fundan ve uWSGI&#8217;nin yazma iznine sahip oldu\u011fundan emin olun.<\/p>\n<h3>Port \u00c7ak\u0131\u015fmalar\u0131<\/h3>\n<p>Ba\u015fka bir servis ayn\u0131 portu (\u00f6rn. 80) kullan\u0131yorsa Nginx ba\u015flat\u0131lamaz.<br \/>\n*   <code>sudo netstat -tulpn | grep :80<\/code> komutuyla 80 numaral\u0131 portu hangi servisin kulland\u0131\u011f\u0131n\u0131 kontrol edin. Apache gibi ba\u015fka bir web sunucusu \u00e7al\u0131\u015f\u0131yorsa durdurman\u0131z gerekebilir (<code>sudo service httpd stop<\/code>).<\/p>\n<h2>Sonu\u00e7<\/h2>\n<p>Bu kapsaml\u0131 rehberde, Flask tabanl\u0131 bir web uygulamas\u0131n\u0131 CentOS 6.4 i\u015fletim sistemi \u00fczerinde uWSGI uygulama sunucusu ve Nginx ters proxy sunucusu kullanarak nas\u0131l da\u011f\u0131t\u0131laca\u011f\u0131n\u0131 ad\u0131m ad\u0131m inceledik. Sanal ortam olu\u015fturmaktan, Flask uygulamas\u0131n\u0131 yap\u0131land\u0131rmaya, uWSGI&#8217;yi kurup yap\u0131land\u0131rmaya, Nginx&#8217;i kurup uWSGI ile entegre etmeye ve son olarak servisleri otomatik ba\u015flatmaya kadar t\u00fcm s\u00fcre\u00e7leri ele ald\u0131k. Ayr\u0131ca, g\u00fcvenlik ipu\u00e7lar\u0131 ve yayg\u0131n sorun giderme y\u00f6ntemleri hakk\u0131nda da bilgi verdik.<\/p>\n<p>Bu yap\u0131land\u0131rma, Flask uygulamalar\u0131n\u0131z i\u00e7in \u00fcretim ortam\u0131nda y\u00fcksek performans, g\u00fcvenlik ve \u00f6l\u00e7eklenebilirlik sunan sa\u011flam bir temel sa\u011flar. CentOS 6.4 gibi eski sistemlerde bile bu ad\u0131mlar\u0131 takip ederek uygulamalar\u0131n\u0131z\u0131 ba\u015far\u0131l\u0131 bir \u015fekilde da\u011f\u0131tabilirsiniz. Unutmay\u0131n ki, modern da\u011f\u0131t\u0131mlarda (CentOS 7+, Ubuntu 16.04+) <code>systemd<\/code> servis y\u00f6neticisi kullan\u0131ld\u0131\u011f\u0131 i\u00e7in uWSGI servis kurulumu farkl\u0131l\u0131k g\u00f6sterecektir. Ancak temel mant\u0131k (Flask, uWSGI, Nginx entegrasyonu) benzer kalacakt\u0131r. Bu rehber, eski nesil sistemlerdeki ihtiya\u00e7lar\u0131 kar\u015f\u0131lamak \u00fczere \u00f6zel olarak haz\u0131rlanm\u0131\u015ft\u0131r. Uygulaman\u0131z\u0131n ve sunucunuzun g\u00fcvenli\u011fini ve performans\u0131n\u0131 sa\u011flamak i\u00e7in d\u00fczenli g\u00fcncellemeleri ve bak\u0131m i\u015flemlerini ihmal etmeyin.<\/p>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.","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":[241],"tags":[],"class_list":{"0":"post-41684","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-linux","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 Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.4 \u00dczerine 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-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.4 \u00dczerine Da\u011f\u0131tma Rehberi\" \/>\n<meta property=\"og:description\" content=\"Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-10T05:00:48+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=\"18 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.4 \u00dczerine Da\u011f\u0131tma Rehberi\",\"datePublished\":\"2026-05-10T05:00:48+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/\"},\"wordCount\":2535,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"Linux\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/#respond\"]}],\"copyrightYear\":\"2026\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/\",\"name\":\"Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.4 \u00dczerine Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2026-05-10T05:00:48+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.4 \u00dczerine 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 Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.4 \u00dczerine 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-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.4 \u00dczerine Da\u011f\u0131tma Rehberi","og_description":"Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.","og_url":"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2026-05-10T05:00:48+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"18 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.4 \u00dczerine Da\u011f\u0131tma Rehberi","datePublished":"2026-05-10T05:00:48+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/"},"wordCount":2535,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["Linux"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/#respond"]}],"copyrightYear":"2026","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/","name":"Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.4 \u00dczerine Da\u011f\u0131tma Rehberi - Kodlar\u0131n Gizemli D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2026-05-10T05:00:48+00:00","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/flask-web-uygulamalarini-uwsgi-ve-nginx-ile-centos-6-4-uzerine-dagitma-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Flask Web Uygulamalar\u0131n\u0131 uWSGI ve Nginx ile CentOS 6.4 \u00dczerine 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\/41684","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=41684"}],"version-history":[{"count":1,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41684\/revisions"}],"predecessor-version":[{"id":41685,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/41684\/revisions\/41685"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=41684"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=41684"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=41684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}