krinlove/open-webui
0
1# syntax=docker/dockerfile:12# Initialize device type args3# use build args in the docker build commmand with --build-arg="BUILDARG=true"4ARG USE_CUDA=false5ARG USE_OLLAMA=false6# Tested with cu117 for CUDA 11 and cu121 for CUDA 12 (default)7ARG USE_CUDA_VER=cu1218# any sentence transformer model; models to use can be found at https://huggingface.co/models?library=sentence-transformers9# Leaderboard: https://huggingface.co/spaces/mteb/leaderboard 10# for better performance and multilangauge support use "intfloat/multilingual-e5-large" (~2.5GB) or "intfloat/multilingual-e5-base" (~1.5GB)11# IMPORTANT: If you change the embedding model (sentence-transformers/all-MiniLM-L6-v2) and vice versa, you aren't able to use RAG Chat with your previous documents loaded in the WebUI! You need to re-embed them.12ARG USE_EMBEDDING_MODEL=sentence-transformers/all-MiniLM-L6-v213ARG USE_RERANKING_MODEL=""14ARG BUILD_HASH=dev-build15# Override at your own risk - non-root configurations are untested16ARG UID=017ARG GID=018 19######## WebUI frontend ########20FROM --platform=$BUILDPLATFORM node:21-alpine3.19 as build21ARG BUILD_HASH22 23WORKDIR /app24 25COPY package.json package-lock.json ./26RUN npm ci27 28COPY . .29 30ENV APP_BUILD_HASH=${BUILD_HASH}31RUN npm run build32 33######## WebUI backend ########34FROM python:3.11-slim-bookworm as base35 36# Use args37ARG USE_CUDA38ARG USE_OLLAMA39ARG USE_CUDA_VER40ARG USE_EMBEDDING_MODEL41ARG USE_RERANKING_MODEL42ARG UID43ARG GID44 45## Basis ##46ENV ENV=prod \47 PORT=8080 \48 # pass build args to the build49 USE_OLLAMA_DOCKER=${USE_OLLAMA} \50 USE_CUDA_DOCKER=${USE_CUDA} \51 USE_CUDA_DOCKER_VER=${USE_CUDA_VER} \52 USE_EMBEDDING_MODEL_DOCKER=${USE_EMBEDDING_MODEL} \53 USE_RERANKING_MODEL_DOCKER=${USE_RERANKING_MODEL}54 55## Basis URL Config ##56ENV OLLAMA_BASE_URL="/ollama" \57 OPENAI_API_BASE_URL=""58 59## API Key and Security Config ##60ENV OPENAI_API_KEY="" \61 WEBUI_SECRET_KEY="" \62 SCARF_NO_ANALYTICS=true \63 DO_NOT_TRACK=true \64 ANONYMIZED_TELEMETRY=false65 66#### Other models #########################################################67## whisper TTS model settings ##68ENV WHISPER_MODEL="base" \69 WHISPER_MODEL_DIR="/app/backend/data/cache/whisper/models"70 71## RAG Embedding model settings ##72ENV RAG_EMBEDDING_MODEL="$USE_EMBEDDING_MODEL_DOCKER" \73 RAG_RERANKING_MODEL="$USE_RERANKING_MODEL_DOCKER" \74 SENTENCE_TRANSFORMERS_HOME="/app/backend/data/cache/embedding/models"75 76## Hugging Face download cache ##77ENV HF_HOME="/app/backend/data/cache/embedding/models"78#### Other models ##########################################################79 80WORKDIR /app/backend81 82ENV HOME /root83# Create user and group if not root84RUN if [ $UID -ne 0 ]; then \85 if [ $GID -ne 0 ]; then \86 addgroup --gid $GID app; \87 fi; \88 adduser --uid $UID --gid $GID --home $HOME --disabled-password --no-create-home app; \89 fi90 91RUN mkdir -p $HOME/.cache/chroma92RUN echo -n 00000000-0000-0000-0000-000000000000 > $HOME/.cache/chroma/telemetry_user_id93 94# Make sure the user has access to the app and root directory95RUN chown -R $UID:$GID /app $HOME96 97RUN if [ "$USE_OLLAMA" = "true" ]; then \98 apt-get update && \99 # Install pandoc and netcat100 apt-get install -y --no-install-recommends pandoc netcat-openbsd curl && \101 # for RAG OCR102 apt-get install -y --no-install-recommends ffmpeg libsm6 libxext6 && \103 # install helper tools104 apt-get install -y --no-install-recommends curl jq && \105 # install ollama106 curl -fsSL https://ollama.com/install.sh | sh && \107 # cleanup108 rm -rf /var/lib/apt/lists/*; \109 else \110 apt-get update && \111 # Install pandoc and netcat112 apt-get install -y --no-install-recommends pandoc netcat-openbsd curl jq && \113 # for RAG OCR114 apt-get install -y --no-install-recommends ffmpeg libsm6 libxext6 && \115 # cleanup116 rm -rf /var/lib/apt/lists/*; \117 fi118 119# install python dependencies120COPY --chown=$UID:$GID ./backend/requirements.txt ./requirements.txt121 122RUN pip3 install uv && \123 if [ "$USE_CUDA" = "true" ]; then \124 # If you use CUDA the whisper and embedding model will be downloaded on first use125 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/$USE_CUDA_DOCKER_VER --no-cache-dir && \126 uv pip install --system -r requirements.txt --no-cache-dir && \127 python -c "import os; from sentence_transformers import SentenceTransformer; SentenceTransformer(os.environ['RAG_EMBEDDING_MODEL'], device='cpu')" && \128 python -c "import os; from faster_whisper import WhisperModel; WhisperModel(os.environ['WHISPER_MODEL'], device='cpu', compute_type='int8', download_root=os.environ['WHISPER_MODEL_DIR'])"; \129 else \130 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu --no-cache-dir && \131 uv pip install --system -r requirements.txt --no-cache-dir && \132 python -c "import os; from sentence_transformers import SentenceTransformer; SentenceTransformer(os.environ['RAG_EMBEDDING_MODEL'], device='cpu')" && \133 python -c "import os; from faster_whisper import WhisperModel; WhisperModel(os.environ['WHISPER_MODEL'], device='cpu', compute_type='int8', download_root=os.environ['WHISPER_MODEL_DIR'])"; \134 fi; \135 chown -R $UID:$GID /app/backend/data/136 137 138 139# copy embedding weight from build140# RUN mkdir -p /root/.cache/chroma/onnx_models/all-MiniLM-L6-v2141# COPY --from=build /app/onnx /root/.cache/chroma/onnx_models/all-MiniLM-L6-v2/onnx142 143# copy built frontend files144COPY --chown=$UID:$GID --from=build /app/build /app/build145COPY --chown=$UID:$GID --from=build /app/CHANGELOG.md /app/CHANGELOG.md146COPY --chown=$UID:$GID --from=build /app/package.json /app/package.json147 148# copy backend files149COPY --chown=$UID:$GID ./backend .150# Copy webui.db to the correct location151# COPY webui.db /app/backend/data/webui.db152EXPOSE 8080153 154HEALTHCHECK CMD curl --silent --fail http://localhost:8080/health | jq -e '.status == true' || exit 1155 156USER $UID:$GID157 158ARG BUILD_HASH159ENV WEBUI_BUILD_VERSION=${BUILD_HASH}160 161CMD [ "bash", "start.sh"]162 