NGINX ve Gunicorn ile FastAPI uygulaması nasıl güvenli bir şekilde kurulur?

Estimated read time 19 min read

Merhaba, bu eğitim size NGINX ve Gunicorn+Uvicorn kullanarak bir FastAPI uygulamasını nasıl dağıtacağınızı ve ücretsiz bir SSL sertifikası edinme talimatlarını öğretecektir.

İÇİNDEKİLER

⊱Ön Koşullar
⊱Teknoloji Yığını
⊱(İsteğe Bağlı) Adım 1: Sunucunuzu Güvenceye Alın
⊸Otomatik Güncellemeleri Etkinleştir
⊸Kök Olmayan Kullanıcı Oluşturma
⊸Diğer Güvenlik Önlemleri
⊱Adım 2: Yazılım Araçlarını Kurun
⊱Adım 3: FastAPI uygulamanızı kurun
⊱Adım 4: Gunicorn’u Yapılandırma
⊸Gunicorn’u Kurun
⊸Süpervizörü Yapılandırma
⊱Adım 5: NGINX’i Yapılandırın

Bir FastAPI web uygulamasını Virtual Private Server (VPS) üzerinde dağıtmak, özellikle de NGINX, Gunicorn ve Uvicorn gibi teknolojiler konusunda bilgili değilseniz zor olabilir. Bu eğitim, süreci basitleştirmek ve ilk kurulumum sırasında karşılaştığım dik öğrenme eğrisinden kaçınmanıza yardımcı olmak için tasarlanmıştır.

FastAPI, mükemmel performansı ve kullanıcı dostu yapısıyla bilinen, API geliştirme için yaygın olarak beğenilen bir Python kütüphanesidir. Makine öğrenimi modellerini web uygulamanıza dahil ediyorsanız, FastAPI muhtemelen sizin için ideal seçimdir.

NGINX , Gunicorn ve Uvicorn, Python web uygulamalarını dağıtırken ters proxy ve ASGI sunucusu olarak sıklıkla kullanılan, saldırıda test edilmiş teknolojilerdir. Django veya Flask’a aşinaysanız, muhtemelen bunlardan bazılarını daha önce duymuşsunuzdur.

Bu eğitimde, bir FastAPI web uygulamasını dağıtmak için bu araçları nasıl birleştireceğinizi göstereceğim. Eğitimde şunları yapacaksınız:

  • FastAPI, NGINX, Gunicorn ve Uvicorn hakkında temel bilgileri öğreneceksiniz.
  • Gunicorn + Uvicorn’u bir ASGI sunucusu olarak kuracaksınız.
  • NGINX’i ters proxy sunucusu olarak yapılandıracaksınız.
  • Let’s Encrypt kullanarak uygulamanız için ücretsiz bir SSL sertifikası oluşturacaksınız.

Hadi başlayalım!

ÖN KOŞULLAR

  • Debian tabanlı bir VPS’ye erişiminiz olmalı. Ben Ubuntu 20.04 kullanacağım.
  • sudo, mkdir veya cd gibi temel kabuk komutlarına aşina olmalısınız.
  • vim’den nasıl çıkılacağını bilmelisiniz (iki noktaya(:) basıp wq yazıp enterlamanız gerekiyor ya da qw miydi 🙂

KULLANACAĞIMIZ TEKNOLOJİLER

  • FastAPI, API’ler oluşturmak için en çok tercih edilen Python çerçevelerinden biri olarak öne çıkıyor. Standart Python tip ipuçlarından yararlanarak Starlette ve Pydantic’in üzerine inşa edilmiştir. Geliştiriciler olağanüstü performansı, öğrenme kolaylığı ve sunduğu mükemmel geliştirme deneyimi nedeniyle ona bayılıyor.
  • Çok sevilen bir web sunucusu olan Gunicorn, Python web uygulamalarını dağıtmak için sıklıkla kullanılır. Genellikle bir WSGI sunucusu olarak kullanılsa da, bir ASGI sunucusu olarak işlev görmek için Uvicorn ile birleştirmek de mümkündür.
  • Özellikle ASGI için tasarlanmış olan Uvicorn, bir Python web sunucusu uygulamasıdır. Starlette ve FastAPI için tercih edilen web sunucusu olarak şiddetle tavsiye edilir.
  • NGINX, geniş bir uygulama yelpazesine sahip çok yönlü bir açık kaynak aracıdır. Başlangıçta bir web sunucusu olarak başlamış olsa da, bir ters proxy sunucusu, bir yük dengeleyici(Load Balancer) ve daha fazlası olarak hizmet verecek şekilde gelişmiştir. Python web çerçeveleri bağlamında, NGINX genellikle uygulama için web sunucusunun önünde bir ters proxy olarak kullanılır.

(İsteğe Bağlı) Adım 1: Sunucunuzu Güvenceye Alın

Bu adım zorunlu olmasa da, özellikle eylemlerinizden emin değilseniz, üstünkörü bir göz atmanız tavsiye edilir. Bunu yapmak uygulamanızın güvenliğini artıracaktır.

Otomatik Güncellemeleri Etkinleştirme

Öncelikle, sunucunuzun en son yazılıma sahip olduğundan emin olmalısınız:

sudo apt update && sudo apt upgrade -y

İşte Debian tabanlı sunucuları yönetirken karşılaşacağınız tipik komutlar:

  • sudo apt update: Çalıştırıldığında kullanıcının sistemindeki paket listesi dizini yenilenir.
  • sudo apt upgrade: Çalıştırıldığında kurulu paketler en son sürümlerine güncellenir. Kuruluma onay almadan devam etmek için -yflagini ekleyebilirsiniz.

Daha sonra, manuel müdahaleden kaçınmak için otomatik güvenlik güncellemelerini yapılandırmanız önerilir. Bunu başarmak için unattended-upgradesi yüklemeniz ve etkinleştirmeniz gerekir.

sudo apt install unattended-upgrades

Kurulum tamamlandığında, /etc/apt/apt.conf.d/20auto-upgrades dosyasını aşağıdaki satırları içerecek şekilde düzenleyin:

APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";
APT::Periodic::AutocleanInterval "7";

Bu satırlar unattended-upgrades i otomatik olarak çalışacak şekilde yapılandırır. İşte yaptıkları şey:

  • APT::Periodic::Update-Package-Lists “1”, paket listesinin her gün otomatik olarak güncelleneceği anlamına gelir.
  • APT::Periodic::Unattended-Upgrade “1”, kullanıcının müdahalesine gerek kalmadan sistemin paketlerin en son sürümüne güncelleneceği anlamına gelir.
  • “APT::Periodic::AutocleanInterval “7”, eski ve gereksiz paket dosyalarından kurtulan otomatik temizleme işleminin haftada bir kez çalışacağı anlamına gelir.

Son olarak, çekirdek güncellemeleri gerektirdiğinde sistemin otomatik olarak yeniden başlatılmasını sağlamak için /etc/apt/apt.conf.d/50unattended-upgrades dosyasını düzenleyin:

Unattended-Upgrade::Automatic-Reboot "true"; # true olarak değiştirin

Ayrıca, yükseltmeyle ilgili sorunların ortaya çıkması durumunda sisteminizi e-posta bildirimleri gönderecek şekilde ayarlama seçeneğiniz de vardır. Bu özelliği uygulamakla ilgileniyorsanız, lütfen burdaki makaleye bakın.

Tebrikler! Sisteminizin güncel olduğunu ve bu şekilde kalacağını başarıyla doğruladınız. Bir sonraki adımınız, uygulamanızın yalnızca çalışması için gerekli izinlere sahip olduğundan emin olmak için bir kullanıcı oluşturmaktır.

Non-root Kullanıcı Oluşturma

Sunucunuz saldırıya uğrarsa, root olmayan bir kullanıcıya sahip olmak kötü niyetli aktörün verebileceği zararı azaltır. Bu, diğer nedenlerin yanı sıra, root olmayan bir kullanıcının oluşturulmasını haklı çıkarır.

sudo adduser fastapi-user # fastapi-user yerine tercih ettiğiniz adı yazın
sudo gpasswd -a fastapi-user sudo # sudoers'a ekleyin
su - fastapi-user # fastapi-user olarak giriş yapın

Yukarıdaki yönergeler fastapi-user adında bir kullanıcı oluşturma sürecini başlatacak, bu kullanıcıyı root ayrıcalıklarına sahip tüm kişileri içeren sudo grubuna dahil edecek ve daha sonra bu kullanıcı olarak oturum açacaktır.

Bunu takiben, sunucunuzu bir parola yerine bir SSH anahtarı aracılığıyla bağlantıyı etkinleştirecek şekilde yapılandıracaksınız. Bu yaklaşım hem daha güvenli hem de daha verimlidir ve size önemli avantajlar sunar.

Elinizde bir SSH anahtarınız yoksa, yerel makinenizde yeni bir terminal açın ve sonraki komutu çalıştırın. Alternatif olarak, zaten bir SSH anahtarınız varsa, bu adımı atlayabilir ve doğrudan genel SSH anahtarınızı kopyalamaya devam edebilirsiniz.

ssh-keygen -t ed25519 -C "deneme@batikandemirci.com"

Bu komut yerel makinenizde bir SSH anahtarı oluşturacak ve saklayacaktır. İki parametre kullanırsınız:
1 Anahtarı oluşturmak için hangi algoritmanın kullanılacağını belirtmek için -t ed25519 parametresini kullandık. Neden ED25519 olduğuna gelirsek, çok güvenli ve verimli bir algoritma olan ED25519’u seçtik.

2 -C deneme@batikandemirci.com e-postanızı anahtarın sonuna yorum olarak eklemek için. deneme@batikandemirci.com yerine gerçek e-postanızı yazdığınızdan emin olun.

Ardından, aşağıdaki komutu kullanarak ve çıktıyı kopyalayarak genel SSH anahtarınızı kopyalayın:

cat ~/.ssh/id_ed25519.pub

Uzak sunucunun terminaline geri dönün ve aşağıdaki komutları yazın:

mkdir ~/.ssh/
chmod 700 -R ~/.ssh/
sudo vim ~/.ssh/authorized_keys

Bu komutlar:

1Bir .ssh dizini oluşturuyor. (mkdir ~/.ssh/)
2- Gerekli izinleri ayarlayın (.ssh/ dosyasının sahibi tam okuma, yazma ve çalıştırma izinlerine sahiptir, ancak diğer kullanıcılar ve gruplar bu izinlere sahip olmamalıdır).
3- authorized_keys dosyasını bir düzenleyici ile açın
Genel SSH anahtarınızı authorized_keys içine yapıştırın. Değişiklikleri kaydedin ve düzenleyiciyi kapatın. Terminali kapatarak ve aşağıdaki komutu kullanarak makinenizde tekrar oturum açarak değişikliklerin işe yaradığından emin olalım:

ssh fastapi-user@your-server-ip

İşlevselliğini onayladıktan sonra, root oturum açma özelliğini devre dışı bırakmanız ve SSH bağlantıları için parola kimlik doğrulaması kullanmanız önerimdir. Bunu gerçekleştirmek için, sudo ayrıcalıklarına sahip vim (veya herhangi bir alternatif) gibi bir metin düzenleyici kullanarak /etc/ssh/sshd_config dosyasında belirtilen ayarları değiştirmeniz gerekecektir:

PermitRootLogin no # 'no' olarak değiştirin
...
PasswordAuthentication no # 'no' olarak değiştirin

Bu değişiklikler kullanıcıların root olarak oturum açmasını yasaklayacak ve SSH anahtarı yerine parola kullanarak kimlik doğrulama seçeneğini de devre dışı bırakacaktır.

Diğer Güvenlik Önlemleri

Çoğu bulut sağlayıcısı güvenlik duvarı hizmeti sunar, ancak sizinki sunmuyorsa, bir tane yapılandırmalı ve yalnızca gerekli bağlantı noktalarına gelen trafiğe izin vermelisiniz: 80, 443 ve 22.

Ayrıca, brute-force kimlik doğrulama saldırılarını önlemek için fail2ban yükleyebilirsiniz. Bir Linux sunucusunun güvenliğini sağlamaya yönelik en iyi uygulamalar hakkında daha fazla bilgi edinmek için Linode’un bu kılavuzuna göz atın.

Adım 2: Yazılım Araçlarını Kurmak

Birkaç yazılım aracına ihtiyacınız olacak. Python’u yüklemek için aşağıdaki komutları çalıştırarak başlayabilirsiniz:

sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.12 python3.12-venv -y

Ardından, Supervisor ve NGINX‘i yükleyelim:

sudo apt install supervisor nginx -y

Supervisor, program süreçlerinin gözetimi ve kontrolü için tasarlanmış, Linux ile uyumlu, Unix benzeri bir işletim sistemi süreç kontrol sistemidir. Birincil işlevi, program süreçlerini sürekli olarak denetlemek ve idare etmek, çökme veya kapanma durumunda onları yeniden başlatarak sürekli çalışmalarını sağlamaktır.

Daha önce de belirtildiği gibi NGINX, web uygulamalarının dağıtımında ters proxy olarak sıklıkla kullanılan, yaygın olarak benimsenmiş ve çok yönlü bir yazılımdır.

Supervisor’ı etkinleştirip ve başlatalım:

sudo systemctl enable supervisor
sudo systemctl start supervisor

enable, Supervisor’ın önyükleme sırasında başladığından emin olur ve start, Supervisor’ı hemen başlatır.

Adım 3: FastAPI Uygulamanızı Kurmak

Örnek uygulamayı /home/fastapi-user içine terminale geri dönüp githubdan klonlayarak başlayalım:

git clone https://github.com/batikandemirci/fastapi-nginx-gunicorn

Bu, genel repositorieslerde çalışacaktır. Özel bir GitHub deposundan bir uygulama dağıtmak istiyorsanız, bir GitHub dağıtım anahtarı oluşturmalı ve bunu kullanarak repoyu klonlamalısınız.

Ardından, bir virtual environment (sanal ortam) oluşturalım ve proje dizininde etkinleştirelim:

cd /home/fastapi-user/fastapi-nginx-gunicorn
python3.12 -m venv .venv
source .venv/bin/activate

Bu komutlar mevcut konumunuzu proje dizini olarak değiştirecek, içinde bir sanal ortam oluşturacak ve etkinleştirecektir. Şu andan itibaren, komut satırınızda bir (.venv) öneki görmelisiniz.

Şimdi, requirements.txt dosyasında belirtilen kütüphaneleri yüklemek için pip kullanalım:

pip install -r requirements.txt

Bu işlem requirements.txt dosyasındaki fastapi, gunicorn ve uvicorn paketlerini mevcut sanal ortamımıza yükleyecektir.

Uygulamayı çalıştırarak her şeyin yolunda gittiğini doğrulayalım:

uvicorn main:app

Bu komutu çalıştırdığınızda herhangi bir hata almamalısınız. Ayrıca sunucuya web tarayacasından (çalıştırdığındığınızda terminde http: ile başlayan adresi) adresi girerek deneyebilirsiniz veya yeni bir terminal penceresi açarak, sunucuya bağlanarak ve curl ile bir istekte bulunarak çalıştığını doğrulayabilirsiniz:

curl http://localhost:8000

Aşağıdaki yanıtı almalısınız:

Yolu yarıladınız. FastAPI uygulamanızı çalıştırdınız, şimdi Gunicorn’u WSGI sunucusu olarak hizmet verecek şekilde yapılandırmaya geçelim.

Adım 4: Gunicorn’u Yapılandırma

Öncelikle Gunicorn’u çalıştırırken kullanacağınız parametreleri tanımlamak için bir dosya oluşturacağız. Bunun için proje dizininde gunicorn_start adında bir dosya oluşturalım:

vim gunicorn_start

Ardından, aşağıdaki satırları ekleyelim:

#!/bin/bash

NAME=fastapi-app
DIR=/home/fastapi-user/fastapi-nginx-gunicorn
USER=fastapi-user
GROUP=fastapi-user
WORKERS=3
WORKER_CLASS=uvicorn.workers.UvicornWorker
VENV=$DIR/.venv/bin/activate
BIND=unix:$DIR/run/gunicorn.sock
LOG_LEVEL=error

cd $DIR
source $VENV

exec gunicorn main:app \
  --name $NAME \
  --workers $WORKERS \
  --worker-class $WORKER_CLASS \
  --user=$USER \
  --group=$GROUP \
  --bind=$BIND \
  --log-level=$LOG_LEVEL \
  --log-file=-

Peki ne bu kodlar, hadi açıklayalım:

Satır 1, betiğin bash kabuğu tarafından çalıştırılacağını belirtir.
3’ten 11’e kadar olan satırlar Gunicorn’a ileteceğiniz yapılandırma seçeneklerini belirtir. WORKERS, WORKER_CLASS ve BIND dışında çoğu parametre kendi kendini açıklar:
WORKERS: Gunicorn’un kullanacağı işçi sayısını tanımlar, genellikle CPU çekirdeği sayısı + 1 kullanılması önerilir.
WORKER_CLASS: Kullanılan işçi türüdür. Bu durumda, ASGI sunucusu olarak kullanmanıza izin veren Uvicorn işçilerini belirtirsiniz.
BIND: Gunicorn’un bağlandığı sunucu soketini belirtir.
13. ve 14. satırlar konumu proje dizini olarak değiştirir ve sanal ortamı etkinleştirir.
16 ila 24. satırlar Gunicorn’u belirtilen parametrelerle çalıştırır.

Bunları yazıp kaydettikten sonra çıkalım ve aşağıdaki yazılanları çalıştırarak Gunicorn’u çalıştırılabilir hale getirelim:

chmod u+x gunicorn_start

Son olarak, BIND parametresinde tanımladığımız Unix soket dosyası için proje dizininizde bir run klasörü oluşturalım:

mkdir run

Aynı makine üzerinde iletişim kuran birden fazla sunucunuz varsa, Unix soket dosyası kullanmak daha iyidir.

Süpervizörü Yapılandırma

İlk olarak, uygulamanızın hata günlüklerini saklamak için proje dizininde logs adında bir dizin oluşturalım:

mkdir logs

Ardından, aşağıdaki komutu çalıştırarak bir Supervisor yapılandırma dosyası oluşturalım:

sudo vim /etc/supervisor/conf.d/fastapi-app.conf

Aşağıdakileri kopyalayıp yapıştırın:

[program:fastapi-app]
command=/home/fastapi-user/fastapi-nginx-gunicorn/gunicorn_start
user=fastapi-user
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/home/fastapi-user/fastapi-nginx-gunicorn/logs/gunicorn-error.log

Bu yapılandırma dosyası, fastapi-user kullanarak daha önce oluşturduğunuz gunicorn_start dosyasını çalıştırır. Supervisor, sunucu her başladığında uygulamayı başlatacak ve başarısız olursa yeniden başlatacaktır.

Bu yapılandırma dosyası, kullanıcı olarak fastapi-user kullanarak daha önce oluşturduğumuz gunicorn_start dosyasını çalıştırır. Supervisor, sunucu her açıldığında uygulamayı başlatacak ve uygulama başarısız olursa yeniden başlatacaktır. Hatalar logs dizinindeki günlüklerde gunicorn-error.log dosyasına kaydedilir.

Supervisor’ın yapılandırma dosyasını tekrar okuyalım ve aşağıdaki komutları çalıştırarak hizmeti yeniden başlatalım:

sudo supervisorctl reread
sudo supervisorctl update

Son olarak, aşağıdaki komutu çalıştırarak programın durumunu kontrol edebilirsiniz:

sudo supervisorctl status fastapi-app

Eğer her şey yolunda gittiyse fastapi-app hizmet durumu RUNNING olarak ayarlanmış olması lazım.

Ayrıca yeni bir terminal penceresi açarak, sunucuya bağlanarak ve curl kullanarak bir GET isteği göndererek de test edebilirsiniz:

curl --unix-socket /home/fastapi-user/fastapi-nginx-gunicorn/run/gunicorn.sock localhost

Bundan sonra aşağıdaki çıktıyı görmelisiniz:

{"Hello":"World"}

Son olarak, kodda değişiklik yaparsanız, bu komutu çalıştırarak değişiklikleri uygulamak için hizmeti yeniden başlatabilirsiniz:

sudo supervisorctl restart fastapi-app

Şuan harbiden çalıştı dediğinizi duyar gibiyim, yani umarım öyledir! Gunicorn ve Uvicorn kullanarak çalışan bir ASGI sunucunuz var. Daha sonra, NGINX kullanarak bir ters proxy sunucusu kuracaksınız. Çılgınca değil mi, bencede öyle! Hadi devam edelim.

Adım 5: NGINX’i Yapılandırmak

Projeniz için yeni bir NGINX yapılandırma dosyası oluşturalım:

sudo vim /etc/nginx/sites-available/fastapi-app

NGINX yapılandırma dosyasını açalım ve aşağıdaki içeriği yapıştıralım:

upstream app_server {
    server unix:/home/fastapi-user/fastapi-nginx-gunicorn/run/gunicorn.sock fail_timeout=0;
}

server {
    listen 80;

    # add here the ip address of your server
    # or a domain pointing to that ip (like example.com or www.example.com)
    server_name XXXX;

    keepalive_timeout 5;
    client_max_body_size 4G;

    access_log /home/fastapi-user/fastapi-nginx-gunicorn/logs/nginx-access.log;
    error_log /home/fastapi-user/fastapi-nginx-gunicorn/logs/nginx-error.log;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
                        
        if (!-f $request_filename) {
            proxy_pass http://app_server;
            break;
        }
	}
}

Bu NGINX yapılandırma dosyasıdır. İşte nasıl çalıştığı:

  • 1’den 3’e kadar olan satırlar, NGINX’in istekleri proxy’leyeceği app_server adlı bir sunucu kümesi tanımlar. İstekler /home/fastapi-user/fastapi-nginx-gunicorn/run/gunicorn.sock adresinde bulunan Unix soket dosyasına yönlendirilir. fail_timeout=0 ayarı, NGINX’e sunucu yanıt vermese bile başarısız olarak değerlendirmemesini söyler.
  • 1’den 5’e kadar olan satırlar, NGINX’in istekleri sunmak için kullanacağı sanal sunucunun yapılandırmasını tanımlar. Bu durumda, 80 numaralı bağlantı noktasını dinler. XXXX yerine IP veya sitenin adını yazacağız.
  • 12. ve 13. satırlarda, bir istemcinin kalıcı bir bağlantıyı açık tutabileceği maksimum süreyi ayarlamak için keepalive_timeout ve NGINX’in izin vereceği istemci istek gövdesinin boyutuna bir sınır belirlemek için client_max_body_size belirtilir.
  • 15. ve 16. satırlar NGINX’in erişim ve hata günlüklerini yazacağı konumları belirtir.
  • 18 ila 27. satırlar NGINX’in / kök dizinine gelen istekleri nasıl ele alacağını tanımlar. Başlıkları ele almak için bazı özellikler sağlarsınız ve istekleri daha önce tanımladığınız app_server‘a proxy olarak göndermek için bir yönerge ayarlarsınız.
  • Aşağıdaki komutu çalıştırarak sites-available içindeki dosyadan sites-enabled içine sembolik bir bağlantı oluşturarak sitemizin yapılandırmasını etkinleştirin:
