multilabel-news-classifier / docker-compose.yml
Solareva Taisia
chore(release): initial public snapshot
198ccb0
services:
# API Service
api:
build:
context: .
dockerfile: Dockerfile.api
container_name: news-classifier-api
ports:
- "8000:8000"
volumes:
# Mount only the required artifacts (avoid overriding code inside the image)
- ./models/distilmbert_lora_10k_v1.pt:/app/models/distilmbert_lora_10k_v1.pt:ro
- ./config/thresholds.json:/app/config/thresholds.json:ro
# Persist monitoring logs across restarts (optional but nice for demos)
- ./monitoring:/app/monitoring
environment:
- PYTHONUNBUFFERED=1
- MODEL_PATH=models/distilmbert_lora_10k_v1.pt
- THRESHOLDS_PATH=config/thresholds.json
- TOKENIZER_NAME=distilbert-base-multilingual-cased
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:8000/health"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
networks:
- nlp-network
# Streamlit (multipage app)
streamlit:
build:
context: .
dockerfile: Dockerfile.streamlit
container_name: news-classifier-streamlit
ports:
- "8501:8501"
volumes:
- .:/app
working_dir: /app
environment:
- API_URL=http://api:8000
command: >
streamlit run streamlit_app.py
--server.port=8501
--server.address=0.0.0.0
depends_on:
- api
networks:
- nlp-network
# Optional: MLflow tracking server
mlflow:
image: python:3.10-slim
container_name: mlflow-server
ports:
- "5000:5000"
volumes:
- ./mlruns:/mlruns
- ./requirements.txt:/requirements.txt
working_dir: /app
command: >
sh -c "pip install mlflow &&
mlflow server --host 0.0.0.0 --port 5000 --backend-store-uri file:///mlruns"
environment:
- MLFLOW_BACKEND_STORE_URI=file:///mlruns
networks:
- nlp-network
profiles:
- tracking
# Optional: Jupyter notebook for development
jupyter:
build:
context: .
dockerfile: Dockerfile.dev
container_name: jupyter-notebook
ports:
- "8888:8888"
volumes:
- .:/app
- jupyter-data:/home/jovyan/work
environment:
- JUPYTER_ENABLE_LAB=yes
command: >
sh -c "pip install jupyter jupyterlab &&
jupyter lab --ip=0.0.0.0 --port=8888 --no-browser --allow-root --NotebookApp.token=''"
networks:
- nlp-network
profiles:
- dev
networks:
nlp-network:
driver: bridge
volumes:
jupyter-data: