# Use Python 3.11 slim image for smaller size FROM python:3.11-slim # Set working directory WORKDIR /app # Install system dependencies required for geospatial libraries RUN apt-get update && apt-get install -y \ gcc \ g++ \ libgeos-dev \ libproj-dev \ proj-data \ proj-bin \ libgdal-dev \ gdal-bin \ libspatialindex-dev \ && rm -rf /var/lib/apt/lists/* # Copy requirements first for better Docker layer caching COPY requirements.txt . # Install Python dependencies RUN pip install --no-cache-dir -r requirements.txt # Copy application files COPY . . # Create a non-root user for security RUN useradd -m -u 1000 streamlit && \ chown -R streamlit:streamlit /app USER streamlit # Expose port EXPOSE 8501 # Set environment variables for Streamlit ENV STREAMLIT_SERVER_PORT=8501 ENV STREAMLIT_SERVER_ADDRESS=0.0.0.0 ENV STREAMLIT_SERVER_HEADLESS=true ENV STREAMLIT_SERVER_ENABLE_CORS=false ENV STREAMLIT_SERVER_ENABLE_XSRF_PROTECTION=false # Health check HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \ CMD curl -f http://localhost:8501/_stcore/health || exit 1 # Run the application CMD ["streamlit", "run", "app.py", "--server.port=8501", "--server.address=0.0.0.0"]