- Implement health check endpoints for system monitoring including basic, detailed, readiness, liveness, and metrics. - Create process control endpoints to start, stop, pause, resume, and manage processes. - Add recipe management endpoints for listing, creating, retrieving, updating, deleting, duplicating, and validating recipes. - Introduce system management endpoints for retrieving system information, active alarms, and configuration. - Establish user management endpoints for listing and creating users with placeholder implementations. - Define Pydantic schemas for API request/response validation related to recipes, processes, and users.
81 lines
2.0 KiB
Docker
81 lines
2.0 KiB
Docker
# Multi-stage Docker build for chocolate tempering machine control system
|
|
|
|
# Build stage
|
|
FROM python:3.11-slim as builder
|
|
|
|
# Set build arguments
|
|
ARG BUILD_ENV=production
|
|
|
|
# Install system dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
build-essential \
|
|
gcc \
|
|
g++ \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Set work directory
|
|
WORKDIR /app
|
|
|
|
# Copy requirements
|
|
COPY requirements.txt requirements-dev.txt ./
|
|
|
|
# Install Python dependencies
|
|
RUN pip install --no-cache-dir --upgrade pip && \
|
|
pip install --no-cache-dir -r requirements.txt
|
|
|
|
# If development build, install dev dependencies
|
|
RUN if [ "$BUILD_ENV" = "development" ]; then \
|
|
pip install --no-cache-dir -r requirements-dev.txt; \
|
|
fi
|
|
|
|
# Production stage
|
|
FROM python:3.11-slim as production
|
|
|
|
# Set environment variables
|
|
ENV PYTHONPATH=/app/src
|
|
ENV PYTHONUNBUFFERED=1
|
|
ENV PYTHONDONTWRITEBYTECODE=1
|
|
|
|
# Create non-root user
|
|
RUN groupadd -r tempering && useradd -r -g tempering tempering
|
|
|
|
# Install runtime dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
curl \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Set work directory
|
|
WORKDIR /app
|
|
|
|
# Copy Python dependencies from builder stage
|
|
COPY --from=builder /usr/local/lib/python3.11/site-packages /usr/local/lib/python3.11/site-packages
|
|
COPY --from=builder /usr/local/bin /usr/local/bin
|
|
|
|
# Copy application code
|
|
COPY src/ ./src/
|
|
COPY alembic.ini ./
|
|
COPY alembic/ ./alembic/
|
|
|
|
# Create necessary directories
|
|
RUN mkdir -p /app/data /app/logs /app/config /app/backups && \
|
|
chown -R tempering:tempering /app
|
|
|
|
# Copy startup script
|
|
COPY docker/entrypoint.sh ./entrypoint.sh
|
|
RUN chmod +x ./entrypoint.sh
|
|
|
|
# Health check
|
|
HEALTHCHECK --interval=30s --timeout=30s --start-period=60s --retries=3 \
|
|
CMD curl -f http://localhost:8000/health/live || exit 1
|
|
|
|
# Switch to non-root user
|
|
USER tempering
|
|
|
|
# Expose port
|
|
EXPOSE 8000
|
|
|
|
# Set entrypoint
|
|
ENTRYPOINT ["./entrypoint.sh"]
|
|
|
|
# Default command
|
|
CMD ["web"] |