# Multi-stage Dockerfile per Datacenter Documentation System # Stage 1: Build MkDocs documentation FROM python:3.11-slim as docs-builder WORKDIR /build # Install MkDocs e plugins RUN pip install --no-cache-dir \ mkdocs==1.5.3 \ mkdocs-material==9.5.3 \ mkdocs-git-revision-date-localized-plugin==1.2.2 \ mkdocs-minify-plugin==0.7.2 \ mkdocs-awesome-pages-plugin==2.9.2 \ mkdocs-macros-plugin==1.0.5 \ markdown==3.5.1 \ pymdown-extensions==10.5 # Copy documentation source COPY mkdocs.yml /build/ COPY docs /build/docs/ COPY templates /build/docs/sections/ # Build documentation RUN mkdocs build --clean --strict # Stage 2: Runtime application FROM python:3.11-slim LABEL maintainer="automation-team@company.com" LABEL description="Datacenter Documentation Server with FastAPI and MCP" # Installinstall system dependencies RUN apt-get update && apt-get install -y \ gcc \ libpq-dev \ openssh-client \ snmp \ curl \ && rm -rf /var/lib/apt/lists/* WORKDIR /app # Copy requirements COPY requirements.txt /app/ COPY api/requirements-api.txt /app/ # Install Python dependencies RUN pip install --no-cache-dir -r requirements.txt \ && pip install --no-cache-dir -r requirements-api.txt # Copy application code COPY api/ /app/api/ COPY mcp-server/ /app/mcp-server/ COPY scripts/ /app/scripts/ # Copy built documentation from builder stage COPY --from=docs-builder /build/site /app/site # Create necessary directories RUN mkdir -p /app/docs/sections /app/config /app/logs # Copy sections (templates will be populated by automation) COPY templates/ /app/docs/sections/ # Create non-root user RUN useradd -m -u 1000 appuser && \ chown -R appuser:appuser /app USER appuser # Expose ports # 8000: FastAPI documentation server # 8001: MCP server EXPOSE 8000 8001 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD curl -f http://localhost:8000/health || exit 1 # Startup script COPY --chown=appuser:appuser docker-entrypoint.sh /app/ RUN chmod +x /app/docker-entrypoint.sh ENTRYPOINT ["/app/docker-entrypoint.sh"] CMD ["server"]