sudo ln -s /etc/nginx/sites-available/fastapi-app /etc/nginx/sites-enabled/

Yapılandırma dosyasının hatasız yani tam olduğunu test edin ve NGINX’i yeniden başlatın:

sudo nginx -t
sudo systemctl restart nginx

Gunicorn’ u çalıştıralım:

Her şey yolunda gittiyse, şimdi tarayıcınızdan veya curl kullanarak sunucunuzun IP’sine başarılı bir şekilde GET isteği gönderebilmeniz gerekir. Bir kez daha, aşağıdaki çıktıyı görmelisiniz:

{"Hello":"World"}

Şimdiye kadar yaptıklarımızla FastAPI uygulamanızın yanı sıra ASGI sunucusu olarak Gunicorn+Uvicorn ve bunların önünde ters proxy olarak NGINX çalışıyor olmalıdır.

Permissions Error

NGINX’in unix soketine erişemediğini söyleyen bir izin hatası alırsanız, www-data kullanıcısını (genellikle NGINX işlemlerini çalıştıran kullanıcıdır) fastapi-user grubuna ekleyebilirsiniz. Bunun için şağıdaki komutu kullanabilirsiniz:

 sudo usermod -aG fastapi-user www-data

Valla helal olsun, iyi iş çıkardınız! API’niz için bir alan adı satın almadıysanız, okumayı burada bırakabilirsiniz. Eğer bir alan adınız varsa, bir SSL sertifikası almak ve HTTPS’yi etkinleştirmek için bir sonraki adıma geçin.

