Prompt Title: Yunus naber nasılsın

Created 1 year ago
Votes 0
Views 257 times
0

Prompt Detail:

Docker Compose ile Streamlit frontend ve FastAPI backend kullanan bir uygulama oluşturmak için öncelikle her iki servisin yapılandırıldığı bir docker-compose.yml dosyası ve her bir servis için Dockerfile'lar oluşturmanız gerekecektir.

Bu uygulama için temel bir yapı aşağıdaki gibi olabilir:

  1. frontend klasöründe Streamlit uygulaması için bir Dockerfile.
  2. backend klasöründe FastAPI uygulaması için bir Dockerfile.
  3. Ana dizinde docker-compose.yml dosyası.

İlk olarak, projenizin dosya yapısı aşağıdaki gibi olmalıdır:

css
myapp/ │ ├── backend/ │ ├── main.py │ └── Dockerfile │ ├── frontend/ │ ├── app.py │ └── Dockerfile │ └── docker-compose.yml

Her bir parçayı adım adım oluşturalım:

Backend FastAPI Uygulaması

backend/main.py:

python
from fastapi import FastAPI app = FastAPI() @app.get("/get_data") async def get_data(value: str): # Burada basit bir işlem yapıp geri döndürelim, örneğin gönderilen değeri büyük harfe çevirelim return {"result": value.upper()}

backend/Dockerfile:

Dockerfile
FROM python:3.9 WORKDIR /app COPY ./requirements.txt /app/requirements.txt RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt COPY ./main.py /app/main.py CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80"]

backend/requirements.txt (aynı backend klasörü içinde):

fastapi uvicorn

Frontend Streamlit Uygulaması

frontend/app.py:

python
import streamlit as st import requests # Frontend'de bir input ve buton oluşturalım value = st.text_input("Değer giriniz:") if st.button("Gönder"): # FastAPI backend'e istek atalım response = requests.get(f"http://backend/get_data?value={value}") if response.status_code == 200: # Alınan cevabı ekrana yazdıralım st.write(response.json()) else: st.error("Bir hata oluştu!")

frontend/Dockerfile:

Dockerfile
FROM python:3.9 WORKDIR /app COPY ./requirements.txt /app/requirements.txt RUN pip install --no-cache-dir --upgrade -r /app/requirements.txt COPY ./app.py /app/app.py EXPOSE 8501 CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]

frontend/requirements.txt (aynı frontend klasörü içinde):

streamlit requests

Docker Compose Yapılandırması

docker-compose.yml:

yaml
version: '3.8' services: frontend: build: ./frontend ports: - "8501:8501" depends_on: - backend backend: build: ./backend ports: - "80:80"

Yukarıdaki yapılandırma ile Docker Compose, her iki Dockerfile'ı kullanarak iki konteyner oluşturacak ve Streamlit uygulamasının 8501 portunu ve FastAPI uygulamasının 80 portunu host makinenizin ilgili portlarına yönlendirecektir. depends_on ayarı, frontend servisinin backend servisi ayağa kalkmadan başlamamasını sağlar.

Bu dosyaları oluşturduktan sonra, uygulamayı Docker Compose ile başlatabilirsiniz:

bash
docker-compose up --build

Bu komut, gerekli imajları inşa edecek ve konteynerleri başlatacaktır. Uygulamanız şimdi yerel makinenizde çalışıyor olmalı. Streamlit uygulamasına tarayıcınızda localhost:8501 adresinden, FastAPI backend'e ise localhost adresindeki 80 portundan ulaşabilirsiniz.

Canlıya almak için Docker Compose yapılandırmanızı bir sunucuya yükleyip orada çalıştırmanız gerekecektir. Sunucu sağlayıcınıza bağlı olarak, bu genellikle Docker ve Docker Compose'un yüklü olduğu bir sanal makine üzerinde aynı komutları çalıştırarak yapılır. Sunucunuzda bir ters proxy (reverse proxy) kullanarak (Nginx veya Traefik gibi) ve bir SSL sertifikası (Let's Encrypt ile) uygulamanızı HTTPS üzerinden güvenli bir şekilde halka açabilirsiniz.

Docker compose yapisi ile streamlit frontend, fastapi backend olacak sekilde bir uygulama olusturmaniz gerekiyor. Streamlitten degerleri alip fastapiye istek atacaksiniz sonrasinda apiden gelen istegi ekrana yazdiracaksiniz Ayrica bunu canliya alacaksiniz
avatar
İyiyim Sefa sen nasılsın
Shared 1 prompt
Created 1 year ago

Leave a Comment