Zephyrnet Logosu

Gunicorn ve Nginx ile AWS'de Flask Kullanarak Makine Öğrenimi Modelini Dağıtma

Tarih:

Giriş

Önceki makalede, bir Flask uygulamasında kapsüllenmiş duygu analizi için bir makine öğrenimi modeli oluşturma sürecinden geçtik. Bu Flask uygulaması, tweet'leri olumlu veya olumsuz olarak sınıflandırmak için duygu analizini kullanıyor. Uygulamaya hazır olan projenin tamamı GitHub'da sürüm kontrollüdür. Daha da ileri giderek, bu Flask uygulamasını bir bulut sunucusuna dağıtmak için Gunicorn ve Nginx'in nasıl kullanılacağını inceleyeceğiz ve makine öğrenimi modelinin üretim ortamında ölçeklenebilir ve erişilebilir olmasını sağlayacağız.

Bir önceki yazımızı takip edebilirsiniz Flask Kullanarak Makine Öğrenimi Modeli Nasıl Dağıtılır?

Kaldığımız yerden devam ederek bu Flask uygulamasını bir bulut sunucusuna dağıtmak için Gunicorn ve NGINX'i kullanacağız. Bu gönderi, makine öğrenimi dağıtımı için orijinal olarak yerel olarak barındırılan bir Flask uygulamasının buluta taşınmasını açıklayacaktır.

Gunicorn ve Nginx ile AWS'de Flask Kullanarak Makine Öğrenimi Modelini Dağıtma

İçindekiler

Adımlar Dahil Edin

  • Bir AWS EC2 Bulut Sunucusu kurun: İşletim sistemi olarak Ubuntu'yu kullanarak bir AWS EC2 örneğini başlatın. Güvenlik gruplarını gelen trafiğe izin verecek şekilde yapılandırın.
  • EC2 Örneğine SSH: Yerel MacWeis'inizden EC2 bulut sunucunuza bağlanmak için SSH'yi kullanın. Yerel sisteminize bağlanmak için bir SSH anahtar çiftine (genel ve özel) ihtiyacımız var.
  • Flask Uygulamasını Dağıtın: Flask uygulama dosyalarını EC2 örneğine aktarın. Model zaten Git Hub'daysa onu EC2 Ubuntu örneğine kopyalayın. Daha sonra sanal bir ortam kurun ve gerekli Python paketlerini veya gereksinimler dosyasını pip kullanarak dizine yükleyin. Flask uygulamasının EC2 ortamında düzgün çalışıp çalışmadığını test edin.
  • Bağımlılıkları yükleyin: Yükseltmeler için paket listelerini güncelleyin ve Python, pip ve Flask uygulamanızın gerektirdiği diğer kütüphaneler gibi gerekli bağımlılıkları yükleyin.
  • Gunicorn'u Kurun ve Yapılandırın: Python uygulamalarına yönelik bir WSGI HTTP sunucusu olan Gunicorn'u yükleyin. Başvuru sürecini yönetmek için bir Gunicorn hizmet dosyası oluşturun. Gunicorn hizmetini başlatın ve arka planda çalışmasını etkinleştirin.
  • NGINX'i Kurun ve Yapılandırın: Yüksek performanslı bir web sunucusu olan NGINX'i ve ters proxy'yi yükleyin. NGINX'i, gelen HTTP isteklerini Gunicorn sunucusuna iletecek şekilde yapılandırın. Flask uygulamanız için sunucu bloklarını (sanal ana bilgisayarlar) ayarlayın.
  • Alan Adını Yapılandırın (İsteğe bağlı): Bir alan adınız varsa DNS ayarlarını EC2 bulut sunucunuzun genel IP adresini işaret edecek şekilde yapılandırın. Değilse Flask uygulamanıza doğrudan genel IP adresinden erişebilirsiniz.
  • Uygulamayı Güvenli Hale Getirin: İstemciler ve sunucu arasında güvenli iletişim için HTTPS'yi etkinleştirin. Bir SSL/TLS sertifikası edinin (örn. Let's Encrypt) ve NGINX'i bunu kullanacak şekilde yapılandırın.
  • Dağıtımı Test Edin: Her şey ayarlandıktan sonra, dağıtılan Flask uygulamanıza bir web tarayıcısı aracılığıyla erişerek veya cURL veya Postman kullanarak istek göndererek test edin.

