diff --git a/additional codes/streamlit_app_dockerfile b/additional codes/streamlit_app_dockerfile new file mode 100644 index 0000000..5f1ed44 --- /dev/null +++ b/additional codes/streamlit_app_dockerfile @@ -0,0 +1,50 @@ +# Multi-stage build for PACKMAN Streamlit Web Application +FROM python:3.10-slim AS builder + +# Install system dependencies +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential \ + git \ + && rm -rf /var/lib/apt/lists/* + +# Create virtual environment +RUN python -m venv /opt/venv +ENV PATH="/opt/venv/bin:$PATH" + +# Copy requirements first for better caching +RUN pip install --no-cache-dir --upgrade pip setuptools wheel && \ + pip install --no-cache-dir py-packman streamlit stmol py3Dmol ipython_genutils + +# Final stage +FROM python:3.10-slim + +# Install runtime dependencies only +RUN apt-get update && apt-get install -y --no-install-recommends \ + libgomp1 \ + && rm -rf /var/lib/apt/lists/* + +# Copy virtual environment from builder +COPY --from=builder /opt/venv /opt/venv +ENV PATH="/opt/venv/bin:$PATH" + +# Set working directory +WORKDIR /app + +# Copy application code +COPY streamlit_app.py /app/ + +# Create non-root user for security +RUN useradd -m -u 1000 streamlit && \ + chown -R streamlit:streamlit /app + +USER streamlit + +# Expose Streamlit port +EXPOSE 8501 + +# Run Streamlit app +CMD ["streamlit", "run", "streamlit_app.py", \ + "--server.port=8501", \ + "--server.address=0.0.0.0", \ + "--server.headless=true", \ + "--logger.level=info"]