Dockerfile.production•1.29 kB
# Multi-stage Dockerfile for MCP Oxii-server
FROM python:3.10-slim as builder
# Set environment variables
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV PIP_NO_CACHE_DIR=1
WORKDIR /app
# Install poetry
RUN pip install poetry
# Copy dependency files
COPY pyproject.toml .
# Install dependencies to a virtual environment
RUN poetry config virtualenvs.create true \
&& poetry config virtualenvs.in-project true \
&& poetry install --only main --no-root
# Production stage
FROM python:3.10-slim as production
# Set environment variables
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV PATH="/app/.venv/bin:$PATH"
WORKDIR /app
# Install system dependencies
RUN apt-get update && apt-get install -y \
curl \
&& rm -rf /var/lib/apt/lists/*
# Copy virtual environment from builder stage
COPY --from=builder /app/.venv /app/.venv
# Copy application code
COPY main.py .
COPY tools/ ./tools/
# Create non-root user for security
RUN useradd --create-home --shell /bin/bash appuser \
&& chown -R appuser:appuser /app
USER appuser
# Expose the port
EXPOSE 9031
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \
CMD curl -f http://localhost:9031/health || exit 1
# Run the application
CMD ["python", "main.py"]