Bu adımları izleyerek, gelen istekleri verimli ve güvenli bir şekilde işlemek için Gunicorn'u WSGI sunucusu olarak ve NGINX'i ters proxy sunucusu olarak kullanarak, makine öğrenimi için Flask uygulamanızı bir AWS EC2 örneğinde başarıyla dağıtacağız.

Uygulamalı konuya geçmeden önce nasıl yapıldığını anlayalım.

İletişimi Anlamak: Flask, Gunicorn ve Nginx

             +-----------------------------+
             |           Client            |
             +-----------------------------+
                          |
                          |
             +------------v-------------+
             |        NGINX (Port 80)   |
             +------------+-------------+
                          |
                          |
             +------------v-------------+
             |       Gunicorn           |
             |     (WSGI Server)        |
             +------------+-------------+
                          |
                          |
             +------------v-------------+
             |   Flask Application      |
             |       (Python)           |
             +--------------------------+

Flask: Uygulamanın Merkezi

Flask, web uygulamaları/hizmetleri oluşturmak için gerekli araçları sağlayan hafif ve esnek bir Python web çerçevesidir. Gelen web isteklerini ele almak, makine öğrenimi modelinizi kullanarak bunları işlemek ve analiz sonuçlarını döndürmek, duyarlılık analizi hizmetinizin temelidir. Flask, yığınımızda uygulama katmanı olarak çalışır.

Flask uygulamasını önceki yazımızda zaten oluşturmuştuk. Ve komutu kullanarak klonlayın.

https://github.com/Geek-shikha/Flask_model_sentiment_analysis.git

Flask tek başına birden fazla isteği aynı anda karşılayamaz; işte o zaman Gunicorn devreye giriyor.

Gunicorn: Python WSGI HTTP Sunucusu

Gunicorn, Flask ile arayüz oluşturan bir ara katman görevi görür. UNIX sistemleri için tasarlanmış, Python web uygulamalarını dağıtmanın basit ama etkili bir yolunu sunan bir Python WSGI HTTP sunucusudur. Flask uygulamanızı Gunicorn ile çalıştırdığınızda, Flask uygulamasıyla iletişim kuran bir WSGI sunucusu oluşturulur. Gunicorn, gelen istekleri yönetmek, yükü dağıtmak ve eşzamanlı kullanıcıları yönetme yeteneğini artırmak için birden fazla çalışan sürecini yönetir. Hayır. Çalışan ve iş parçacığı sayısı sistemin çekirdek sayısına (2*Çekirdek +1) bağlıdır.

Çoklu iş parçacığı kullanana kadar ayrı bir bellek alanı yoktur. Tek bir çalışan, istemcilerden gelen Çoklu İstekleri paralel olarak işleyebilir.

Gunicorn Neden Gereklidir?

Çeşitli nedenlerden dolayı Gunicorn veya Green Unicorn, Flask uygulamalarının barındırılmasında çok önemli bir bileşendir. İlk olarak, Flask'ın yerleşik geliştirme sunucusu aynı anda birden fazla isteği işleyemez, bu da onu üretim ortamları için uygunsuz hale getirir. Fork öncesi çalışan modeli, çok sayıda çalışan sürecini veya iş parçacığını çalıştırarak, artan trafiği etkili bir şekilde karşılayarak ölçeklenebilirlik sağlar. G unicorn'un yük dengeleme özelliği, talepleri eşit şekilde dağıtarak ağır yükler altında performansı artırır. WSGI spesifikasyonuyla uyumlu olan Gunicorn, Flask ve diğer WSGI uyumlu çerçevelerle sorunsuz bir şekilde bütünleşerek dağıtımı basitleştirir. Gunicorn, eşzamanlılık, ölçeklenebilirlik, performans ve uyumluluk gibi temel özellikleri sağlayarak Flask uygulamalarının üretimde dağıtılmasında vazgeçilmez hale gelir.

