Flask Uygulamalarını Gunicorn ve Nginx ile Ubuntu 16.04 Üzerinde Dağıtma Rehberi
Giriş
Modern web uygulamaları geliştirirken, geliştirme sürecinin yanı sıra uygulamanın güvenli, verimli ve ölçeklenebilir bir şekilde sunulması da büyük önem taşır. Python tabanlı mikro web çerçevesi Flask, esnekliği ve hafif yapısıyla popülerliğini korurken, üretim ortamında doğrudan kullanıma uygun değildir. Flask gibi WSGI (Web Server Gateway Interface) uygulamalarını üretimde çalıştırmak için bir WSGI sunucusuna (örneğin Gunicorn) ve kullanıcı isteklerini yönlendiren, statik dosyaları sunan ve yük dengeleme gibi görevleri üstlenen bir ters proxy sunucusuna (örneğin Nginx) ihtiyaç duyarız. Bu rehberde, Flask uygulamanızı Ubuntu 16.04 işletim sistemi üzerinde Gunicorn ve Nginx kullanarak nasıl dağıtacağınızı adım adım detaylı bir şekilde açıklayacağız.
Ubuntu 16.04, uzun süreli destek (LTS) sağlayan ve birçok kurumsal ortamda hala kullanılan stabil bir işletim sistemi sürümüdür. Bu rehber, eski sistemlerde veya belirli bir LTS sürümüne bağlı kalmak zorunda olan projelerde Flask uygulamalarını başarıyla çalıştırmak isteyen geliştiriciler ve sistem yöneticileri için kapsamlı bir kaynak olmayı hedeflemektedir.
Bu kurulum, uygulamanızın aşağıdaki avantajlara sahip olmasını sağlayacaktır:
* Performans: Nginx, statik dosyaları hızlı bir şekilde sunar ve Gunicorn, Python uygulamanızın birden fazla sürecini yöneterek eşzamanlı istekleri daha verimli işler.
* Güvenlik: Nginx, doğrudan uygulama sunucusu yerine bir aracı görevi görerek uygulamanızı dış dünyaya karşı korur.
* Güvenilirlik: Systemd, Gunicorn sürecini yöneterek uygulamanızın otomatik olarak başlatılmasını ve çöktüğünde yeniden başlatılmasını sağlar.
* Ölçeklenebilirlik: Bu mimari, gelecekte uygulamanızın yükünü dengelemek veya daha fazla sunucu eklemek için temel oluşturur.
Ön Koşullar
Bu rehbere başlamadan önce aşağıdaki maddelerin hazır olduğundan emin olmalısınız:
* Ubuntu 16.04 Kurulu Bir Sunucu: SSH erişimine sahip, güncel ve çalışan bir Ubuntu 16.04 sunucusu gereklidir. DigitalOcean, AWS, Google Cloud veya herhangi bir sanal özel sunucu (VPS) sağlayıcısından temin edebilirsiniz.
* Sudo Yetkilerine Sahip Bir Kullanıcı: Sunucuda sudo komutunu kullanabilen, root olmayan bir kullanıcı hesabına sahip olmalısınız. Güvenlik nedenleriyle root kullanıcısı olarak doğrudan çalışmaktan kaçınılmalıdır.
* Temel Linux Komut Bilgisi: cd, ls, mkdir, nano gibi temel Linux komutlarına aşina olmanız, kurulum sürecini kolaylaştıracaktır.
* Alan Adı (İsteğe Bağlı ama Önerilir): Uygulamanıza bir alan adı (örneğin example.com) üzerinden erişmek istiyorsanız, alan adınızın sunucunuzun IP adresine yönlendirilmiş olması gerekir. Aksi takdirde, sunucunuzun IP adresi üzerinden erişim sağlayabilirsiniz.
Adım 1: Sistem Güncelleme ve Temel Bağımlılıkları Kurma
Herhangi bir yeni kuruluma başlamadan önce, sunucunuzdaki paket listesini güncellemek ve mevcut paketleri en son sürümlerine yükseltmek iyi bir uygulamadır. Bu, olası güvenlik açıklarını kapatır ve en güncel yazılım sürümlerini kullanmanızı sağlar.
SSH üzerinden sunucunuza bağlandıktan sonra aşağıdaki komutları çalıştırın:
sudo apt update
sudo apt upgrade -y
Ardından, Flask uygulamamızın ve Gunicorn’ın düzgün çalışması için gerekli olabilecek bazı temel geliştirme araçlarını ve Python bağımlılıklarını kurmalıyız. Ayrıca Nginx’i de bu adımda kurabiliriz.
sudo apt install -y build-essential python-dev python-pip nginx
* build-essential: Derleme araçları, bazı Python paketleri için gereklidir.
* python-dev: Python başlık dosyaları, C uzantıları derlenirken ihtiyaç duyulur.
* python-pip: Python paket yöneticisi. Ubuntu 16.04’te genellikle Python 2’nin pip‘ini kurarız, ancak daha sonra Python 3 için de pip3‘ü kuracağız.
* nginx: Ters proxy sunucumuz.
Adım 2: Python Ortamını Hazırlama
Ubuntu 16.04 varsayılan olarak Python 2 ile gelir ve sistemin bazı bileşenleri bu sürüme bağımlıdır. Bu nedenle, Flask uygulamamızı Python 3 üzerinde çalıştırmak ve sistem Python’unu etkilememek için sanal ortam (virtual environment) kullanmak en iyi yaklaşımdır.
Python 3 Kurulumu
Eğer sunucunuzda Python 3 yüklü değilse, aşağıdaki komutla kurabilirsiniz:
sudo apt install -y python3 python3-pip
Bu komut, Python 3 yorumlayıcısını ve Python 3 için pip paket yöneticisini kuracaktır.
Sanal Ortam Oluşturma
Uygulamamız için özel bir dizin oluşturalım ve bu dizin içinde bir sanal ortam kuralım. Bu, uygulamanızın bağımlılıklarını sistem genelindeki Python paketlerinden izole etmenizi sağlar.
sudo mkdir -p /var/www/myflaskapp
sudo chown -R $USER:$USER /var/www/myflaskapp
cd /var/www/myflaskapp
* sudo mkdir -p /var/www/myflaskapp: Flask uygulamamız için /var/www dizini altında myflaskapp adında bir dizin oluşturur. -p parametresi, üst dizinler mevcut değilse onları da oluşturur.
* sudo chown -R $USER:$USER /var/www/myflaskapp: Bu komut, oluşturduğumuz myflaskapp dizininin sahipliğini mevcut kullanıcımıza verir. Bu sayede, sudo kullanmadan bu dizin içinde dosya oluşturabilir ve değiştirebiliriz. $USER ortam değişkeni, mevcut kullanıcı adınızı temsil eder.
* cd /var/www/myflaskapp: Çalışma dizinimizi Flask uygulamamızın kök dizinine değiştiririz.
Şimdi bu dizin içinde bir sanal ortam oluşturalım ve etkinleştirelim:
python3 -m venv venv
source venv/bin/activate
* python3 -m venv venv: venv modülünü kullanarak venv adında bir sanal ortam oluşturur.
* source venv/bin/activate: Sanal ortamı etkinleştirir. Komut satırınızın başında (venv) ifadesini görmelisiniz. Bu, artık sanal ortamın aktif olduğunu ve pip ile kuracağınız paketlerin bu ortama yükleneceğini gösterir.
Adım 3: Flask Uygulamasını Oluşturma
Basit bir Flask uygulaması oluşturalım. Bu uygulama, web tarayıcısından erişildiğinde basit bir “Merhaba Dünya!” mesajı döndürecektir.
Öncelikle, Flask’ı sanal ortamımıza kuralım:
pip install Flask
Şimdi Flask uygulamamızın kodunu içeren bir dosya (app.py) oluşturalım:
nano app.py
Aşağıdaki içeriği app.py dosyasına yapıştırın:
from flask import Flask, send_from_directory
import os
app = Flask(__name__)
Statik dosyalar için bir örnek dizin oluşturalım
Bu dizin Nginx tarafından sunulacak
@app.route('/static/')
def static_files(filename):
return send_from_directory('static', filename)
@app.route('/')
def hello_world():
return 'Merhaba Dünya! Flask Uygulamam Gunicorn ve Nginx ile Çalışıyor!'
if __name__ == '__main__':
app.run(debug=True)
* from flask import Flask, send_from_directory: Flask sınıfını ve statik dosyaları sunmak için send_from_directory fonksiyonunu içe aktarırız.
* app = Flask(__name__): Bir Flask uygulaması örneği oluştururuz.
* @app.route('/'): Kök URL’ye (/) gelen istekleri hello_world fonksiyonuna yönlendirir.
* hello_world(): Basit bir metin döndüren fonksiyon.
* @app.route('/static/: /static/ ile başlayan URL’ler için bir rota tanımlar. Bu rota, Nginx’in statik dosyaları sunmasını sağlayacak şekilde ayarlanacak olsa da, geliştirme sırasında veya Nginx yapılandırmasında bir sorun olması durumunda Flask’ın da statik dosyaları sunabilmesi için bir yedek mekanizma olarak eklendi.
* if __name__ == '__main__': app.run(debug=True): Bu kısım, uygulamayı doğrudan Python ile çalıştırdığınızda (örneğin python app.py) geliştirme sunucusunu başlatır. Üretim ortamında Gunicorn kullanacağımız için bu kısım çalışmayacaktır.
Statik dosyalar için bir dizin oluşturalım ve içine örnek bir dosya koyalım. Bu, Nginx’in statik dosyaları doğru bir şekilde sunup sunmadığını test etmemize yardımcı olacaktır.
mkdir static
echo "Bu bir statik dosya testidir." > static/test.txt
Flask uygulamamızın bağımlılıklarını requirements.txt dosyasına kaydedelim. Bu, gelecekte uygulamayı başka bir ortamda kurarken veya dağıtırken kolaylık sağlar.
pip freeze > requirements.txt
Şimdi sanal ortamdan çıkabiliriz:
deactivate
Adım 4: Gunicorn’ı Kurma ve Yapılandırma
Gunicorn (Green Unicorn), bir WSGI HTTP sunucusudur ve Flask uygulamanız ile Nginx arasında bir köprü görevi görür. Gunicorn, birden fazla Python sürecini yöneterek uygulamanızın aynı anda birden fazla isteği işlemesini sağlar.
Gunicorn Kurulumu
Öncelikle tekrar sanal ortamımızı etkinleştirelim ve Gunicorn’ı kuralım:
cd /var/www/myflaskapp
source venv/bin/activate
pip install gunicorn
Uygulamayı Gunicorn ile Test Etme
Gunicorn’ın Flask uygulamanızı doğru bir şekilde başlatıp başlatmadığını test edelim:
gunicorn --bind 0.0.0.0:5000 app:app
* --bind 0.0.0.0:5000: Gunicorn’ın tüm ağ arayüzlerinde (0.0.0.0) 5000 numaralı porttan gelen bağlantıları dinlemesini söyler.
* app:app: İlk app, Flask uygulamanızın kodunu içeren Python modülünün adıdır (app.py). İkinci app ise bu modül içindeki Flask uygulama nesnesinin adıdır (yani app = Flask(__name__) ile oluşturduğumuz app değişkeni).
Bu komutu çalıştırdıktan sonra, web tarayıcınızdan sunucunuzun IP adresini ve 5000 portunu (örneğin http://your_server_ip:5000) ziyaret ederek uygulamanızın çalıştığını doğrulayabilirsiniz. Testi tamamladığınızda CTRL+C tuş kombinasyonu ile Gunicorn’ı durdurun.
Gunicorn için Systemd Servisi Oluşturma
Uygulamamızın sunucu yeniden başlatıldığında otomatik olarak başlaması ve bir hata durumunda yeniden başlatılması için Gunicorn’ı bir systemd servisi olarak yapılandırmamız gerekir. systemd, modern Linux dağıtımlarında sistem ve servis yöneticisidir.
Gunicorn’ı bir socket dosyası üzerinden Nginx’e bağlayacağız. Bu, ağ portu kullanmaktan daha güvenli ve performanslı bir yöntemdir.
sudo nano /etc/systemd/system/myflaskapp.service
Aşağıdaki içeriği myflaskapp.service dosyasına yapıştırın:
[Unit]
Description=Gunicorn instance to serve myflaskapp
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/myflaskapp
Environment="PATH=/var/www/myflaskapp/venv/bin"
ExecStart=/var/www/myflaskapp/venv/bin/gunicorn --workers 3 --bind unix:/var/www/myflaskapp/myflaskapp.sock -m 007 app:app
Restart=always
[Install]
WantedBy=multi-user.target
* [Unit] Bölümü:
* Description: Servisin kısa bir açıklamasını sağlar.
* After=network.target: Servisin ağ servisi başlatıldıktan sonra başlamasını sağlar.
* [Service] Bölümü:
* User=www-data: Gunicorn sürecinin hangi kullanıcı altında çalışacağını belirtir. www-data genellikle web sunucusu süreçleri için kullanılan standart bir kullanıcıdır.
* Group=www-data: Gunicorn sürecinin hangi grup altında çalışacağını belirtir.
* WorkingDirectory: Uygulamanızın kök dizinini belirtir. Gunicorn bu dizinde çalışacaktır.
* Environment="PATH=/var/www/myflaskapp/venv/bin": Gunicorn’ın sanal ortamdaki Python ve Gunicorn ikilisine erişebilmesi için PATH değişkenini ayarlar.
* ExecStart: Servis başlatıldığında çalıştırılacak komutu belirtir.
* /var/www/myflaskapp/venv/bin/gunicorn: Sanal ortamdaki Gunicorn yürütülebilir dosyasının tam yolu.
--workers 3: Gunicorn’ın 3 adet worker (çalışan) süreci başlatmasını söyler. Bu sayı genellikle (2 CPU Çekirdek Sayısı) + 1 formülüyle belirlenir, ancak sunucunuzun kaynaklarına göre ayarlamanız gerekebilir.
* --bind unix:/var/www/myflaskapp/myflaskapp.sock: Gunicorn’ın bir TCP portu yerine bir Unix soket dosyası üzerinden dinlemesini sağlar. Bu dosya, Nginx ile iletişim kurmak için kullanılacaktır.
* -m 007: Oluşturulan soket dosyasının izinlerini ayarlar. 007 izni, soket dosyasının sahibi (root) ve grup (www-data) tarafından tam erişime sahip olmasını, diğerlerinin ise yalnızca yürütme iznine sahip olmasını sağlar. Bu, Nginx’in soket dosyasına erişebilmesi için önemlidir.
* app:app: Flask uygulamanızın modül ve uygulama nesnesi.
* Restart=always: Gunicorn süreci herhangi bir nedenle çökerse veya durursa, systemd‘nin onu otomatik olarak yeniden başlatmasını sağlar.
* [Install] Bölümü:
* WantedBy=multi-user.target: Servisin sistem çok kullanıcılı moda geçtiğinde etkinleştirilmesini sağlar (yani normal önyükleme sırasında).
Dosyayı kaydedip kapatın (CTRL+X, Y, Enter).
Şimdi systemd‘ye yeni servisimizi tanıtmak için yapılandırmayı yeniden yükleyelim, servisi başlatalım ve sunucu açılışında otomatik başlaması için etkinleştirelim:
sudo systemctl daemon-reload
sudo systemctl start myflaskapp
sudo systemctl enable myflaskapp
Servisin durumunu kontrol ederek doğru bir şekilde çalışıp çalışmadığını doğrulayabilirsiniz:
sudo systemctl status myflaskapp
Çıktıda Active: active (running) mesajını görmelisiniz. Ayrıca, Gunicorn’ın soket dosyasını oluşturup oluşturmadığını kontrol edelim:
ls -l /var/www/myflaskapp/myflaskapp.sock
Bu komut, myflaskapp.sock dosyasının varlığını ve izinlerini göstermelidir.
Sanal ortamdan çıkmayı unutmayın:
deactivate
Adım 5: Nginx’i Yapılandırma
Nginx, kullanıcı isteklerini dinleyecek, statik dosyaları sunacak ve gelen istekleri Gunicorn tarafından yönetilen Flask uygulamanıza ters proxy olarak yönlendirecektir.
Nginx Sanal Host Dosyası Oluşturma
Nginx, sitelerin yapılandırmalarını /etc/nginx/sites-available/ dizininde tutar. Bu dizinde yeni bir yapılandırma dosyası oluşturalım:
sudo nano /etc/nginx/sites-available/myflaskapp
Aşağıdaki içeriği myflaskapp dosyasına yapıştırın. your_domain.com ve www.your_domain.com kısımlarını kendi alan adınızla veya sunucunuzun IP adresiyle değiştirmeniz gerektiğini unutmayın. Eğer bir alan adınız yoksa, sadece IP adresinizi kullanabilirsiniz.
server {
listen 80;
server_name your_domain.com www.your_domain.com; # Kendi alan adınızı veya IP adresinizi buraya yazın
location / {
include proxy_params;
proxy_pass http://unix:/var/www/myflaskapp/myflaskapp.sock;
}
location /static {
alias /var/www/myflaskapp/static; # Flask uygulamanızın statik dosyalarının olduğu dizin
}
}
* listen 80;: Nginx’in HTTP istekleri için 80 numaralı portu dinlemesini sağlar.
* server_name your_domain.com www.your_domain.com;: Bu sunucu bloğunun hangi alan adları için geçerli olduğunu belirtir. İsteklerin geldiği Host başlığı bu değerlerle eşleşmelidir.
* location / { ... }: Kök URL’ye (veya eşleşen herhangi bir URL’ye) gelen istekler için yapılandırma bloğu.
* include proxy_params;: Nginx’in ters proxy olarak çalışması için gerekli olan standart proxy başlıklarını içerir (örneğin X-Forwarded-For, X-Real-IP). Bu dosya genellikle /etc/nginx/proxy_params yolunda bulunur.
* proxy_pass http://unix:/var/www/myflaskapp/myflaskapp.sock;: Gelen istekleri Gunicorn’ın dinlediği Unix soket dosyasına yönlendirir. http://unix: öneki, Nginx’e bir Unix soketi üzerinden iletişim kurulacağını belirtir.
* location /static { ... }: /static/ ile başlayan URL’lere gelen istekler için özel bir yapılandırma bloğu.
* alias /var/www/myflaskapp/static;: Nginx’in /static/ URL’sine gelen istekleri doğrudan /var/www/myflaskapp/static dizinindeki dosyalara yönlendirmesini sağlar. Bu, Nginx’in statik dosyaları doğrudan sunarak Flask uygulamanızın yükünü hafifletmesini ve daha hızlı yanıt vermesini sağlar.
Dosyayı kaydedip kapatın.
Yapılandırmayı Etkinleştirme
Yeni Nginx yapılandırma dosyamızı etkinleştirmek için, sites-available dizininden sites-enabled dizinine bir sembolik bağlantı (symlink) oluşturmalıyız:
sudo ln -s /etc/nginx/sites-available/myflaskapp /etc/nginx/sites-enabled
Ayrıca, Nginx’in varsayılan yapılandırma dosyasını devre dışı bırakmak iyi bir uygulamadır, aksi takdirde çakışmalar yaşanabilir:
sudo rm /etc/nginx/sites-enabled/default
Nginx Yapılandırma Testi ve Yeniden Başlatma
Değişiklikleri uygulamadan önce Nginx yapılandırmanızın sözdizimsel olarak doğru olup olmadığını test etmek çok önemlidir:
sudo nginx -t
Eğer her şey yolundaysa, test is successful veya syntax is ok gibi bir mesaj görmelisiniz. Herhangi bir hata varsa, nano /etc/nginx/sites-available/myflaskapp komutuyla dosyanızı tekrar açıp düzeltmeniz gerekir.
Yapılandırma testi başarılı olduktan sonra, Nginx servisini yeniden başlatın ki yeni yapılandırmayı yüklesin:
sudo systemctl restart nginx
Nginx servisinin durumunu kontrol ederek doğru bir şekilde çalıştığını doğrulayın:
sudo systemctl status nginx
Çıktıda Active: active (running) mesajını görmelisiniz.
Adım 6: Güvenlik Duvarı Ayarları
Ubuntu 16.04’te varsayılan güvenlik duvarı olan UFW (Uncomplicated Firewall) genellikle etkindir. Nginx’in web isteklerini alabilmesi için HTTP (port 80) trafiğine izin vermemiz gerekir.
Öncelikle UFW’nin durumunu kontrol edelim:
sudo ufw status
Eğer UFW etkinse, Nginx için HTTP profiline izin verin:
sudo ufw allow 'Nginx HTTP'
Eğer UFW etkin değilse ve etkinleştirmek istiyorsanız (şiddetle tavsiye edilir):
sudo ufw enable
y yazıp Enter tuşuna basarak onaylayın.
Tekrar sudo ufw status komutunu çalıştırarak kuralların uygulandığını doğrulayabilirsiniz. Çıktıda Nginx HTTP kuralının ALLOW olarak listelendiğini görmelisiniz.
Adım 7: Uygulamayı Test Etme
Artık tüm bileşenler kuruldu ve yapılandırıldı. Web tarayıcınızı açın ve sunucunuzun alan adını (örneğin http://your_domain.com) veya IP adresini (örneğin http://your_server_ip) ziyaret edin.
Eğer her şey doğru yapılandırıldıysa, Flask uygulamanızdan gelen “Merhaba Dünya! Flask Uygulamam Gunicorn ve Nginx ile Çalışıyor!” mesajını görmelisiniz.
Ayrıca statik dosyamızı da test edelim: http://your_domain.com/static/test.txt adresine giderek “Bu bir statik dosya testidir.” mesajını görmelisiniz. Bu, Nginx’in statik dosyaları doğru bir şekilde sunduğunu gösterir.
Ek Hususlar ve İyileştirmeler
Uygulamanızı başarıyla dağıtmış olsanız da, üretim ortamında dikkate almanız gereken bazı ek noktalar ve iyileştirmeler bulunmaktadır:
HTTPS (SSL/TLS) Kurulumu
Web sitenizin güvenliğini sağlamak için HTTPS kullanmak kritik öneme sahiptir. Let’s Encrypt, ücretsiz SSL/TLS sertifikaları sağlayan popüler bir servistir. Certbot aracı ile Nginx üzerinde Let’s Encrypt sertifikalarını kolayca kurabilirsiniz.
sudo apt install certbot python-certbot-nginx
sudo certbot --nginx -d your_domain.com -d www.your_domain.com
Bu komutlar, Certbot’u kuracak ve Nginx yapılandırmanızı otomatik olarak HTTPS’ye geçirecektir. Sertifikalarınızın otomatik olarak yenilenmesi için de gerekli cron job’ları ayarlayacaktır.
Statik Dosyalar ve Medya Dosyaları
Uygulamanızın daha fazla statik dosyası (CSS, JS, resimler) veya kullanıcı tarafından yüklenen medya dosyaları varsa, Nginx’in bunları doğrudan sunmasını sağlamak en verimli yoldur. location /static bloğuna benzer şekilde, farklı dizinler için de location blokları tanımlayabilirsiniz. Örneğin, kullanıcı tarafından yüklenen resimler için /var/www/myflaskapp/media dizinine işaret eden bir /media konumu ekleyebilirsiniz.
Hata Ayıklama ve Loglama
Uygulamanızın veya sunucunuzun sorunlarını gidermek için log dosyalarını kontrol etmek önemlidir:
* Gunicorn Logları: Gunicorn logları genellikle journalctl -u myflaskapp komutuyla veya systemd servisi yapılandırmanıza göre /var/log/myflaskapp.log gibi bir dosyaya yazılabilir.
* Nginx Logları: Nginx erişim logları /var/log/nginx/access.log ve hata logları /var/log/nginx/error.log dizininde bulunur. Bu loglar, gelen istekler, HTTP durum kodları ve olası Nginx yapılandırma sorunları hakkında bilgi sağlar.
Çalışan Sayısı (Workers) Ayarı
Gunicorn’ın ExecStart komutundaki --workers parametresi, uygulamanızın kaç eşzamanlı isteği işleyebileceğini belirler. Bu değeri sunucunuzun CPU çekirdek sayısına ve uygulamanızın bellek kullanımına göre optimize etmelisiniz. Genellikle (2 * CPU Çekirdek Sayısı) + 1 formülü başlangıç noktası olarak kullanılır.
Domain ve DNS Ayarları
Eğer bir alan adı kullanıyorsanız, alan adınızın DNS kayıtlarının (A kaydı) sunucunuzun IP adresini işaret ettiğinden emin olun. Bu ayarlar genellikle alan adı sağlayıcınızın kontrol panelinden yapılır.
Sürekli Entegrasyon/Sürekli Dağıtım (CI/CD)
Uygulamanızı düzenli olarak güncelliyorsanız, dağıtım sürecini otomatikleştirmek için CI/CD araçları (örneğin Jenkins, GitLab CI/CD, GitHub Actions) kullanmayı düşünebilirsiniz. Bu, manuel hataları azaltır ve dağıtım hızını artırır.
Sonuç
Bu rehberde, Flask uygulamanızı Ubuntu 16.04 üzerinde Gunicorn ve Nginx kullanarak nasıl güvenli, verimli ve ölçeklenebilir bir şekilde dağıtacağınızı adım adım öğrendiniz. Flask’ın hafif yapısı, Gunicorn’ın güçlü WSGI sunucusu yetenekleri ve Nginx’in ters proxy ve statik dosya sunma kabiliyetleri bir araya geldiğinde, Python tabanlı web uygulamaları için sağlam bir dağıtım çözümü sunar.
Kurulum sürecinde sistem güncellemelerinden başlayarak, Python sanal ortamı oluşturmaya, basit bir Flask uygulaması yazmaya, Gunicorn’ı systemd servisi olarak yapılandırmaya ve son olarak Nginx’i ters proxy olarak ayarlamaya kadar her adımı detaylıca inceledik. Ayrıca, uygulamanızın üretim ortamında daha da güçlendirilmesi için güvenlik duvarı ayarları, HTTPS kurulumu, loglama ve performans optimizasyonları gibi ek hususlara da değindik.
Bu mimari, uygulamanızın performansını artırırken, aynı zamanda bakımı kolay ve gelecekteki büyümelere açık bir temel sağlar. Artık Flask uygulamalarınızı güvenle yayınlayabilir ve kullanıcılarınıza sunabilirsiniz.