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:
frontend
klasöründe Streamlit uygulaması için bir Dockerfile.backend
klasöründe FastAPI uygulaması için bir Dockerfile.- Ana dizinde
docker-compose.yml
dosyası.
İlk olarak, projenizin dosya yapısı aşağıdaki gibi olmalıdır:
cssmyapp/
│
├── 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
:
pythonfrom 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
:
DockerfileFROM 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
:
pythonimport 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
:
DockerfileFROM 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
:
yamlversion: '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:
bashdocker-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.