Takip et

Flask Uygulamalarını uWSGI ve Nginx ile Ubuntu 14.04 Üzerinde Dağıtma

Flask Uygulamalarını uWSGI ve Nginx ile Ubuntu 14.04 Üzerinde Dağıtma Giriş Web uygulaması geliştirme sürecinde, uygulamayı geliştirme ort

Flask Uygulamalarını uWSGI ve Nginx ile Ubuntu 14.04 Üzerinde Dağıtma

Giriş

Web uygulaması geliştirme sürecinde, uygulamayı geliştirme ortamında çalıştırmak genellikle basit bir komutla mümkünken, bu uygulamayı gerçek dünya kullanıcılarına sunmak (yani “dağıtmak”) çok daha karmaşık bir süreçtir. Geliştirme sunucuları (örneğin Flask’ın kendi dahili sunucusu), genellikle tek iş parçacıklı ve tek süreçli oldukları için üretim ortamlarının yoğun yükünü ve güvenlik gereksinimlerini karşılayamazlar. Bu nedenle, Flask gibi Python tabanlı web çerçevelerini üretimde çalıştırmak için daha sağlam ve performanslı çözümlere ihtiyaç duyarız. Bu makalede, Flask uygulamalarınızı Ubuntu 14.04 işletim sistemi üzerinde uWSGI ve Nginx kullanarak nasıl dağıtacağınızı adım adım detaylı bir şekilde açıklayacağız.

Web Sunucusu Mimarisine Genel Bakış

Bir web uygulamasının üretim ortamında çalıştırılması genellikle üç ana bileşenin işbirliğini gerektirir:

  1. Web Uygulaması: Flask uygulamanızın kendisi, iş mantığını ve kullanıcı arayüzünü barındırır.
  2. WSGI Sunucusu: Web Server Gateway Interface (WSGI), Python web uygulamaları ile web sunucuları arasında standart bir arayüz tanımlar. uWSGI gibi WSGI sunucuları, gelen HTTP isteklerini Python uygulamasına iletmekten ve uygulamanın yanıtlarını geri alıp web sunucusuna göndermekten sorumludur. Bu sunucular, uygulamanızın birden fazla kopyasını çalıştırarak eşzamanlı istekleri yönetebilir ve uygulama hatalarını izleyebilir.
  3. Ters Proxy (Reverse Proxy) / Web Sunucusu: Nginx gibi bir web sunucusu, doğrudan internetten gelen istekleri karşılar. Statik dosyaları (CSS, JavaScript, resimler) doğrudan sunabilir ve dinamik istekleri (Flask uygulamanızdan gelenler) WSGI sunucusuna yönlendirir. Nginx, yük dengeleme, SSL sonlandırma, sıkıştırma ve önbellekleme gibi gelişmiş özellikler sunarak uygulamanızın performansını ve güvenliğini artırır.

Bu mimari, her bileşenin kendi özel görevine odaklanmasını sağlayarak sistemi daha verimli, ölçeklenebilir ve güvenli hale getirir.

Neden uWSGI ve Nginx?

uWSGI: Python uygulamaları için popüler ve yüksek performanslı bir WSGI sunucusudur. Çok çeşitli yapılandırma seçenekleri sunar, farklı protokolleri (HTTP, uwsgi) destekler ve uygulamanızın süreçlerini ve iş parçacıklarını etkili bir şekilde yönetir. Ölçeklenebilirlik ve güvenilirlik açısından endüstri standardı çözümlerden biridir.

Nginx: Hafif, yüksek performanslı ve olay tabanlı mimarisi sayesinde aynı anda binlerce bağlantıyı işleyebilen popüler bir web sunucusudur. Statik dosya sunumu konusunda oldukça hızlıdır ve ters proxy olarak uWSGI ile mükemmel bir uyum içinde çalışır. Yük dengeleme, SSL/TLS sonlandırma ve gelişmiş yönlendirme kuralları gibi özellikleriyle modern web uygulamaları için vazgeçilmezdir.

Ubuntu 14.04 Seçimi

Ubuntu 14.04, “Trusty Tahr” kod adlı bir LTS (Uzun Süreli Destek) sürümüdür. Her ne kadar daha yeni Ubuntu sürümleri mevcut olsa da, birçok eski sunucu altyapısı hala bu sürümü kullanmaktadır. Bu makale, özellikle bu eski ama hala yaygın olan ortamda çalışan geliştiriciler ve sistem yöneticileri için hazırlanmıştır. Bu sürümde kullanılan sistem araçları (örneğin Upstart) ve paket sürümleri, daha yeni Ubuntu sürümlerinden farklılık gösterebilir, bu yüzden spesifik olarak 14.04’e odaklanmak önemlidir.

Önkoşullar

Kuruluma başlamadan önce, sunucunuzun temel gereksinimleri karşıladığından emin olmalıyız. Bu adımlar, temiz bir Ubuntu 14.04 sunucusu varsayılarak yapılmıştır.

Sistem Güncelleme

İlk olarak, sunucunuzdaki paket listelerini güncelleyip mevcut paketleri yükseltmek iyi bir uygulamadır. Bu, en son güvenlik yamalarına sahip olmanızı ve bağımlılık sorunlarını önlemenizi sağlar.

sudo apt-get update
sudo apt-get upgrade -y

Gerekli Paketlerin Kurulumu

Python uygulamaları geliştirmek için Python’ın yanı sıra, paket yönetim aracı pip‘e ve sanal ortamlar oluşturmak için virtualenv‘e ihtiyacımız olacak. Ayrıca Nginx’i de kurmalıyız.

sudo apt-get install python-pip python-dev nginx -y
sudo pip install virtualenv

* python-pip: Python paketlerini kurmak için kullanılan araç.
* python-dev: Python geliştirmesi için gerekli başlık dosyalarını ve statik kütüphaneleri içerir. Bu, uWSGI gibi bazı Python paketlerinin derlenmesi için gereklidir.
* nginx: Ters proxy ve web sunucusu olarak kullanacağımız Nginx.
* virtualenv: Python projeleri için izole geliştirme ortamları oluşturmayı sağlayan araç. Bu, proje bağımlılıklarının sistem genelindeki Python kurulumunu etkilemesini engeller ve farklı projelerin farklı bağımlılık sürümlerini kullanmasına olanak tanır.

Flask Uygulaması Oluşturma

Şimdi basit bir Flask uygulaması oluşturalım. Bu uygulama, uWSGI ve Nginx ile entegrasyonu test etmek için kullanılacaktır.

Proje Dizini Oluşturma

Uygulamanız için bir proje dizini oluşturalım ve bu dizine geçelim. Genellikle uygulamalar /var/www/ altında veya kullanıcının ana dizininde (/home/kullanici/) tutulur. Biz /var/www/ altını tercih edelim.

sudo mkdir -p /var/www/myflaskapp
sudo chown -R $USER:$USER /var/www/myflaskapp # Kullanıcıya sahiplik ver
cd /var/www/myflaskapp

Bu komutlar, /var/www/myflaskapp adında bir dizin oluşturur, bu dizinin sahipliğini mevcut kullanıcıya verir ve o dizine geçiş yapar.

Sanal Ortam Kurulumu

Oluşturduğumuz proje dizini içinde bir sanal ortam oluşturalım ve bu ortamı etkinleştirelim.

virtualenv venv
source venv/bin/activate

venv adında bir sanal ortam oluşturulur ve source venv/bin/activate komutu ile etkinleştirilir. Komut istemcinizin başında (venv) gibi bir ibare görmelisiniz, bu sanal ortamın etkin olduğunu gösterir.

Flask Kurulumu

Sanal ortam etkinleştirildikten sonra Flask’ı kurabiliriz.

pip install Flask

Basit Bir Flask Uygulaması Yazma (app.py)

Şimdi app.py adında bir dosya oluşturalım ve içine basit bir Flask uygulaması yazalım.

nano app.py

İçine aşağıdaki kodu yapıştırın:

# app.py
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Merhaba, Flask Uygulamam uWSGI ve Nginx ile Çalışıyor!'

if __name__ == '__main__':
    app.run(debug=True)