(İsteğe Bağlı) Adım 6: Certbot Kullanarak Ücretsiz SSL Sertifikası Alın

Bu adımlar yalnızca SSL sertifikası almak istediğiniz bir alan adınız varsa geçerlidir.
Eğer Ubuntu kullanıyorsanız, bu adımı atlayabilirsiniz. Aksi takdirde, önce snapd‘yi yüklemeniz gerekir:

sudo apt install snapd

Ardından, en son sürüme sahip olduğunuzdan emin olmak için:

sudo snap install core; sudo snap refresh core

certbot’u yükleyelim ve cerbot komutunun çalıştırılabilir olduğundan emin olalım:

sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot

Ardından, aşağıdaki komutu çalıştırarak etki alanımız için etkileşimli olarak bir sertifika oluşturalım:

sudo certbot --nginx

Son olarak, aşağıdaki komut Certbot sertifikanızın yenilenmesini otomatik olarak gerçekleştirecektir. Çalıştığını test etmek için aşağıdakini çalıştırın:

sudo certbot renew --dry-run

Beklendiği gibi çalıştıysa, ‘Congratulations, all simulated renewals succeeded…’ mesajını görmelisiniz.

Her şey yolunda gittiyse, HTTPS kullanarak başarılı bir get isteği yapabilmemiz gerekir.