Nginx: Frontline Ters Proxy'si

Nginx, kararlılığı, basit yapılandırması ve düşük kaynak tüketimiyle bilinen güçlü, yüksek performanslı bir web sunucusudur. Dağıtımımızda Nginx, Gunicorn'un önünde duran ters proxy olarak yapılandırılmıştır. Müşteri isteklerini alır ve bunları Gunicorn'a iletir, Gunicorn da Flask uygulamasıyla iletişim kurar. Nginx ayrıca statik dosyaların sunulmasından, SSL/TLS şifrelemesinin yönetilmesinden ve uygulamanızın birden fazla sunucuya ölçeklenmesi durumunda olası yük dengelemesinden de sorumludur.

Neden Nginx?

Dahası, NGINX, sağlam yük dengeleme yetenekleri ve tamponlama mekanizmaları sayesinde birden fazla modeli veya uygulamayı aynı anda yönetme konusunda mükemmeldir. Gunicorn birden fazla isteği işleme hızı konusunda zorluk yaşayabilirken NGINX, istekleri arabelleğe alarak bu iş yükünü verimli bir şekilde yönetebilir ve daha sorunsuz bir çalışma sağlar. Ek olarak NGINX, SSL sonlandırma, belirteç kimlik doğrulaması ve yük dengeleme gibi temel özellikleri sağlayarak Flask uygulamalarının güvenliğini sağlamak ve optimize etmek için onu vazgeçilmez kılar. Daha fazla ölçeklenebilirlik ve esneklik için Docker veya Kubernetes, NGINX'in yanı sıra entegre edilebilir ve böylece dinamik ölçeklendirme ve hizmetlerin basitleştirilmiş yönetimi sağlanır. İster AWS'de ister Kubernetes'te dağıtılmış olsun, NGINX, Flask uygulamalarını uygun ölçekte barındırmak için çok yönlü ve güçlü bir araç olmaya devam ediyor.

Ön Koşullar

Modelinizi dağıtma adımlarını kullanmadan önce aşağıdakileri anlamalı ve bunlara sahip olmalısınız.

AWS Hesabı: EC2 ve diğer AWS hizmetlerine erişmek için bir AWS hesabınızın olması gerekir. Hesabınız yoksa AWS web sitesinden bir hesaba kaydolabilirsiniz.

Uygulamanızın bir adla görünmesini istiyorsanız sunucunuzu işaret edecek şekilde yapılandırılmış bir alan adınızın olması gerekir. Bir tanesini ücretsiz olarak alabilirsiniz Freenom. Doğrudan genel IP adresini kullanacağımız için burada buna ihtiyacımız yok.

WSGI dosya spesifikasyonunun ve sunucuların, proxy'lerin ve bağlantı noktalarının anlaşılması. Biraz anlayış da yardımcı olacaktır.

Gunicorn ve Nginx ile AWS'de Flask Kullanarak Makine Öğrenimi Modelini Dağıtma

1. ADIM: Bir AWS EC2 Bulut Sunucusu kurun

İşletim sistemi olarak Ubuntu'yu kullanarak bir AWS EC2 örneğini başlatın. Bir mikro Hizmet gayet iyi çalışır. Örneğin adını duygu_analiz_sunucusu olarak tutuyoruz. Neyi beğendiğinizi seçmekte özgürsünüz. Ancak örneğin hizmet seçiminin, barındırmaya çalıştığınız uygulamanın ölçeğine bağlı olduğunu unutmayın.

AWS EC2 Bulut Sunucusu kurma

EC2'nize SSH aracılığıyla güvenli bir şekilde bağlanmak için bir anahtar çifti oluşturun. Bir EC2 bulut sunucusu oluşturduğunuzda, bir anahtar çifti belirtirsiniz ve buna karşılık gelen özel anahtar dosyası (.pem), bulut sunucusuna olan SSH bağlantınızın kimliğini doğrulamak için kullanılır. RSA tipi bir anahtar çifti kullanın ve aşağıdaki adımları izleyin.

  1. Anahtar Çifti Oluşturun: Anahtar çiftini oluşturmak için “Anahtar çifti oluştur” düğmesine tıklayın.
  2. Özel Anahtarı İndirin: Anahtar çifti oluşturulduktan sonra, yerel makinenize otomatik olarak özel bir anahtar dosyası (.pem) indirilecektir. Bu özel anahtar dosyası, EC2 bulut sunucularınıza yönelik SSH bağlantılarının kimliğini doğrular.
