CoolFace
Apppublic

krinlove/open-webui

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
Dockerfile162 linesDownload Raw Back to root
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