Bu basit uygulama, kök URL’ye (/) yapılan isteklere “Merhaba, Flask Uygulamam uWSGI ve Nginx ile Çalışıyor!” mesajını döndürür. if __name__ == '__main__': bloğu, bu dosya doğrudan çalıştırıldığında Flask’ın dahili geliştirme sunucusunu başlatır, ancak üretimde uWSGI tarafından çağrılacağı için bu blok çalışmayacaktır.

wsgi.py Dosyası Oluşturma

uWSGI, Flask uygulamanızı doğrudan app.py dosyasından çağırmak yerine, genellikle bir wsgi.py dosyasını arar. Bu dosya, uygulamanızın WSGI uyumlu bir nesnesini (genellikle app değişkeni) dışa aktarır.

nano wsgi.py

İçine aşağıdaki kodu yapıştırın:

# wsgi.py
from app import app

if __name__ == '__main__':
    app.run()

Bu dosya, app.py dosyasından app nesnesini içeri aktarır ve uWSGI’nin bu nesneyi bulmasını sağlar.

Sanal ortamdan çıkmak için:

deactivate

Artık Flask uygulamamız hazır.

uWSGI Kurulumu ve Yapılandırması

Flask uygulamasını üretim ortamında çalıştırmak için uWSGI’yi kurmalı ve yapılandırmalıyız.

uWSGI Kurulumu

uWSGI’yi sanal ortamda değil, sistem genelinde kurmak daha iyidir, çünkü uWSGI genellikle sistem servisi olarak çalışır ve birden fazla sanal ortamdaki uygulamalara hizmet verebilir. Ancak, Python paketlerinin derlenmesi için python-dev paketinin kurulu olduğundan emin olun.

# Eğer sanal ortamdaysanız çıkın
deactivate

uWSGI'yi sistem genelinde kurun

sudo pip install uwsgi

Bazı durumlarda, pip yerine apt-get ile uWSGI kurmak isteyebilirsiniz (sudo apt-get install uwsgi). Ancak, pip ile kurulan sürüm genellikle daha günceldir ve daha fazla özelliği destekler. pip ile kurulan uWSGI’nin yürütülebilir dosyası /usr/local/bin/uwsgi konumunda olacaktır.

uWSGI ile Flask Uygulamasını Test Etme

Nginx’i devreye sokmadan önce uWSGI’nin Flask uygulamanızla düzgün çalıştığından emin olmak iyi bir fikirdir.

# Proje dizinine gidin
cd /var/www/myflaskapp

Sanal ortamı etkinleştirin

source venv/bin/activate

uWSGI'yi HTTP modunda çalıştırarak test edin

uwsgi --http :8000 --module wsgi --callable app

Tarayıcınızda http://SUNUCU_IP_ADRESİ:8000 adresine giderek uygulamanızın çalıştığını kontrol edin. Eğer “Merhaba, Flask Uygulamam uWSGI ve Nginx ile Çalışıyor!” mesajını görüyorsanız, uWSGI uygulamanızı başarıyla çalıştırıyor demektir. Testi sonlandırmak için Ctrl+C tuşlarına basın.
Sanal ortamdan çıkmayı unutmayın: deactivate.

uWSGI Yapılandırma Dosyası Oluşturma (.ini)

uWSGI’yi bir komutla çalıştırmak yerine, kalıcı bir yapılandırma dosyası kullanarak daha düzenli bir şekilde yönetebiliriz. Bu dosya genellikle .ini uzantısına sahiptir. /etc/uwsgi/sites/ dizini altında bir yapılandırma dosyası oluşturalım.

sudo mkdir -p /etc/uwsgi/sites
sudo nano /etc/uwsgi/sites/myflaskapp.ini

İçine aşağıdaki yapılandırmayı yapıştırın:

[uwsgi]
module = wsgi:app
master = true
processes = 5
socket = /tmp/myflaskapp.sock
chmod-socket = 660
vacuum = true
die-on-term = true
logto = /var/log/uwsgi/myflaskapp.log
uid = www-data
gid = www-data
chdir = /var/www/myflaskapp
virtualenv = /var/www/myflaskapp/venv