AWS EC2 Bulut Sunucusu kurma

Örneğinizi, bağlantı noktası ve http trafiğine izin veren güvenlik yapılandırmalarıyla başlatın. Örneğinizi başlatıp ona bağlandıktan sonra, SSH komutunu kopyalayın, böylece örneğe uzaktan erişmek için yerel terminalinize gönderebilirsiniz. Aşağıdaki resimde yeşille vurgulanan kısım, yerel/terminalinize kopyalayıp yapıştırmanız gereken kısımdır.

Örneğe Bağlan

ADIM 2: EC2 Örneğine SSH

Bilgisayarınızın terminalini açın. Özel anahtar dosyanız (.pem) bir dizinde bulunuyorsa EC2 bulut sunucunuza bağlanmak için SSH komutunu kullanırken anahtar dosyasının tam yolunu belirtmeniz gerekir. Bunu nasıl yapabileceğiniz aşağıda açıklanmıştır:

Diyelim ki anahtarınız (.pem dosyası) İndirilenler'de. Daha sonra SSH komutunuzu buraya yerleştirmeniz gerekir. Yani tek yapmanız gereken terminalinizi açmak, İndirilenler dizinine gitmek ve komutunuzu buraya yapıştırmak.

cd ~/Downloads

Şimdi örneğe benzeyen SSH komutunuzu yapıştırın: ssh -i “sentiment_analizkey.pem” [e-posta korumalı]

EC2 Örneğine SSH

ADIM 3: Gerekli Bileşenlerin Ubuntu Depolarından Kurulumu

İlk adım, gerekli tüm bileşenleri Ubuntu depolarından yüklemektir. Buna Pip'in yöneteceği Python bileşenleri ve Python paket yöneticisi de dahildir. Gunicorn bileşenlerini birleştirmek için gereken Python geliştirme dosyaları da sağlanacaktır. Python ortamınızı oluşturmanızı sağlayacak paketleri kurarken öncelikle yerel paket indeksini güncellemelisiniz.

sudo apt update 
sudp apt upgrade 

Daha sonra pip ve sanal ortamı kurmak için Python-pip komutunu kurun.

sudo apt install python3-pip
sudo apt install python3-venv

Daha sonra net stat paketini yükleyin. Net-tools paketi, aktif ağ bağlantıları, yönlendirme tabloları, arayüz istatistikleri vb. gibi ağla ilgili bilgileri görüntüler.

sudo apt net araçları yükleyin

sudo apt install net-tools

netstat tuln #after installing run this command 

Sistemdeki aktif ağ bağlantılarının ve dinleme bağlantı noktalarının bir listesini görüntüler:

Ardından güvenlik duvarı paketini yükleyin: ufw (Karmaşık Güvenlik Duvarı) paketi, Ubuntu ve diğer Debian tabanlı Linux dağıtımlarında iptables güvenlik duvarı kurallarını yönetmek için bir ön uçtur. Güvenlik duvarı kurallarını yapılandırmak için basitleştirilmiş bir arayüz sağlayarak sisteminiz için temel güvenlik duvarı korumasını ayarlamayı kolaylaştırır.

  • sudo ufw'yi etkinleştir: Güvenlik duvarını etkinleştirir.
  • Sudo ufw izin veriyor /: Bu komut, belirli bir bağlantı noktası ve protokol üzerinden gelen bağlantılara izin verir (örneğin, sudo ufw, 22/TCP'nin SSH bağlantılarını etkinleştirmesine izin verir).
  • Sudo ufw durumu: Güvenlik duvarının geçerli durumunu ve kurallarını görüntüler.
sudo apt install ufw #
sudo ufw allow 22 #ssh access
sudo ufw allow 5000  #5000 port for flask app test 

sudo ufw status 
  1. Sudo ufw 5000'e izin veriyor: Bu, 5000 numaralı bağlantı noktasında gelen bağlantılara izin verir. Varsayılan olarak bu bağlantı noktasında hem TCP hem de UDP trafiğine izin verir. Flask uygulamamızı 5000'de çalıştıracağız, dolayısıyla 5000 numaralı bağlantı noktasında çalışan Flask uygulama hizmetinin ağdan erişilebilir olması gerekiyor.
  2. Sudo ufw 22'e izin veriyor: Bu komut, 22 numaralı bağlantı noktasından gelen SSH bağlantılarını etkinleştirir. SSH, sisteminize uzaktan erişim için kullanılır ve 22 numaralı bağlantı noktasındaki bağlantılara izin vermek, sunucunuza SSH aracılığıyla güvenli bir şekilde bağlanmanızı sağlar. Bu önemli; SSH'nize uzaktan erişemeyeceğiniz için bunu kapatmamalısınız.

Adım 4: Flask Uygulamasını Dağıtın ve Uygulamayı Kurun

Flask Uygulamasını Dağıt: Flask uygulama dosyalarını EC2 örneğine aktarın. Model zaten Git Hub'daysa onu EC2 Ubuntu örneğine kopyalayın. Daha sonra yeni bir sanal ortam kurun ve gerekli Python paketlerini veya gereksinimler dosyasını pip kullanarak dizine yükleyin. Daha sonra Test Flask uygulaması EC2 ortamında doğru şekilde çalışır.

Bizim durumumuzda, son makalede bir tweet'in duygusunu analiz etmek için kullandığımız git deposunu klonluyoruz.

Ancak önce git'in kurulu olduğundan emin olun. Yüklüyse şu komutu çalıştırın: git clone -b master –single-branch https://github.com/Geek-shikha/Flask_model_sentiment_analiz.git

git --version # if this exists you need not to sudo apt install git 
git clone -b master --single-branch 
https://github.com/Geek-shikha/Flask_model_sentiment_analysis.git #same line 

#after cloning the repository go tot the directory and list all the files 
cd Flask_model_sentiment_analysis
ls 

Not: Depoyu klonladığınızda herhangi bir app.py dosyası görmezsiniz; bunun yerine ihtiyacımız olan myproject.py mevcut.

Daha önce Flask uygulamasını local olarak oluştururken oluşturduğumuz mevcut bir sanal ortam var. Hataları veya tutarsızlıkları önlemek için yeni bir sanal ortam oluşturmamız gerekiyor. Yeni sanal ortama “myprojectenv” adı verilir ve etkinleştirilmesi gerekir.

python -m venv myprojectenv #virtual env named as myprojectenv
source myprojectenv/bin/activate #activate the virtual environment

Gereksinimler.txt dosyasında saklanan Python kitaplıklarını yükleyin

pip install -r requirements.txt #install the dependencies like flask, nltk etc.

Şimdi Python Flask uygulamanızı test edin ve çalıştırın

python3 myproject.py

Bunu çalıştırdığınızda terminalde şöyle bir çıktı görebilirsiniz:

Çalışıp çalışmadığını görmek için. Web tarayıcınızda sunucunuzun IP adresini ve ardından:5000 adresini ziyaret edin. Web tarayıcınızda sunucu IP'niz http://server_pub_ip:5000 gibi 5000'dir. Diyelim ki sunucu IP'si  23.124.09.133 Sonra koy http://23.124.09.133:5000 

Adım 5: WSGI dosyası

Daha sonra uygulamanız için giriş noktası görevi görecek bir dosya oluşturun. Bu dosya Gunicorn sunucusuna uygulamayla etkileşime geçmesi talimatını verecektir.

Flask_model_sentiment_analiz klasöründe bir wsgi.py dosyası oluşturun

nano ~/Flask_model_sentiment_analysis/wsgi.py 

Bu dosyada myproject.py adını verdiğimiz uygulamamızdan Flask örneğini içe aktarın ve çalıştırın:

from myproject import app

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

Herhangi bir hata varsa sudo apt ve unicorn'u da yükleyebilirsiniz.

Adım 6: Gunicorn Yapılandırması

Gunicorn'u yapılandırarak ve wsgi uygulamasını 5000 numaralı bağlantı noktasına bağlayarak başlayalım

unicorn yapılandırma komutu, herhangi bir IP adresinden 5000 numaralı bağlantı noktasındaki gelen bağlantıları dinleyen ve wsgi.py dosyasında tanımlanan app adlı WSGI uygulamasına hizmet eden bir Gunicorn sunucusunu başlatır.

gunicorn --bind 0.0.0.0:5000 wsgi:app

Çıktı:

Çalışıp çalışmadığını kontrol edin. Web tarayıcınızda sunucunuzun IP adresini ve ardından:5000 adresini ziyaret edin: Web tarayıcınızda sunucunuzun IP adresi 5000'dir, örneğin http://server_pub_ip:5000; diyelim ki sunucu IP'si  23.124.09.133 Sonra koy http://23.124.09.133:5000 

Size şöyle bir çıktı vermelidir:

Doğru yanıtı alırsanız hizmeti durdurun; ctrl+c tuşlarına basıp ardından komut vererek sanal ortamınızı devre dışı bırakabilirsiniz. Daha sonra sistem ve servis birimi dosyasını oluşturun. Bu eylem, Ubuntu'nun başlatma sisteminin Gunicorn'u otomatik olarak başlatmasını ve sunucu önyüklemesi sırasında Flask uygulamasını barındırmasını sağlayacaktır.

sudo nano /etc/systemd/system/myproject.service

Aşağıdaki içeriği ekleyin:

[Unit]
Description=Gunicorn instance to serve myproject
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/Flask_model_sentiment_analysis
Environment="PATH=/ubuntu/Flask_model_sentiment_analysis/myprojectenv/bin"
ExecStart=/home/ubuntu/Flask_model_sentiment_analysis/myprojectenv/bin/gunicorn 
--workers 3 --bind unix:myproject.sock -m 007 w>
[Install]
WantedBy=multi-user.target
  • [Birim]: Bu bölüm, üniteye ilişkin meta verileri ve bağımlılıkları belirtir.
  • Açıklama: Hizmeti anlatır.
  • = Network.target sonra: Bu ünitenin ağ açıldıktan sonra başladığını, servis başlamadan önce ağ bağlantısının sağlandığını belirtir.
  • [Hizmet]: Bu bölüm hizmetin parametrelerini tanımlar.
  • Kullanıcı=ubuunit: Hizmetin altında çalışması gereken kullanıcı hesabını belirtir.
  • Grup=www-verileri: Hizmetin grubunu ayarlar.
  • Çalışma dizini: Hizmetin çalışma dizinini belirtir.
  • Environment=”PATH=/ubuntu/Flask_model_sentiment_analiz/myprojectenv/bin”: Bu değişken, PATH değişkenini sanal ortamın ikili dizinini içerecek şekilde açıkça ayarlayarak hizmetin ortam değişkenlerini tanımlar.
  • YürütmeBaşlangıcı: Hizmeti başlatmak için komutu belirtir. Bu durumda Gunicorn'u belirli seçeneklerle başlatır:
  • –işçiler 3: Gunicorn'u üç çalışan sürecini kullanacak şekilde yapılandırır.
  • –bind unix: projem.sock: Gunicorn'un web sunucusuyla (örn. Nginx veya Apache) iletişim kuracağı soket dosyasını belirtir.
  • -m 007: Gunicorn tarafından oluşturulan dosyaların izinlerini kontrol ederek maskeyi 007'ye ayarlar.
  • wsgi:app: Hizmet verilecek WSGI uygulamasının konumunu belirtir.
  • [Düzenlemek]: Bu bölüm ünitenin kurulum bilgilerini tanımlar.
  • WantedBy=çok kullanıcılı.hedef: Bu birimin kurulması gereken hedefi belirtir. Bu durumda çoklu kullanıcı olarak ayarlanmıştır. Kullanıcı sistemleri için standart bir hedef olan Target, sistem önyüklemesi sırasında hizmetin otomatik olarak başlaması gerektiğini belirtir.

Özetle, bu sistem birimi dosyası Gunicorn'u belirli konfigürasyonlarla bir Flask uygulamasına hizmet verecek şekilde ayarlar ve hizmetin sistem önyüklemesi üzerine otomatik olarak başlatılmasını sağlar.

Oluşturduğunuz Gunicorn hizmetini başlatma ve açılışta başlaması için etkinleştirme zamanı:

sudo systemctl start myproject
sudo systemctl enable myproject
sudo systemctl status myproject#check the status of your service file for errors, ifany

 Komut direnirse, "sudo systemctl daemon-reload" komutunu yeniden yüklemek için bunu kullanın.

Her adımı takip ettiyseniz hiçbir hata olmamalıdır; ancak hata devam ederse hatayı çözün. Hizmet dosyasının yolunda veya ortamında bir hata olabilir. Dikkatlice kontrol et

Adım 7: NGINX'i Kurun ve Yapılandırın

Gunicorn uygulama sunucusu çalışır durumda ve proje dizinindeki soket dosyası aracılığıyla istekleri bekliyor. Şimdi Nginx'i, yapılandırma dosyasında küçük değişiklikler yaparak web isteklerini bu sokete yönlendirecek şekilde yapılandıracağız. Bunun için öncelikle nginx kurmamız gerekiyor

sudo apt install nginx

Nginx'in mevcut siteler dizini içinde yeni bir sunucu bloğu yapılandırma dosyası oluşturarak başlayın. Kafanızın karışmaması için bu dosyaya “proje” adını verin. Daha önce myproject.py adını kullanıyorduk

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

İçeriği, belirtilen sunucu IP adresine gelen HTTP isteklerinin Unix soket dosyası aracılığıyla Gunicorn uygulama sunucusuna iletilmesini sağlayan Nginx sunucu blok yapılandırmasına sahip dosyaya eklemek, Flask uygulamasının istekleri işlemesine olanak tanır. Dosyayı kaydedin ve düzenleyiciden çıkın.

server {
    listen 80;
    server_name 3.110.196.110; #your server public ip 

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/Flask_model_sentiment_analysis/myproject.sock;
    }
}
  • Sunucu {… }: Bu blok, Nginx içindeki bir sunucu yapılandırmasını tanımlar. Belirli bir sunucuya yönelik istekleri işlemek için yapılandırma ayarlarını kapsar.
  • Dinle 80: Bu yönerge, Nginx'in, HTTP trafiği için varsayılan bağlantı noktası olan 80 numaralı bağlantı noktasından gelen HTTP isteklerini dinlemesi gerektiğini belirtir.
  • sunucu_adı 3.110.196.110: Bu yönerge sunucunun ana bilgisayar adını veya IP adresini ayarlar. Bu durumda, sunucunuzun genel IP adresiyle değiştirilmesi gereken 3.110.196.110 olarak ayarlanmıştır.
  • Konum / { … }: Bu blok, Nginx'in sunucunun kök dizini / için istekleri nasıl ele alması gerektiğini tanımlar.
  • Proxy_params'ı dahil et: Bu yönerge proxy_params dosyasından yapılandırma ayarlarını sağlar. Bu ayarlar genellikle proxy üstbilgileri gibi proxy ile ilgili yapılandırmaları içerir.
  • proxy_pass http://unix:/home/ubuntu/Flask_model_sentiment_analiz/myproject.sock: Bu yönerge, Nginx'in gelen istekleri /home/ubuntu/Flask_model_sentiment_analiz/myproject.sock konumunda bulunan belirtilen Unix soket dosyasına iletmesi gerektiğini belirtir. Gunicorn'un istekleri dinlediği yer burasıdır. Nginx, istekleri Gunicorn'a ileterek ve yanıtları müşteriye geri göndererek ters bir vekil görevi görecek.

