mcmqtt/Dockerfile
Ryan Malloy 8ab61eb1df 🚀 Initial release: mcmqtt FastMCP MQTT Server v2025.09.17
Complete FastMCP MQTT integration server featuring:

 Core Features:
- FastMCP native Model Context Protocol server with MQTT tools
- Embedded MQTT broker support with zero-configuration spawning
- Modular architecture: CLI, config, logging, server, MQTT, MCP, broker
- Comprehensive testing: 70+ tests with 96%+ coverage
- Cross-platform support: Linux, macOS, Windows

🏗️ Architecture:
- Clean separation of concerns across 7 modules
- Async/await patterns throughout for maximum performance
- Pydantic models with validation and configuration management
- AMQTT pure Python embedded brokers
- Typer CLI framework with rich output formatting

🧪 Quality Assurance:
- pytest-cov with HTML reporting
- AsyncMock comprehensive unit testing
- Edge case coverage for production reliability
- Pre-commit hooks with black, ruff, mypy

📦 Production Ready:
- PyPI package with proper metadata
- MIT License
- Professional documentation
- uvx installation support
- MCP client integration examples

Perfect for AI agent coordination, IoT data collection, and
microservice communication with MQTT messaging patterns.
2025-09-17 05:46:08 -06:00

58 lines
1.4 KiB
Docker

# Use official uv image for better caching and performance
FROM ghcr.io/astral-sh/uv:python3.11-bookworm-slim AS base
# Set environment variables
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV UV_COMPILE_BYTECODE=1
ENV UV_LINK_MODE=copy
# Create non-root user
RUN useradd --create-home --shell /bin/bash app
# Set working directory
WORKDIR /app
# Copy dependency files
COPY --chown=app:app pyproject.toml uv.lock* ./
# Development stage
FROM base AS dev
# Install development dependencies with cache mount
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --dev --frozen
# Copy source code
COPY --chown=app:app . .
# Switch to non-root user
USER app
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost:3000/health || exit 1
# Default command for development (with reload)
CMD ["uv", "run", "--reload", "mcmqtt.main:main"]
# Production stage
FROM base AS prod
# Install production dependencies only with cache mount
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --no-dev --frozen --no-editable
# Copy source code
COPY --chown=app:app src/ ./src/
COPY --chown=app:app README.md ./
# Switch to non-root user
USER app
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost:3000/health || exit 1
# Production command
CMD ["uv", "run", "mcmqtt.main:main"]