Bu yapılandırma dosyasındaki önemli parametreler şunlardır:
* module = wsgi:app: uWSGI’ye wsgi.py dosyasındaki app adlı WSGI uygulamasını yüklemesini söyler.
* master = true: Ana uWSGI sürecini etkinleştirir. Bu süreç, işçi süreçlerini yönetir.
* processes = 5: Uygulamayı işleyecek 5 işçi süreci başlatır. Bu sayıyı sunucunuzun CPU çekirdek sayısına ve uygulamanızın ihtiyaçlarına göre ayarlayabilirsiniz.
* socket = /tmp/myflaskapp.sock: Nginx ile iletişim kurmak için kullanılacak Unix soketinin yolunu belirtir. Bu, HTTP yerine daha hızlı ve güvenli bir iletişim yöntemidir.
* chmod-socket = 660: Soket dosyası için izinleri ayarlar. 660, soket dosyasının sahibi ve grup üyelerinin okuma/yazma iznine sahip olmasını sağlar. www-data grubunun bu sokete erişebilmesi için önemlidir.
* vacuum = true: uWSGI durduğunda soket dosyasını ve diğer geçici dosyaları temizler.
* die-on-term = true: uWSGI’nin SIGTERM sinyali aldığında temiz bir şekilde kapanmasını sağlar.
* logto = /var/log/uwsgi/myflaskapp.log: uWSGI günlüklerini belirtilen dosyaya yazar. Bu dosyanın ve dizinin var olduğundan ve uWSGI’nin yazma iznine sahip olduğundan emin olun.
* uid = www-data: uWSGI süreçlerinin www-data kullanıcısı olarak çalışmasını sağlar. Bu, güvenlik açısından önemlidir.
* gid = www-data: uWSGI süreçlerinin www-data grubu olarak çalışmasını sağlar.
* chdir = /var/www/myflaskapp: uWSGI’nin bu dizinde çalışmasını sağlar. Bu, göreceli yolların doğru çözümlenmesi için önemlidir.
* virtualenv = /var/www/myflaskapp/venv: Uygulamanın sanal ortamını belirtir. Bu, uWSGI’nin doğru Python bağımlılıklarını kullanmasını sağlar.

Log dizinini oluşturalım ve sahipliğini ayarlayalım:

sudo mkdir -p /var/log/uwsgi
sudo chown -R www-data:www-data /var/log/uwsgi

uWSGI’yi Daemon Olarak Çalıştırma (Upstart ile)

Ubuntu 14.04, sistem servislerini yönetmek için Upstart kullanır (daha yeni sürümler systemd kullanır). uWSGI’nin sunucu başladığında otomatik olarak başlaması ve arka planda çalışması için bir Upstart yapılandırma dosyası oluşturalım.

sudo nano /etc/init/uwsgi.conf

İçine aşağıdaki kodu yapıştırın:

# /etc/init/uwsgi.conf
description "uWSGI server"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
respawn limit 10 5

exec /usr/local/bin/uwsgi --ini /etc/uwsgi/sites/myflaskapp.ini

Bu Upstart betiği:
* description: Servisin açıklamasını belirtir.
* start on runlevel [2345]: Sunucu normal çok kullanıcılı modda başladığında uWSGI servisini başlatır.
* stop on runlevel [!2345]: Sunucu kapanırken veya tek kullanıcılı moda geçerken uWSGI servisini durdurur.
* respawn: uWSGI süreci beklenmedik bir şekilde durursa otomatik olarak yeniden başlatır.
* respawn limit 10 5: 5 saniye içinde 10 kez yeniden başlatma denemesi yapıldıktan sonra yeniden başlatmayı durdurur. Bu, sonsuz döngüleri önler.
* exec /usr/local/bin/uwsgi --ini /etc/uwsgi/sites/myflaskapp.ini: uWSGI yürütülebilir dosyasını belirtilen yapılandırma dosyasıyla çalıştırır. /usr/local/bin/uwsgi yolu, pip ile kurulan uWSGI’nin varsayılan yoludur. Eğer apt-get ile kurduysanız, yol /usr/bin/uwsgi olabilir.

Şimdi uWSGI servisini başlatalım:

sudo start uwsgi

