# ---------- Stage 1: Frontend ---------- FROM node:20-bullseye-slim AS frontend WORKDIR /app # Pull source with all submodules RUN apt-get update && apt-get install -y git \ && git clone --branch main --recurse-submodules https://github.com/open-webui/open-webui.git . \ && git submodule update --init --recursive # Build frontend ENV NODE_OPTIONS="--max_old_space_size=8192" RUN npm ci --legacy-peer-deps && npm run build # Optional check RUN ls -la /app/build # ---------- Stage 2: Backend ---------- FROM nvidia/cuda:12.9.1-cudnn-runtime-ubuntu22.04 # Install system deps RUN apt-get update && apt-get install -y \ python3.11 python3-pip git curl libgl1 libglib2.0-0 ffmpeg \ && apt-get clean && rm -rf /var/lib/apt/lists/* RUN update-alternatives --install /usr/bin/python python /usr/bin/python3.11 1 \ && update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1 RUN python -m pip install --upgrade pip # Clone backend code WORKDIR /app RUN git clone --branch main --recurse-submodules https://github.com/open-webui/open-webui.git . \ && git submodule update --init --recursive # Patch (if needed) for logging API change RUN sed -i 's/logging.getLevelNamesMapping()/logging._nameToLevel/' backend/open_webui/env.py # Copy frontend build from Stage 1 COPY --from=frontend /app/build /app/build # Install Python deps WORKDIR /app/backend RUN pip install --no-cache-dir -r requirements.txt uvicorn \ && pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121 # Force Python to see /app as a top‑level package location WORKDIR /app ENV PYTHONPATH=/app:/app/backend EXPOSE 3000 CMD ["uvicorn", "backend.open_webui.main:app", "--host", "0.0.0.0", "--port", "3000"]