İçeriğe geç
Anasayfa » Litespeed Server’a reverse proxy olarak SSL fastapi kurulması

Litespeed Server’a reverse proxy olarak SSL fastapi kurulması

fastapi reverse proxy

Gerekli kurulumlar

Bunun için öncelikle tabi ki bir fastapi servisi kuracağız. Bunun için Linux tabanlı Ubuntu iyi bir tercih olacaktır. İşletim sisteminin terminal ekranında temel kurulumları yapmalıyız öncelikle;

pip install fastapi streamlit ctranslate2 sentencepiece transformers uvicorn

Diğer taraftan bize SSL bağlantısı sağlayacak olarak bir domain seçmemiz gerekiyor. Başka bir konu olan web site kurulum prosedürleri tamamlandıktan sonra örneğin bir çeviri hizmeti kurulacaksa web sitesi içerisinde “public_html” klasörü içerisine “translator_app” klasörü oluşturalım ve içerisine api işlevlerini yürütecek olan “main.py” python dosyasını oluşturalım;

Fastapi python servis kurulumu

from fastapi import FastAPI, Request
from pydantic import BaseModel
import ctranslate2
from transformers import MarianTokenizer

# Load tokenizer and model
tokenizer = MarianTokenizer.from_pretrained("Helsinki-NLP/opus-mt-tr-ar")
translator = ctranslate2.Translator("ctranslate", device="cpu")

app = FastAPI()

class TranslateRequest(BaseModel):
    text: str

@app.post("/translate")
def translate(req: TranslateRequest):
    # Encode input and convert to tokens
    encoded = tokenizer.prepare_seq2seq_batch([req.text], return_tensors="pt")
    input_tokens = tokenizer.convert_ids_to_tokens(encoded['input_ids'][0])
    
    # Run translation
    result = translator.translate_batch([input_tokens], beam_size=5)
    output_tokens = result[0].hypotheses[0]
    
    # Decode output
    output_ids = tokenizer.convert_tokens_to_ids(output_tokens)
    translated = tokenizer.decode(output_ids, skip_special_tokens=True)
    return {"translation": translated}

Tabi ki bu klasör içerisine “ctranslate” klasörü oluşturularak içerisine model “bin” dosyası ve tokenizerler ile diğer gerekli sözlük dosyaları eklenmelidir.

İşletim sistemi ayarları

Ayrıca bunun bir servis olarak çalışabilmesi için aşağıdaki komutla servis oluşturulur ve aşağıdaki ayarlar girilir, daha sonra bunun kalıcı bir servis olması ve her restart ile tekrar başlaması için gerekli komutlar girilir.

 sudo nano /etc/systemd/system/translator-api.service
[Unit]
Description=Translation API Service
After=network.target

[Service]
User=apias3927
WorkingDirectory=/home/api.domain.com/public_html/translator_app
ExecStart=/usr/local/bin/uvicorn main:app --host 0.0.0.0 --port 8000
Restart=always

[Install]
WantedBy=multi-user.target
sudo systemctl start translator-api   
sudo systemctl status translator-api   
sudo systemctl daemon-reload
sudo systemctl daemon-reexec

Test için curl fonksiyonu ile 8000 nolu port kontrolü yapılır

curl -X POST http://localhost:8000/translate -H "Content-Type: application/json" -d '{"text":"Hello world!"}'
sudo lsof -i :8000

Komutu ile aşağıdaki gibi sonuç görmemiz gerekir. Yine Curl çağrısı sonucu bile çeviri sonucunu vermelidir.

COMMAND   PID      USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
uvicorn 43013 apias3927    7u  IPv4 765098      0t0  TCP *:8000 (LISTEN)

Buraya kadar herşey normal ise çok iyi ise de bir sorun var. “http://localhost:8000/translate” çağrısı bir SSL protokolü değil , yani dışarıdan ulaşmak için kullanacağımız “https://api.domain.com/translate” henüz hazır değil. Bunun için reverse proxy kurulmalı ancak manuallar genelde nginx üzerinden anlatılıyor. Peki bu litespeed server yahut openlitespeed üzerinden nasıl yapılacak?

fastapi reverse proxy
fastapi reverse proxy

Openlitespeed üzerinde Reverse proxy

Bunun için webadmin arayüzü kullanılabilir; admin girişi yapılmalıdır.

http://ip:7080
Server Configuration > External App > Add
Web Server
isim fastapi_backend
adres http://127.0.0.1:8000
Max Connections * 100
Initial Request Timeout (secs) * 30
Retry Timeout (secs) * 0
Response Buffering * No

Kaydedilir ve graceful restart yapılarak çıkılıp vhost ayarlarına gidilir.

vHost Conf

docRoot                   /home/api.domain.com/public_html/translator_app
vhDomain                  $VH_NAME
vhAliases                 www.$VH_NAME
adminEmails               email@gmail.com
enableGzip                1
enableIpGeo               0

errorlog logs/$VH_NAME.error_log {
  logLevel WARN
  rollingSize 10M
}

accesslog logs/$VH_NAME.access_log {
  rollingSize 10M
  keepDays 30
}

rewrite  {
 enable                  1
  autoLoadHtaccess        1
rules        <<<END_rules
 REWRITERULE ^(.*)$ http://fastapi_backend/$1 [P]
END_rules
}


vhssl  {
  keyFile                 /etc/letsencrypt/live/api.domain.com/privkey.pem
  certFile                /etc/letsencrypt/live/api.domain.com/fullchain.pem
  certChain               1
  sslProtocol             24
  enableECDHE             1
  renegProtection         1
  sslSessionCache         1
  enableSpdy              15
  enableStapling           1
  ocspRespMaxAge           86400
}
Paylaş :

Bir yanıt yazın

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