Servisin durumunu kontrol etmek için:

sudo status uwsgi

Logları kontrol etmek için:

tail -f /var/log/uwsgi/myflaskapp.log

Eğer her şey yolundaysa, uWSGI artık arka planda çalışıyor ve Flask uygulamanızı dinliyor olmalı.

Nginx Kurulumu ve Yapılandırması

uWSGI uygulamamızı dinlerken, Nginx’in de gelen HTTP isteklerini alıp uWSGI’ye yönlendirmesi gerekiyor.

Nginx Kurulumu

Nginx’i daha önce kurmuştuk (sudo apt-get install nginx). Şimdi Nginx yapılandırmasını ayarlayalım.

Nginx Yapılandırma Dosyası Oluşturma

Nginx, sitelerin yapılandırmalarını /etc/nginx/sites-available/ dizininde tutar ve etkin siteler için bu dosyaların /etc/nginx/sites-enabled/ dizinine sembolik bağlantılarını kullanır. Uygulamamız için yeni bir yapılandırma dosyası oluşturalım:

sudo nano /etc/nginx/sites-available/myflaskapp

İçine aşağıdaki yapılandırmayı yapıştırın:

server {
    listen 80;
    server_name your_domain_or_ip; # Kendi alan adınızı veya IP adresinizi buraya yazın

    location / {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/myflaskapp.sock;
    }

    location /static {
        alias /var/www/myflaskapp/static; # Flask uygulamanızın statik dosyaları için dizin
    }

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
}

Bu yapılandırmadaki önemli noktalar:
* listen 80;: Nginx’in 80 numaralı portu dinlemesini sağlar (standart HTTP portu).
* server_name your_domain_or_ip;: Sunucunuzun alan adını veya IP adresini buraya yazın. Örneğin, server_name example.com www.example.com 192.168.1.100;.
* location /: Tüm gelen istekler için bu bloğu kullanır.
* include uwsgi_params;: Nginx’in uWSGI ile iletişim kurmak için ihtiyaç duyduğu parametreleri içerir. Bu dosya genellikle /etc/nginx/uwsgi_params konumunda bulunur.
* uwsgi_pass unix:///tmp/myflaskapp.sock;: Gelen istekleri, uWSGI’nin dinlediği Unix soketine yönlendirir. Bu yol, uWSGI yapılandırma dosyasındaki socket parametresiyle aynı olmalıdır.
* location /static: Eğer Flask uygulamanızda statik dosyalar (CSS, JS, resimler) varsa, Nginx’in bunları doğrudan sunmasını sağlayabilirsiniz. Bu, Nginx’in bu tür dosyaları WSGI sunucusuna yönlendirmeden daha hızlı bir şekilde sunmasını sağlar. /var/www/myflaskapp/static dizinini oluşturmanız ve statik dosyalarınızı buraya koymanız gerekir.

Statik dizini oluşturalım (şimdilik boş olabilir):

sudo mkdir -p /var/www/myflaskapp/static

Sembolik Bağlantı Oluşturma ve Varsayılan Yapılandırmayı Devre Dışı Bırakma

Yeni yapılandırma dosyamızı etkinleştirmek için /etc/nginx/sites-enabled/ dizinine bir sembolik bağlantı oluşturalım ve Nginx’in varsayılan yapılandırmasını devre dışı bırakalım (çakışmaları önlemek için).

sudo ln -s /etc/nginx/sites-available/myflaskapp /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default

Nginx Yapılandırmasını Test Etme

Nginx yapılandırmanızda herhangi bir hata olup olmadığını kontrol etmek önemlidir.

sudo nginx -t

Eğer test is successful veya syntax is ok mesajlarını görürseniz, yapılandırmanızda bir sorun yok demektir. Herhangi bir hata durumunda, hatayı düzeltip tekrar test edin.

Nginx’i Yeniden Başlatma

Yapılandırma değişikliklerinin etkili olması için Nginx’i yeniden başlatın.

sudo service nginx restart

Sistemi Başlatma ve Test Etme

Şimdi uWSGI ve Nginx’in birlikte çalışıp çalışmadığını test edelim.

uWSGI Servisini Başlatma

