diff --git a/motm_app/Containerfile b/motm_app/Containerfile new file mode 100644 index 0000000..0f173a8 --- /dev/null +++ b/motm_app/Containerfile @@ -0,0 +1,75 @@ +# Containerfile for MOTM (Man of the Match) Application +# Flask-based voting system for hockey matches + +# 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 ./ +RUN pip install --upgrade pip && \ + pip install -r 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=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", "main.py"]