# Multi-stage Docker build for Northern Thailand Ping River Monitor # Build stage FROM python:3.11-slim as builder # Set working directory WORKDIR /app # Install build dependencies RUN apt-get update && apt-get install -y \ build-essential \ gcc \ && rm -rf /var/lib/apt/lists/* # Copy requirements and install Python dependencies COPY requirements.txt . RUN pip install --no-cache-dir --user -r requirements.txt # Production stage FROM python:3.11-slim # Set working directory WORKDIR /app # Install runtime dependencies RUN apt-get update && apt-get install -y \ wget \ curl \ && rm -rf /var/lib/apt/lists/* \ && groupadd -r appuser && useradd -r -g appuser appuser # Copy Python packages from builder stage COPY --from=builder /root/.local /root/.local # Copy application code COPY . . # Create logs directory and set permissions RUN mkdir -p logs && chown -R appuser:appuser /app # Set environment variables ENV PYTHONUNBUFFERED=1 ENV TZ=Asia/Bangkok ENV PATH=/root/.local/bin:$PATH # Switch to non-root user USER appuser # Health check for API mode HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD python -c "import requests; requests.get('http://localhost:8000/health', timeout=5)" 2>/dev/null || exit 1 # Expose port for API EXPOSE 8000 # Default command CMD ["python", "run.py", "--web-api"]