Daha önce başlatmıştık, ancak emin olmak için tekrar kontrol edelim:

sudo start uwsgi # Eğer durduysa
sudo status uwsgi # Durumunu kontrol et

Nginx Servisini Başlatma

Nginx’i de yeniden başlattık, ancak emin olmak için kontrol edelim:

sudo service nginx restart # Eğer durduysa
sudo service nginx status # Durumunu kontrol et

Uygulamayı Tarayıcıdan Test Etme

Tarayıcınızı açın ve sunucunuzun IP adresine veya alan adına gidin (örneğin, http://your_domain_or_ip).
Eğer “Merhaba, Flask Uygulamam uWSGI ve Nginx ile Çalışıyor!” mesajını görüyorsanız, tebrikler! Flask uygulamanız uWSGI ve Nginx ile Ubuntu 14.04 üzerinde başarıyla dağıtıldı.

Log Dosyalarını Kontrol Etme

Herhangi bir sorunla karşılaşırsanız, log dosyalarını kontrol etmek sorun giderme için ilk adımdır:

* Nginx Hata Logları:

tail -f /var/log/nginx/error.log

* Nginx Erişim Logları:

tail -f /var/log/nginx/access.log

* uWSGI Logları:

tail -f /var/log/uwsgi/myflaskapp.log

Bu loglar, bağlantı sorunları, izin hataları veya uygulama hataları hakkında değerli bilgiler sağlayabilir.

Sık Karşılaşılan Sorunlar ve Çözümler

Kurulum sırasında veya sonrasında bazı yaygın sorunlarla karşılaşabilirsiniz. İşte bazıları ve olası çözümleri:

uWSGI Socket Hatası (İzinler, Yol)

* Sorun: Nginx, uWSGI soket dosyasına erişemiyor veya uWSGI soket dosyasını oluşturamıyor. Nginx hata loglarında “connect() to unix:///tmp/myflaskapp.sock failed (13: Permission denied)” veya “No such file or directory” gibi hatalar görebilirsiniz.
* Çözüm:
* uwsgi.ini dosyasındaki socket yolunun doğru olduğundan emin olun.
* chmod-socket = 660 ayarının olduğundan emin olun.
* uWSGI’nin www-data kullanıcısı ve grubu altında çalıştığından emin olun (uid = www-data, gid = www-data).
* /tmp dizini varsayılan olarak herkesin yazabileceği bir yer olsa da, bazen uWSGI’nin soket oluşturacağı dizinin izinleri sorun yaratabilir. Daha güvenli bir yaklaşım, /var/run/uwsgi/ gibi özel bir dizin oluşturmak ve bu dizinin sahipliğini www-data‘ya vermektir:

sudo mkdir -p /var/run/uwsgi
        sudo chown www-data:www-data /var/run/uwsgi

Ve uwsgi.ini dosyasında socket = /var/run/uwsgi/myflaskapp.sock olarak güncelleyin.

Nginx 502 Bad Gateway Hatası

* Sorun: Nginx, uWSGI’den geçerli bir yanıt alamıyor. Bu genellikle uWSGI’nin çalışmadığı veya Nginx’in uWSGI ile iletişim kuramadığı anlamına gelir.
* Çözüm:
* uWSGI servisinin çalıştığından emin olun: sudo status uwsgi. Eğer çalışmıyorsa sudo start uwsgi ile başlatın.
* uWSGI loglarını kontrol edin (/var/log/uwsgi/myflaskapp.log). Uygulamanızda bir Python hatası olabilir.
* Nginx yapılandırmasındaki uwsgi_pass yolunun (unix:///tmp/myflaskapp.sock) uWSGI yapılandırmasındaki socket yoluyla tamamen aynı olduğundan emin olun.
* uWSGI’nin soketi oluşturduğunu kontrol edin: ls -l /tmp/myflaskapp.sock. Eğer yoksa, uWSGI çalışmıyor veya yapılandırması yanlış.

Python Bağımlılıkları Sorunları

* Sorun: Flask uygulamanız beklenmedik hatalar veriyor veya başlatılamıyor.
* Çözüm:
* uwsgi.ini dosyasındaki chdir ve virtualenv yollarının doğru olduğundan emin olun. uWSGI’nin uygulamanızın kök dizininde ve doğru sanal ortamda çalıştığından emin olması gerekir.
* Sanal ortamınızın tüm gerekli bağımlılıkları içerdiğinden emin olun (pip install -r requirements.txt).

Nginx Yapılandırma Hatası

* Sorun: Nginx yeniden başlatılamıyor ve hata veriyor.
* Çözüm:
* sudo nginx -t komutunu çalıştırarak yapılandırma dosyanızdaki sözdizimi hatalarını kontrol edin. Hata mesajı genellikle sorunun nerede olduğunu gösterir.
* server_name ayarının doğru olduğundan ve alan adınızın veya IP adresinizin doğru yazıldığından emin olun.

Log Dosyalarını İnceleme

Herhangi bir sorunla karşılaştığınızda, sistem loglarını ve uygulama loglarını incelemek en etkili hata ayıklama yöntemidir.
* sudo tail -f /var/log/nginx/error.log
* sudo tail -f /var/log/uwsgi/myflaskapp.log
* sudo journalctl -u uwsgi.service (Ubuntu 14.04’te journalctl yerine Upstart loglarını /var/log/upstart/uwsgi.log veya status uwsgi komutuyla kontrol etmek daha yaygındır.)

Sonuç

Bu makalede, Flask uygulamanızı Ubuntu 14.04 üzerinde uWSGI ve Nginx kullanarak üretim ortamında nasıl dağıtacağınızı adım adım öğrendiniz. Sanal ortamların kullanımı, uWSGI’nin yapılandırılması, Nginx’in ters proxy olarak ayarlanması ve Upstart ile servis yönetimi gibi konuları ele aldık. Bu mimari, Flask uygulamalarınız için sağlam, yüksek performanslı ve ölçeklenebilir bir temel sağlar.

İleri Adımlar

Uygulamanız artık üretimde çalışıyor olsa da, dağıtım sürecini daha da geliştirmek için atabileceğiniz bazı ileri adımlar bulunmaktadır:

  1. HTTPS Kullanımı: Let’s Encrypt gibi ücretsiz sertifika sağlayıcıları kullanarak uygulamanız için SSL/TLS şifrelemesini etkinleştirin. Bu, kullanıcılarınızın verilerini korur ve SEO sıralamanızı iyileştirir. Nginx, SSL sonlandırma için mükemmel bir seçimdir.
  2. Domain Yapılandırması: Uygulamanızı bir alan adına bağlayın ve DNS kayıtlarınızı (A kaydı) sunucunuzun IP adresine işaret edecek şekilde ayarlayın.
  3. Statik Dosya Yönetimi: Flask uygulamanızın statik dosyalarını (CSS, JavaScript, resimler) Nginx üzerinden doğrudan sunmak, uygulamanızın performansını önemli ölçüde artırır. location /static bloğunu kullanarak bunu zaten başlattık, ancak daha karmaşık statik dosya yönetimi için WhiteNoise gibi araçları düşünebilirsiniz.
  4. Ortam Değişkenleri: Hassas bilgileri (veritabanı şifreleri, API anahtarları) doğrudan kodda saklamak yerine ortam değişkenlerini kullanarak uygulamanıza iletin.
  5. Günlük Yönetimi: Uygulama ve sunucu günlüklerini merkezi bir sistemde toplamak ve analiz etmek, sorunları daha hızlı tespit etmenize yardımcı olur.
  6. Veritabanı Entegrasyonu: PostgreSQL veya MySQL gibi bir veritabanı sunucusunu kurun ve Flask uygulamanızı bu veritabanına bağlayın.
  7. Sürekli Entegrasyon/Sürekli Dağıtım (CI/CD): Uygulama güncellemelerini otomatik olarak dağıtmak için Jenkins, GitLab CI/CD veya GitHub Actions gibi araçları kullanın.

Bu adımları takip ederek, Flask uygulamalarınızın üretim ortamındaki performansını, güvenliğini ve sürdürülebilirliğini daha da artırabilirsiniz. Başarılar dileriz!

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.