Sonuç

Hepsi bu kadar! Bu eğitim size bir FastAPI uygulamasını konuşlandırmak için NGINX, Gunicorn ve Uvicorn’u nasıl kullanacağınızı gösterdi. FastAPI en popüler Python web framework’lerinden biridir. Makine öğrenimi destekli web uygulamalarını dağıtmak için başvurulan bir seçenek haline gelmiştir, bu nedenle benim gözümde bu konuda bilgi sahibi olmak akıllıca bir kariyer hamlesidir.

Bu yazıda öğrendiklerimiz:

  • FastAPI, NGINX, Gunicorn ve Uvicorn’u neden ve ne zaman kullanmalısınız.
  • Gunicorn+Uvicorn bir ASGI sunucusu olarak nasıl kurulur.
  • Gunicorn’u çalıştırmak için Supervisor nasıl kullanılır.
  • NGINX nasıl yapılandırılır ve certbot kullanılarak ücretsiz bir SSL sertifikası nasıl oluşturulur.

Herhangi bir sorunuz veya geri bildiriminiz varsa, yorumlarda bana sormaktan çekinmeyin.

Bu blog yazısı yabancı kaynaklı bir websitesindeki anlatımın Türkçeye çevrilmesi, kendi yorumlarımı eklemem ile oluşturulmuştur. Amacım bu konu hakkında ‘detaylı’ bir Türkçe gönderi bulamamam ve bu konuda çalışacak arkadaşların faydalanmasıdır.

batikan

Araştırma ve geliştirme, veri analizi veya yapay zeka uygulamaları geliştirme gibi alanlarda bilgili ve deneyimli Bilgisayar Mühendisi. Üniversitede Bilgisayar Mühendisliği bölümünü 3 yılda tamamlamış, Görüntü İşleme, Java Spring, Makine Öğrenmesi, Derin Öğrenme ve Blockchain gibi alanlarda bilgi ve deneyim sahibi. Yapay Zeka gibi alanlarda bilgili, yenilikçi çözümler üretmeye hevesli, takım çalışmasına ve yeni fikirlere açık biri.

You May Also Like

More From Author

+ There are no comments

Add yours