Files
HartOMat/render-worker/Dockerfile
T
Hartmut 9d1a820295 refactor(A2): replace blender-renderer HTTP service with render-worker Celery container
- Create render-worker/ with Dockerfile (Ubuntu + cadquery + Blender via host mount)
- Add render-worker/check_version.py: verifies Blender >= 5.0.1 at startup, Exit 1 on failure
- Add render-worker/scripts/: blender_render.py, still_render.py, turntable_render.py
- Create backend/app/services/render_blender.py: direct subprocess rendering
  - convert_step_to_stl() and export_per_part_stls() using cadquery
  - render_still(): STEP → STL → PNG via Blender subprocess
  - is_blender_available(): detects BLENDER_BIN env for render-worker context
- Create backend/app/domains/rendering/tasks.py: render_still_task + render_turntable_task
- Update step_processor.py: use subprocess path when BLENDER_BIN env is set (render-worker)
- Update step_tasks.py: generate_stl_cache uses direct cadquery instead of HTTP
- Remove blender-renderer and threejs-renderer from docker-compose.yml
- Replace worker-thumbnail with render-worker (Ubuntu + cadquery + Blender mount)
- Remove Docker SDK from backend Dockerfile (was only for flamenco scaling)
- Update .env.example: BLENDER_VERSION=5.0.1 documented
- Update celery_app.py: include domains.rendering.tasks in autodiscover

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-06 15:48:46 +01:00

62 lines
1.7 KiB
Docker

FROM ubuntu:22.04
ARG BLENDER_VERSION=5.0.1
ENV DEBIAN_FRONTEND=noninteractive
ENV PYTHONUNBUFFERED=1
ENV BLENDER_VERSION=${BLENDER_VERSION}
# Blender 5.x is mounted from the host at /opt/blender (see docker-compose.yml)
ENV BLENDER_BIN=/opt/blender/blender
# OSMesa for headless cadquery/VTK (no display needed)
ENV PYOPENGL_PLATFORM=osmesa
ENV VTK_DEFAULT_EGL=0
# Runtime libraries for cadquery/OCC + Blender 5.x headless
RUN apt-get update && apt-get install -y --no-install-recommends \
python3-pip \
python3-dev \
libpq-dev \
gcc \
libxrender1 \
libxi6 \
libxkbcommon-x11-0 \
libsm6 \
libglib2.0-0 \
libgl1-mesa-glx \
libosmesa6 \
libgomp1 \
libxfixes3 \
libxrandr2 \
libxcursor1 \
libxinerama1 \
libwayland-client0 \
libwayland-cursor0 \
libwayland-egl1 \
libvulkan1 \
mesa-vulkan-drivers \
libegl1 \
libegl-mesa0 \
libgbm1 \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /app
# Install backend Python dependencies (includes celery, sqlalchemy, fastapi, etc.)
COPY pyproject.toml .
RUN pip3 install --no-cache-dir -e .
# Install cadquery (heavy — installed after backend deps for better layer caching)
RUN pip3 install --no-cache-dir "cadquery>=2.4.0"
# Copy render scripts
COPY scripts/ /render-scripts/
# Version check script — fails fast if Blender < 5.0.1
COPY check_version.py /check_version.py
# Copy app code (overridden by volume mount in docker-compose)
COPY . .
# Verify Blender version at build time if binary is available
# (skipped during build since /opt/blender is a host mount)
CMD ["bash", "-c", "python3 /check_version.py && celery -A app.tasks.celery_app worker --loglevel=info -Q thumbnail_rendering --concurrency=1"]