# Multi-stage Containerfile for Hockey Results Application # Supports multiple database backends (PostgreSQL, MariaDB, SQLite) # Stage 1: Build stage FROM python:3.11-slim as builder # Set environment variables ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PIP_NO_CACHE_DIR=1 \ PIP_DISABLE_PIP_VERSION_CHECK=1 # Install system dependencies for building Python packages RUN apt-get update && apt-get install -y \ build-essential \ libpq-dev \ default-libmysqlclient-dev \ pkg-config \ && rm -rf /var/lib/apt/lists/* # Create and activate virtual environment RUN python -m venv /opt/venv ENV PATH="/opt/venv/bin:$PATH" # Copy requirements and install Python dependencies COPY requirements.txt motm_app/requirements.txt ./ RUN pip install --upgrade pip && \ pip install -r requirements.txt && \ pip install -r motm_app/requirements.txt # Stage 2: Runtime stage FROM python:3.11-slim # Set environment variables ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ PATH="/opt/venv/bin:$PATH" \ DATABASE_TYPE=sqlite \ FLASK_ENV=production \ FLASK_APP=motm_app/main.py # Install runtime dependencies RUN apt-get update && apt-get install -y \ libpq5 \ default-mysql-client \ curl \ && rm -rf /var/lib/apt/lists/* # Copy virtual environment from builder stage COPY --from=builder /opt/venv /opt/venv # Create non-root user RUN groupadd -r appuser && useradd -r -g appuser appuser # Create application directory WORKDIR /app # Copy application code COPY --chown=appuser:appuser . . # Create directories for data and logs RUN mkdir -p /app/data /app/logs && \ chown -R appuser:appuser /app/data /app/logs # Switch to non-root user USER appuser # Expose port EXPOSE 5000 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:5000/ || exit 1 # Default command CMD ["python", "motm_app/main.py"]