From 04f18dfadb0c21ef2db44b864f986cdf83d5daca Mon Sep 17 00:00:00 2001 From: 666ghj <670939375@qq.com> Date: Thu, 9 Oct 2025 16:28:37 +0800 Subject: [PATCH] Add initial Docker configuration. --- .dockerignore | 12 ++++++++++ Dockerfile | 55 ++++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 23 +++++++++++++++++++ 3 files changed, 90 insertions(+) create mode 100644 .dockerignore create mode 100644 Dockerfile create mode 100644 docker-compose.yml diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..b09138a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,12 @@ +.git +.gitmodules +.vscode +.cursor +__pycache__ +*.py[cod] +*.pyo +*.pyd +*.log +*.sqlite3 +.DS_Store +Thumbs.db diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1d770be --- /dev/null +++ b/Dockerfile @@ -0,0 +1,55 @@ +FROM python:3.11-slim + +# Prevent Python from writing .pyc files and buffer stdout/stderr +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PIP_NO_CACHE_DIR=1 + +# Install system dependencies required by scientific Python stack, Playwright, and Streamlit +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + curl \ + git \ + libgl1 \ + libglib2.0-0 \ + libgtk-3-0 \ + libpango-1.0-0 \ + libpangocairo-1.0-0 \ + libatk1.0-0 \ + libatk-bridge2.0-0 \ + libxcb1 \ + libxcomposite1 \ + libxdamage1 \ + libxext6 \ + libxfixes3 \ + libxi6 \ + libxtst6 \ + libnss3 \ + libxrandr2 \ + libxkbcommon0 \ + libasound2 \ + libx11-xcb1 \ + libxshmfence1 \ + libgbm1 \ + ffmpeg \ + && apt-get clean && rm -rf /var/lib/apt/lists/* + +WORKDIR /app + +# Install Python dependencies first to leverage Docker layer caching +COPY requirements.txt ./ +RUN pip install --upgrade pip && \ + pip install -r requirements.txt && \ + python -m playwright install chromium + +# Copy application source +COPY . . + +# Ensure runtime directories exist even if ignored in build context +RUN mkdir -p logs final_reports insight_engine_streamlit_reports media_engine_streamlit_reports query_engine_streamlit_reports + +# Expose Flask and Streamlit ports +EXPOSE 5000 8501 8502 8503 + +# Default command launches the Flask orchestrator which starts Streamlit agents +CMD ["python", "app.py"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..0aab3d4 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,23 @@ +version: "3.9" + +services: + bettafish: + build: + context: . + dockerfile: Dockerfile + image: bettafish:latest + container_name: bettafish + restart: unless-stopped + environment: + - PYTHONUNBUFFERED=1 + ports: + - "5000:5000" + - "8501:8501" + - "8502:8502" + - "8503:8503" + volumes: + - ./logs:/app/logs + - ./final_reports:/app/final_reports + - ./insight_engine_streamlit_reports:/app/insight_engine_streamlit_reports + - ./media_engine_streamlit_reports:/app/media_engine_streamlit_reports + - ./query_engine_streamlit_reports:/app/query_engine_streamlit_reports