Flask Web Uygulamalarını uWSGI ve Nginx ile CentOS 6.4 Üzerine Dağıtma Rehberi
Giriş
Modern web uygulamaları geliştirilirken, genellikle bir uygulama sunucusu (application server) ile bir ters proxy (reverse proxy) sunucusunun birlikte kullanıldığı katmanlı mimariler tercih edilir. Bu yaklaşım, performans, güvenlik, ölçeklenebilirlik ve bakım kolaylığı açısından önemli avantajlar sunar. Bu makalede, Python tabanlı hafif ve güçlü bir web çatısı olan Flask ile geliştirilmiş bir web uygulamasını, uWSGI uygulama sunucusu ve Nginx ters proxy sunucusu kullanarak CentOS 6.4 işletim sistemi üzerinde nasıl dağıtacağımızı detaylı bir şekilde inceleyeceğiz.
Flask, küçük ve orta ölçekli projeler için ideal olan, “mikro çerçeve” olarak bilinen bir yapıdır. Geliştiricilere esneklik sunar ve hızlı prototipleme imkanı sağlar. Ancak Flask’ın kendisi doğrudan internete açık bir sunucu olarak tasarlanmamıştır; üretim ortamında kullanıldığında bir WSGI (Web Server Gateway Interface) sunucusu ile çalışması gerekir. İşte bu noktada uWSGI devreye girer. uWSGI, Python uygulamaları için tasarlanmış, yüksek performanslı, C dilinde yazılmış bir WSGI uygulama sunucusudur. Flask uygulamanız ile web sunucusu (Nginx) arasındaki iletişimi yönetir.
Nginx ise, yüksek performanslı, açık kaynaklı bir web sunucusu ve ters proxy sunucusudur. Statik dosyaları sunma, yük dengeleme, SSL sonlandırma ve önbellekleme gibi görevlerde üstün bir performans sergiler. Bir ters proxy olarak Nginx, gelen HTTP isteklerini alır ve bunları uWSGI gibi arka uç uygulama sunucularına yönlendirir. Bu yapılandırma, uygulamanın doğrudan internete maruz kalmasını engeller, güvenlik katmanı sağlar ve aynı zamanda Nginx’in statik dosya sunma yeteneği sayesinde uygulamanızın performansını artırır.
CentOS 6.4, bu makalenin yazıldığı dönemde yaygın olarak kullanılan, kurumsal düzeyde stabil bir Linux dağıtımıydı. Her ne kadar güncel sürümler (CentOS 7, 8 Stream veya AlmaLinux/Rocky Linux) mevcut olsa da, mevcut altyapılarda CentOS 6.4 kullanan sistem yöneticileri veya geliştiriciler için bu rehber, eski nesil sistemlerde Flask uygulamalarını dağıtma konusunda değerli bilgiler sunacaktır. Bu rehber, adım adım kurulum ve yapılandırma süreçlerini ele alarak, okuyucuların kendi Flask uygulamalarını güvenli ve verimli bir şekilde dağıtmalarına yardımcı olmayı amaçlamaktadır.
Ön Gereksinimler
Bu rehberi takip edebilmek için aşağıdaki ön gereksinimlere sahip olmanız gerekmektedir:
* CentOS 6.4 Sunucu: Kurulumu yapılmış ve ağ bağlantısı olan bir CentOS 6.4 sanal veya fiziksel sunucu.
* Root veya Sudo Erişimi: Sunucu üzerinde sistem genelinde paket kurma ve yapılandırma değişiklikleri yapabilmek için root kullanıcısı olarak veya sudo yetkisine sahip bir kullanıcı olarak oturum açmış olmanız gerekmektedir.
* İnternet Bağlantısı: Paket indirme ve güncelleme işlemleri için sunucunun internet bağlantısına sahip olması şarttır.
* Temel Linux Bilgisi: Komut satırı kullanımı, dosya sisteminde gezinme ve temel metin düzenleyicileri (vi, nano) hakkında bilgi sahibi olmak faydalı olacaktır.
Sistem Güncellemesi ve Temel Araçların Kurulumu
Kuruluma başlamadan önce, sistemin güncel olduğundan ve gerekli geliştirme araçlarının yüklü olduğundan emin olmalıyız.
Sistem Güncellemesi
Öncelikle, sistemdeki tüm paketleri güncelleyelim. Bu, olası güvenlik açıklarını kapatmaya ve en son kararlı sürümleri kullanmaya yardımcı olacaktır.
sudo yum update -y
EPEL Deposunun Kurulumu
CentOS’un varsayılan depolarında bulunmayan bazı paketler için EPEL (Extra Packages for Enterprise Linux) deposunu eklememiz gerekebilir. Nginx gibi bazı paketler genellikle EPEL üzerinden temin edilir.
sudo rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
_Not: Yukarıdaki URL zamanla değişebilir. Eğer hata alırsanız, EPEL’in resmi web sitesinden CentOS 6 için güncel epel-release paketini bulup indirmelisiniz._
Gerekli Geliştirme Araçlarının Kurulumu
uWSGI gibi bazı Python paketleri, C kodu içerir ve derlenmesi gerekir. Bu nedenle, bir C derleyicisi (GCC) ve Python geliştirme başlık dosyalarına ihtiyacımız olacak. Ayrıca pip (Python paket yöneticisi) için de gerekli olan setuptools ve wheel gibi paketleri kurmak faydalıdır.
sudo yum install -y gcc python-devel python-setuptools python-pip
Bu komut, derleyiciyi, Python’ın geliştirme dosyalarını ve Python paketlerini yönetmek için gerekli olan pip‘i kuracaktır.
Python Ortamının Hazırlanması
Uygulamamızın bağımlılıklarını izole etmek ve sistem genelindeki Python kurulumunu kirletmemek için bir sanal ortam (virtual environment) kullanmak en iyi uygulamadır.
Sanal Ortam (Virtualenv) Kullanımı
virtualenv, Python projeleri için izole edilmiş ortamlar oluşturmaya yarayan bir araçtır. Her proje kendi bağımlılıklarına sahip olabilir ve bu bağımlılıklar diğer projelerle veya sistem Python kurulumuyla çakışmaz.
virtualenv‘i kurmak için pip‘i kullanabiliriz:
sudo pip install virtualenv
Şimdi, Flask uygulamanız için bir proje dizini oluşturalım ve bu dizin içinde bir sanal ortam kuralım. Varsayılan olarak /var/www/ altında bir dizin oluşturmak iyi bir yaklaşımdır.
sudo mkdir -p /var/www/myflaskapp
sudo chown -R whoami:whoami /var/www/myflaskapp # Dizin sahibini mevcut kullanıcıya değiştirin
cd /var/www/myflaskapp
virtualenv venv
Sanal ortamı etkinleştirelim:
source venv/bin/activate
Komut satırınızın başında (venv) gördüğünüzde, sanal ortamın etkinleştirildiği anlamına gelir.
Flask Uygulamasının Oluşturulması
Şimdi basit bir Flask uygulaması oluşturalım. Proje dizinimizde (/var/www/myflaskapp) app.py adında bir dosya oluşturalım:
nano app.py
İçine aşağıdaki kodu yapıştırın:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return "Merhaba, uWSGI ve Nginx ile Flask Uygulaması Çalışıyor!"
@app.route('/test')
def test():
return "Bu bir test sayfasıdır."
if __name__ == '__main__':
app.run(debug=True)
Uygulamanın çalışması için Flask’ı sanal ortamımıza kurmamız gerekiyor. Ayrıca, requirements.txt dosyası oluşturarak uygulamanın bağımlılıklarını belirtmek iyi bir pratiktir.
nano requirements.txt
İçine aşağıdaki satırı ekleyin:
Flask==0.10.1
_Not: CentOS 6.4’teki Python sürümüyle uyumlu bir Flask sürümü seçmek önemlidir. Flask’ın en yeni sürümleri Python 3.x gerektirebilir. Flask 0.10.1, Python 2.6/2.7 ile uyumludur._
Şimdi bağımlılıkları kuralım:
pip install -r requirements.txt
Flask uygulamanızı test etmek için doğrudan çalıştırabilirsiniz (sadece geliştirme amaçlıdır):
python app.py
Çıktıda Running on http://127.0.0.1:5000/ gibi bir mesaj görmelisiniz. Tarayıcınızdan bu adrese erişmeye çalışırsanız, “Merhaba, uWSGI ve Nginx ile Flask Uygulaması Çalışıyor!” mesajını görmeniz gerekir. Testi bitirdikten sonra Ctrl+C ile uygulamayı durdurun.
Sanal ortamdan çıkmak için:
deactivate
Ancak uWSGI ve Nginx kurulumu için sanal ortamda kalmanızda fayda var.
uWSGI Kurulumu ve Yapılandırması
uWSGI, Flask uygulamanız ile Nginx arasında bir köprü görevi görecektir.
uWSGI’nin Kurulumu
Sanal ortamınız etkin durumdayken (eğer çıkış yaptıysanız source venv/bin/activate ile tekrar etkinleştirin), uWSGI’yi kurun:
pip install uwsgi
uWSGI’nin Test Edilmesi
uWSGI’nin Flask uygulamanızla düzgün çalışıp çalışmadığını test edelim. Proje dizininizdeyken (sanal ortam etkin), aşağıdaki komutu çalıştırın:
uwsgi --socket 127.0.0.1:8000 --protocol=http -w app:app
Burada:
* --socket 127.0.0.1:8000: uWSGI’nin dinleyeceği adres ve port.
* --protocol=http: uWSGI’nin HTTP protokolünü kullanarak doğrudan istekleri kabul etmesini sağlar (test amaçlı). Normalde Nginx ile konuşurken uWSGI protokolü kullanılır.
* -w app:app: app.py dosyasındaki app adlı Flask uygulamasını belirtir. (İlk app dosya adı, ikinci app Flask uygulamasının adı).
Şimdi tarayıcınızdan http:// adresine giderek uygulamanızın çalıştığını doğrulayın. Eğer her şey yolundaysa, “Merhaba, uWSGI ve Nginx ile Flask Uygulaması Çalışıyor!” mesajını görmelisiniz. Testi bitirdikten sonra Ctrl+C ile uWSGI’yi durdurun.
uWSGI Yapılandırma Dosyası Oluşturma
Üretim ortamı için uWSGI’yi bir yapılandırma dosyası kullanarak çalıştırmak daha iyidir. Proje dizininizde uwsgi.ini adında bir dosya oluşturalım:
nano uwsgi.ini
İçine aşağıdaki içeriği yapıştırın:
[uwsgi]
uWSGI'nin Flask uygulamanızı nerede bulacağını belirtir.
chdir: Flask uygulamanızın bulunduğu dizin.
chdir = /var/www/myflaskapp
module: app.py dosyasındaki Flask uygulamasının adı (app:app).
module = app:app
Flask uygulamanızın sanal ortamını etkinleştirin.
home = /var/www/myflaskapp/venv
uWSGI'nin dinleyeceği socket adresi.
Nginx bu socket üzerinden uWSGI ile iletişim kuracak.
Bir unix socket kullanmak daha performanslıdır.
socket = /tmp/myflaskapp.sock
Socket izinlerini ayarla (Nginx'in erişebilmesi için).
chmod-socket = 666
Uygulamanın master process'ini çalıştırın.
master = true
Uygulama için kaç worker process oluşturulacağını belirtir.
Genellikle CPU çekirdeği sayısı * 2 + 1 olarak ayarlanır.
processes = 5
Her worker process içinde kaç thread oluşturulacağını belirtir.
threads = 2
uWSGI'nin log dosyası.
logto = /var/log/uwsgi/myflaskapp.log
uWSGI'nin process id (PID) dosyasını kaydetme yeri.
pidfile = /tmp/myflaskapp.pid
Bağlantıların belirli bir süre içinde yanıt vermemesi durumunda worker'ları öldür.
harakiri = 20
uWSGI'nin başlangıçta tüm socket'leri temizlemesini sağlar.
vacuum = true
Master process öldüğünde worker'ları da öldür.
die-on-term = true
Otomatik olarak yeniden başlatma (geliştirme için faydalı olabilir).
Bu genellikle Nginx ile birlikte kullanılmaz, Nginx yeniden başlatmayı üstlenir.
lazy-apps = true
max-requests = 5000
logto ve pidfile için belirttiğimiz dizinlerin var olduğundan ve uWSGI’nin yazma iznine sahip olduğundan emin olmalıyız.
sudo mkdir -p /var/log/uwsgi
sudo chown -R whoami:whoami /var/log/uwsgi # Log dizini sahibini mevcut kullanıcıya değiştirin
Şimdi uWSGI’yi bu yapılandırma dosyası ile çalıştırmayı deneyin:
uwsgi --ini uwsgi.ini
Herhangi bir hata görmemelisiniz. uWSGI arka planda çalışıyor olmalı. ps aux | grep uwsgi komutu ile kontrol edebilirsiniz.
Nginx Kurulumu ve Yapılandırması
Nginx, gelen HTTP isteklerini alacak ve bunları uWSGI’ye yönlendirecektir. Ayrıca statik dosyaları doğrudan Nginx üzerinden sunmak, performansı artırır.
Nginx’in Kurulumu
EPEL deposunu daha önce eklediğimiz için Nginx’i kolayca kurabiliriz:
sudo yum install -y nginx
Nginx’in Başlatılması ve Otomatik Başlatma
Nginx servisini başlatalım ve sistem başlangıcında otomatik olarak başlaması için yapılandıralım:
sudo service nginx start
sudo chkconfig nginx on
Tarayıcınızdan sunucunuzun IP adresine giderek Nginx’in varsayılan “Welcome to Nginx!” sayfasını görmeniz gerekir.
Nginx Yapılandırma Dosyası Oluşturma
Varsayılan Nginx yapılandırma dosyasını değiştirmek yerine, kendi uygulamamız için ayrı bir yapılandırma dosyası oluşturmak daha iyi bir yaklaşımdır.
sudo nano /etc/nginx/conf.d/myflaskapp.conf
İçine aşağıdaki içeriği yapıştırın:
server {
listen 80;
server_name your_domain.com www.your_domain.com your_server_ip; # Kendi alan adınızı veya IP adresinizi buraya yazın
# Flask uygulamasının statik dosyaları (CSS, JS, resimler vb.)
# Genellikle Flask uygulamaları statik dosyaları kendi bünyesinde barındırır,
# ancak Nginx üzerinden sunmak performansı artırır.
# Eğer uygulamanızın static klasörü yoksa veya kullanmıyorsanız bu bloğu kaldırabilirsiniz.
location /static {
alias /var/www/myflaskapp/static; # Flask uygulamanızın static klasörünün yolu
}
location / {
include uwsgi_params; # uWSGI ile iletişim için gerekli parametreleri içerir
uwsgi_pass unix:/tmp/myflaskapp.sock; # uWSGI'nin dinlediği Unix socket yolu
}
# Hata sayfalarını yapılandırabilirsiniz
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
your_domain.com, www.your_domain.com ve your_server_ip kısımlarını kendi sunucunuzun IP adresi veya alan adlarıyla değiştirmeyi unutmayın.
_Not: Eğer Flask uygulamanızda statik dosyalarınız varsa (/var/www/myflaskapp/static gibi bir dizinde), yukarıdaki /static bloğunu kullanabilirsiniz. Eğer yoksa veya Nginx üzerinden sunmayacaksanız bu bloğu silebilirsiniz._
Nginx Yapılandırmasını Test Etme ve Yeniden Yükleme
Yapılandırma dosyasını kaydettikten sonra, Nginx yapılandırmasının sözdizimsel olarak doğru olup olmadığını kontrol etmek önemlidir:
sudo nginx -t
Eğer syntax is ok ve test is successful mesajlarını görürseniz, yapılandırma doğrudur. Şimdi Nginx’i yeniden yükleyerek yeni yapılandırmayı etkinleştirelim:
sudo service nginx reload
Şimdi tarayıcınızdan http:// veya alan adınıza giderek Flask uygulamanızın Nginx üzerinden çalıştığını doğrulayın. “Merhaba, uWSGI ve Nginx ile Flask Uygulaması Çalışıyor!” mesajını görmelisiniz.
Sistem Servisleri ve Otomatik Başlatma
uWSGI’nin sunucu yeniden başlatıldığında otomatik olarak başlamasını sağlamak için bir init.d script’i oluşturmamız gerekiyor. CentOS 6.4, systemd yerine SysV init sistemini kullanır.
uWSGI için Init Script Oluşturma
myflaskapp için /etc/init.d/uwsgi adında bir init script dosyası oluşturalım:
sudo nano /etc/init.d/uwsgi
İçine aşağıdaki içeriği yapıştırın:
#!/bin/bash
# uwsgi This starts and stops the uwsgi daemon
# chkconfig: - 85 15
description: uWSGI is a fast, self-healing and developer-friendly application server.
processname: uwsgi
config: /var/www/myflaskapp/uwsgi.ini
pidfile: /tmp/myflaskapp.pid
### BEGIN INIT INFO
Provides: uwsgi
Required-Start: $local_fs $network
Required-Stop: $local_fs $network
Default-Start:
Default-Stop:
Short-Description: Start and stop the uWSGI server
Description: uWSGI is a fast, self-healing and developer-friendly application server.
### END INIT INFO
Source function library.
. /etc/rc.d/init.d/functions
Configuration
UWSGI_INI="/var/www/myflaskapp/uwsgi.ini"
UWSGI_PIDFILE="/tmp/myflaskapp.pid"
UWSGI_LOGFILE="/var/log/uwsgi/myflaskapp.log"
UWSGI_BINARY="/var/www/myflaskapp/venv/bin/uwsgi" # Sanal ortamdaki uwsgi binary yolu
Check if uWSGI binary exists
[ -x "$UWSGI_BINARY" ] || exit 5
Check if uWSGI config exists
[ -f "$UWSGI_INI" ] || exit 6
start() {
echo -n $"Starting uWSGI: "
daemon --pidfile=$UWSGI_PIDFILE "$UWSGI_BINARY --ini $UWSGI_INI --daemonize $UWSGI_LOGFILE"
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/uwsgi
return $RETVAL
}
stop() {
echo -n $"Stopping uWSGI: "
killproc -p $UWSGI_PIDFILE uwsgi
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/uwsgi
return $RETVAL
}
restart() {
stop
start
}
reload() {
echo -n $"Reloading uWSGI: "
killproc -p $UWSGI_PIDFILE uwsgi -HUP
RETVAL=$?
echo
return $RETVAL
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status -p $UWSGI_PIDFILE uwsgi
RETVAL=$?
;;
restart)
restart
;;
condrestart|try-restart)
[ -f /var/lock/subsys/uwsgi ] && restart || :
;;
reload)
reload
;;
force-reload)
reload
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
RETVAL=2
esac
exit $RETVAL
Script’i kaydettikten sonra, çalıştırılabilir hale getirelim ve chkconfig ile sisteme ekleyelim:
sudo chmod +x /etc/init.d/uwsgi
sudo chkconfig --add uwsgi
sudo chkconfig uwsgi on
Şimdi uWSGI servisini manuel olarak başlatabilir, durdurabilir veya yeniden başlatabilirsiniz:
sudo service uwsgi start
sudo service uwsgi stop
sudo service uwsgi restart
sudo service uwsgi status
Bu adımlarla, hem uWSGI hem de Nginx sunucuları, sistem yeniden başlatıldığında otomatik olarak başlayacaktır.
Güvenlik İpuçları
Üretim ortamında bir web uygulaması dağıtırken güvenlik her zaman öncelikli olmalıdır.
Firewall (iptables) Yapılandırması
CentOS 6.4’te varsayılan güvenlik duvarı iptables‘tır. Sadece gerekli portları (80 HTTP, 443 HTTPS, 22 SSH) açmalısınız.
sudo nano /etc/sysconfig/iptables
Aşağıdaki kuralların var olduğundan veya eklediğinizden emin olun (genellikle REJECT kuralından önce eklenir):
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
Eğer HTTPS kullanacaksanız:
#-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
Değişiklikleri kaydettikten sonra iptables servisini yeniden başlatın:
sudo service iptables restart
SELinux
SELinux (Security-Enhanced Linux), CentOS’ta ek bir güvenlik katmanı sağlar. Ancak bazen uygulamanın veya servislerin çalışmasını engelleyebilir. Üretim ortamında SELinux’u doğru yapılandırmak karmaşık olabilir. Eğer SELinux sorunlara neden oluyorsa, geçici olarak veya kalıcı olarak devre dışı bırakmayı düşünebilirsiniz (ancak bu bir güvenlik riski oluşturur).
SELinux durumunu kontrol etmek için:
sestatus
Eğer Enforcing durumundaysa ve sorun yaşıyorsanız, geçici olarak Permissive moda alabilirsiniz:
sudo setenforce 0
Kalıcı olarak devre dışı bırakmak için /etc/selinux/config dosyasını düzenleyin ve SELINUX=enforcing satırını SELINUX=disabled olarak değiştirin, ardından sunucuyu yeniden başlatın. Bu önerilen bir yöntem değildir, ancak hızlı sorun giderme için kullanılabilir. Güvenlik için SELinux’u etkin tutmak ve gerekli politikaları oluşturmak en iyisidir.
Uygulama ve Sunucu Güncellemeleri
Sistemdeki tüm paketleri ve uygulamanızın bağımlılıklarını düzenli olarak güncelleyin. Bu, bilinen güvenlik açıklarının kapatılmasına yardımcı olur.
sudo yum update -y
cd /var/www/myflaskapp
source venv/bin/activate
pip install -r requirements.txt # Bağımlılıkları güncelleyin (eğer requirements.txt'de yeni versiyonlar varsa)
deactivate
SSH Güvenliği
SSH erişiminizi güvenli hale getirin:
* Varsayılan SSH portunu (22) değiştirin.
* Parola yerine SSH anahtar çiftleri kullanın.
* Root kullanıcısının doğrudan SSH erişimini devre dışı bırakın.
* fail2ban gibi araçlarla kaba kuvvet saldırılarına karşı koruma sağlayın.
Sorun Giderme (Troubleshooting)
Kurulum veya yapılandırma sırasında sorunlarla karşılaşmak olasıdır. İşte yaygın sorunlar ve çözümleri:
Log Dosyaları
Sorun gidermenin ilk adımı log dosyalarını kontrol etmektir.
* uWSGI Logları: /var/log/uwsgi/myflaskapp.log
* Nginx Hata Logları: /var/log/nginx/error.log
* Nginx Erişim Logları: /var/log/nginx/access.log
* Sistem Logları: /var/log/messages, /var/log/audit/audit.log (SELinux ile ilgili sorunlar için)
Log dosyalarını tail -f komutuyla canlı olarak izleyebilirsiniz:
tail -f /var/log/uwsgi/myflaskapp.log
tail -f /var/log/nginx/error.log
Socket İzinleri
Nginx’in uWSGI socket’ine erişim izni yoksa hata alırsınız.
* uwsgi.ini dosyasındaki chmod-socket = 666 ayarının doğru olduğundan emin olun.
* Socket dosyasının bulunduğu dizin (/tmp/ gibi) için Nginx kullanıcısının (genellikle nginx) yazma/okuma iznine sahip olduğundan emin olun.
ls -l /tmp/myflaskapp.sock
Eğer izinler yanlışsa, uWSGI servisini yeniden başlatmak genellikle socket dosyasını doğru izinlerle yeniden oluşturur.
Python Bağımlılıkları
Flask uygulamanızın tüm bağımlılıklarının sanal ortamda yüklü olduğundan emin olun.
* Sanal ortamı etkinleştirin (source venv/bin/activate).
* pip list komutuyla yüklü paketleri kontrol edin.
* requirements.txt dosyanızdaki tüm paketlerin yüklü olduğundan emin olun (pip install -r requirements.txt).
Nginx Yapılandırma Hataları
Nginx yapılandırmanızda bir hata varsa, sudo nginx -t komutu size hatayı gösterecektir.
* server_name veya listen direktiflerini kontrol edin.
* uwsgi_pass yolunun uwsgi.ini dosyasındaki socket yoluyla eşleştiğinden emin olun.
* include uwsgi_params; satırının doğru yerde olduğundan emin olun.
uWSGI Yapılandırma Hataları
uWSGI yapılandırmanızda bir hata varsa, uwsgi --ini uwsgi.ini komutunu çalıştırdığınızda konsolda hata mesajları göreceksiniz.
* chdir, module, home yollarının doğru olduğundan emin olun.
* socket yolunun Nginx yapılandırmasıyla eşleştiğinden emin olun.
* pidfile ve logto dizinlerinin var olduğundan ve uWSGI’nin yazma iznine sahip olduğundan emin olun.
Port Çakışmaları
Başka bir servis aynı portu (örn. 80) kullanıyorsa Nginx başlatılamaz.
* sudo netstat -tulpn | grep :80 komutuyla 80 numaralı portu hangi servisin kullandığını kontrol edin. Apache gibi başka bir web sunucusu çalışıyorsa durdurmanız gerekebilir (sudo service httpd stop).
Sonuç
Bu kapsamlı rehberde, Flask tabanlı bir web uygulamasını CentOS 6.4 işletim sistemi üzerinde uWSGI uygulama sunucusu ve Nginx ters proxy sunucusu kullanarak nasıl dağıtılacağını adım adım inceledik. Sanal ortam oluşturmaktan, Flask uygulamasını yapılandırmaya, uWSGI’yi kurup yapılandırmaya, Nginx’i kurup uWSGI ile entegre etmeye ve son olarak servisleri otomatik başlatmaya kadar tüm süreçleri ele aldık. Ayrıca, güvenlik ipuçları ve yaygın sorun giderme yöntemleri hakkında da bilgi verdik.
Bu yapılandırma, Flask uygulamalarınız için üretim ortamında yüksek performans, güvenlik ve ölçeklenebilirlik sunan sağlam bir temel sağlar. CentOS 6.4 gibi eski sistemlerde bile bu adımları takip ederek uygulamalarınızı başarılı bir şekilde dağıtabilirsiniz. Unutmayın ki, modern dağıtımlarda (CentOS 7+, Ubuntu 16.04+) systemd servis yöneticisi kullanıldığı için uWSGI servis kurulumu farklılık gösterecektir. Ancak temel mantık (Flask, uWSGI, Nginx entegrasyonu) benzer kalacaktır. Bu rehber, eski nesil sistemlerdeki ihtiyaçları karşılamak üzere özel olarak hazırlanmıştır. Uygulamanızın ve sunucunuzun güvenliğini ve performansını sağlamak için düzenli güncellemeleri ve bakım işlemlerini ihmal etmeyin.