Files

94 lines
4.5 KiB
Docker

FROM node:22-bookworm-slim@sha256:6c74791e557ce11fc957704f6d4fe134a7bc8d6f5ca4403205b2966bd488f6b3 AS web-build
ARG OPEN_WEBUI_REF=v0.9.6
ARG OPEN_WEBUI_COMMIT=1a97751e376e00a1897bc3679215ae1c7bd8fd42
RUN apt-get update && apt-get install -y --no-install-recommends git ca-certificates librsvg2-bin \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /src
RUN git clone --depth 1 --branch "${OPEN_WEBUI_REF}" https://github.com/open-webui/open-webui.git . \
&& test "$(git rev-parse HEAD)" = "${OPEN_WEBUI_COMMIT}"
COPY docker/web/ModelSelector.svelte src/lib/components/chat/ModelSelector.svelte
COPY docker/web/WorkspaceFiles.svelte src/lib/components/chat/WorkspaceFiles.svelte
COPY docker/web/k1412_workspace.py backend/open_webui/routers/k1412_workspace.py
COPY docker/web/k1412-logo.svg /tmp/k1412-logo.svg
COPY docker/web/openwebui-no-rag.patch /tmp/openwebui-no-rag.patch
COPY docker/web/openwebui-local-storage.patch /tmp/openwebui-local-storage.patch
COPY docker/web/openwebui-lazy-azure.patch /tmp/openwebui-lazy-azure.patch
COPY docker/web/openwebui-product-ui.patch /tmp/openwebui-product-ui.patch
COPY docker/web/openwebui-workspace-router.patch /tmp/openwebui-workspace-router.patch
COPY docker/web/openwebui-brand.patch /tmp/openwebui-brand.patch
RUN git apply /tmp/openwebui-no-rag.patch \
&& git apply /tmp/openwebui-local-storage.patch \
&& git apply /tmp/openwebui-lazy-azure.patch \
&& git apply /tmp/openwebui-product-ui.patch \
&& git apply /tmp/openwebui-workspace-router.patch \
&& git apply /tmp/openwebui-brand.patch
RUN cp /tmp/k1412-logo.svg static/static/favicon.svg \
&& rsvg-convert --width 512 --height 512 /tmp/k1412-logo.svg --output static/favicon.png \
&& rsvg-convert --width 512 --height 512 /tmp/k1412-logo.svg --output static/static/favicon.png \
&& rsvg-convert --width 500 --height 500 /tmp/k1412-logo.svg --output static/static/logo.png \
&& rsvg-convert --width 500 --height 500 /tmp/k1412-logo.svg --output static/static/splash.png \
&& rsvg-convert --width 500 --height 500 /tmp/k1412-logo.svg --output static/static/splash-dark.png \
&& rsvg-convert --width 180 --height 180 /tmp/k1412-logo.svg --output static/static/apple-touch-icon.png \
&& rsvg-convert --width 192 --height 192 /tmp/k1412-logo.svg --output static/static/web-app-manifest-192x192.png \
&& rsvg-convert --width 512 --height 512 /tmp/k1412-logo.svg --output static/static/web-app-manifest-512x512.png
RUN npm ci --no-audit --no-fund \
&& npx vite build
FROM python:3.12-slim-bookworm@sha256:d50fb7611f86d04a3b0471b46d7557818d88983fc3136726336b2a4c657aa30b AS backend-deps
RUN apt-get update \
&& apt-get upgrade --yes --no-install-recommends \
&& apt-get install --yes --no-install-recommends build-essential \
&& rm -rf /var/lib/apt/lists/*
COPY docker/web-requirements.txt /tmp/web-requirements.txt
RUN --mount=type=cache,target=/root/.cache/pip \
python -m pip install --upgrade pip==26.1.2 \
&& python -m pip download --only-binary=:all: --dest /wheels pip==26.1.2 \
&& python -m pip wheel --wheel-dir /wheels --requirement /tmp/web-requirements.txt
FROM python:3.12-slim-bookworm@sha256:d50fb7611f86d04a3b0471b46d7557818d88983fc3136726336b2a4c657aa30b
ENV PYTHONUNBUFFERED=1 \
ENV=prod \
PORT=8080 \
USE_OLLAMA_DOCKER=false \
USE_CUDA_DOCKER=false \
USE_SLIM_DOCKER=true \
SCARF_NO_ANALYTICS=true \
DO_NOT_TRACK=true \
ANONYMIZED_TELEMETRY=false \
VECTOR_DB=disabled \
DOCKER=true
RUN apt-get update \
&& apt-get upgrade --yes --no-install-recommends \
&& apt-get install --yes --no-install-recommends bash curl tini \
&& rm -rf /var/lib/apt/lists/*
COPY --from=backend-deps /wheels /wheels
COPY docker/web-requirements.txt /tmp/web-requirements.txt
RUN python -m pip install --no-cache-dir --no-index --find-links=/wheels --upgrade pip==26.1.2 \
&& python -m pip install --no-cache-dir --no-index --find-links=/wheels --requirement /tmp/web-requirements.txt \
&& rm -rf /wheels /tmp/web-requirements.txt
WORKDIR /app/backend
COPY --from=web-build /src/backend /app/backend
COPY --from=web-build /src/build /app/build
COPY --from=web-build /src/CHANGELOG.md /app/CHANGELOG.md
COPY docs/site /app/build/doc
COPY --from=web-build /src/LICENSE /app/OPEN_WEBUI_LICENSE
COPY THIRD_PARTY_NOTICES.md /app/THIRD_PARTY_NOTICES.md
EXPOSE 8080
HEALTHCHECK --interval=15s --timeout=5s --retries=20 CMD \
curl --silent --fail http://127.0.0.1:8080/health
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["bash", "start.sh"]