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?

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
}