video-processor/Dockerfile
Ryan Malloy 5ca1b7a07d Migrate to Procrastinate 3.x with backward compatibility for 2.x
- Add comprehensive compatibility layer supporting both Procrastinate 2.x and 3.x
- Implement version-aware database migration system with pre/post migrations for 3.x
- Create worker option mapping for seamless transition between versions
- Add extensive test coverage for all compatibility features
- Update dependency constraints to support both 2.x and 3.x simultaneously
- Provide Docker containerization with uv caching and multi-service orchestration
- Include demo applications and web interface for testing capabilities
- Bump version to 0.2.0 reflecting new compatibility features

Key Features:
- Automatic version detection and feature flagging
- Unified connector creation across PostgreSQL drivers
- Worker option translation (timeout → fetch_job_polling_interval)
- Database migration utilities with CLI and programmatic interfaces
- Complete Docker Compose setup with PostgreSQL, Redis, workers, and demos

Files Added:
- src/video_processor/tasks/compat.py - Core compatibility layer
- src/video_processor/tasks/migration.py - Migration utilities
- src/video_processor/tasks/worker_compatibility.py - Worker CLI
- tests/test_procrastinate_compat.py - Compatibility tests
- tests/test_procrastinate_migration.py - Migration tests
- Dockerfile - Multi-stage build with uv caching
- docker-compose.yml - Complete development environment
- examples/docker_demo.py - Containerized demo application
- examples/web_demo.py - Flask web interface demo

Migration Support:
- Procrastinate 2.x: Single migration command compatibility
- Procrastinate 3.x: Separate pre/post migration phases
- Database URL validation and connection testing
- Version-specific feature detection and graceful degradation
2025-09-05 10:38:12 -06:00

84 lines
2.1 KiB
Docker

# Video Processor Dockerfile with uv caching optimization
# Based on uv Docker integration best practices
# https://docs.astral.sh/uv/guides/integration/docker/
FROM python:3.11-slim as base
# Install system dependencies
RUN apt-get update && apt-get install -y \
ffmpeg \
imagemagick \
postgresql-client \
&& rm -rf /var/lib/apt/lists/*
# Install uv
COPY --from=ghcr.io/astral-sh/uv:latest /uv /bin/uv
# Create app directory
WORKDIR /app
# Create user for running the application
RUN groupadd -r app && useradd -r -g app app
# Change to app user for dependency installation
USER app
# Copy dependency files first for better caching
COPY --chown=app:app pyproject.toml uv.lock* ./
# Create virtual environment and install dependencies
# This layer will be cached if dependencies don't change
ENV UV_SYSTEM_PYTHON=1
RUN uv sync --frozen --no-dev
# Copy application code
COPY --chown=app:app . .
# Install the application
RUN uv pip install -e .
# Production stage
FROM base as production
# Set environment variables
ENV PYTHONUNBUFFERED=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV PATH="/app/.venv/bin:$PATH"
# Health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=3 \
CMD python -c "from video_processor import VideoProcessor; print('OK')" || exit 1
# Default command
CMD ["python", "-m", "video_processor.tasks.procrastinate_tasks"]
# Development stage with dev dependencies
FROM base as development
# Install development dependencies
RUN uv sync --frozen
# Install pre-commit hooks
RUN uv run pre-commit install || true
# Set development environment
ENV FLASK_ENV=development
ENV PYTHONPATH=/app
# Default command for development
CMD ["bash"]
# Worker stage for Procrastinate workers
FROM production as worker
# Set worker-specific environment
ENV PROCRASTINATE_WORKER=1
# Command to run Procrastinate worker
CMD ["python", "-m", "video_processor.tasks.worker_compatibility", "worker"]
# Migration stage for database migrations
FROM production as migration
# Command to run migrations
CMD ["python", "-m", "video_processor.tasks.migration"]