Şimdi etkinleştirin ve hataları test edin

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t
  • sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled: Bu komut, sitelerin etkin olduğu dizinde projem adında, sitelerin kullanılabilir olduğu dizinde bulunan yapılandırma dosyasına işaret eden sembolik bir bağlantı oluşturur. Bunu yaparak projeniz için sunucu bloğu yapılandırmasını etkinleştirirsiniz.
  • Sudo nginx -t: Bu komut, Nginx yapılandırmasını sözdizimi hataları açısından test eder. Yeni etkinleştirilen projem sunucu bloğu da dahil olmak üzere Nginx yapılandırma dosyalarının doğru şekilde yazılıp yazılmadığını ve geçerli olup olmadığını kontrol eder. Herhangi bir hata varsa, bu test sırasında rapor edilecektir.

Yapılandırmaları güncellediğimiz için nginx'i yeniden başlatın

sudo systemctl restart nginx

nginx için güvenlik duvarını güncelleme

sudo ufw allow 'Nginx Full'

5000 bağlantı noktasına ihtiyacımız olmadığı için “sudo ufw deleteallow 5000” komutunu kullanarak devre dışı bırakabiliriz ancak 22 numaralı bağlantı noktasını devre dışı bırakmamıza gerek yoktur.

Şimdi web tarayıcınızda sunucunuzun alan adına (veya IP adresine) gidin; çıktıyı göreceksiniz:

Eğer 502 ağ geçidi gibi bir hata görüyorsanız bazı izinleri değiştirmeniz gerekmektedir. Komutu kullanın

sudo chmod 755 /home/ubuntu

Ayrıca uygulama için sunucunuzu test ederken, uygulama güvenli olmadığından https değil http://….. kullanmalısınız.

Hatalar varsa bunları aşağıdaki gibi komutlarla kontrol edebilirsiniz:

Adım 7: NGINX'i Kurun ve Yapılandırın

Hizmeti durdurmak istiyorsanız şu komutu kullanabilirsiniz:

sudo systemctl stop nginx #stop the service 
sudo systemctl start nginx# to start the service 

Başvuruyu Güvenceye Almak İçin Diğer Adımlar

Uygulamayı güvence altına almak için başka adımlar da vardır.  

İstemciler ve sunucu arasında güvenli iletişim için HTTPS'yi etkinleştirin. Bir SSL/TLS sertifikası edinin (örn. Let's Encrypt) ve NGINX'i bunu kullanacak şekilde yapılandırın. Uygulamanın güvenliğini sağlamak için Certbot'u kullanabiliriz.

Web sunucunuzu Certbot kullanarak SSL/TLS ile güvence altına almak için genellikle kayıtlı bir alan adına ihtiyacınız vardır. Certbot, sertifikayı vermeden önce alan adının sahipliğini doğruladığından, SSL sertifikaları vermek için bir alan adı gerektirir. Alan adı yerine genel IP adresini kullanmak teknik olarak mümkün olsa da, çeşitli nedenlerden dolayı önerilmez. Bunlardan biri, Sertifika Yetkilisi (CA) Gereksinimleridir: Let's Encrypt (Certbot'un kullandığı) gibi Sertifika Yetkililerinin (CA'lar), alan adı doğrulaması gerektiren politikaları vardır. IP adresleri için SSL sertifikası vermezler.

Güvenliğini sağlamak istiyorsanız sudo apt install python3-certbot-nginx'i kullanabilir ve belgelerinde bunun hakkında daha fazla bilgi edinebilirsiniz.

Sonuç

Bu yazımızda Python sanal ortamında temel bir Flask uygulaması oluşturduk. WSGI özellikli herhangi bir uygulama sunucusuyla uyumluluğu sağlayan bir WSGI giriş noktası oluşturduk ve ardından Gunicorn'u bu rolü yerine getirecek şekilde yapılandırdık. Daha sonra, sistem önyüklemesinde uygulama sunucusunu otomatik olarak başlatmak için bir sistem hizmet dosyası hazırladık. Ayrıca, web istemcisi trafiğini uygulama sunucusuna yönlendirmekten, harici istekleri etkili bir şekilde iletmekten ve sunucu trafiğini Let's Encrypt şifrelemesiyle korumaktan sorumlu bir Nginx sunucu bloğu oluşturdunuz.

spot_img

En Son İstihbarat

spot_img