| FROM python:3.13-slim |
|
|
| |
| COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/ |
|
|
| |
| ENV PYTHONUNBUFFERED=1 \ |
| PYTHONDONTWRITEBYTECODE=1 \ |
| PYTHONWARNINGS=ignore \ |
| UV_SYSTEM_PYTHON=1 \ |
| PORT=7860 \ |
| HOME=/home/user \ |
| HF_HOME=/home/user/.cache/huggingface \ |
| DATA_DIR=/home/user/data \ |
| PIP_PORT=7000 |
|
|
| |
| RUN mkdir -p $HOME $HF_HOME $DATA_DIR && chmod -R 777 $HOME |
|
|
| WORKDIR $HOME/app |
|
|
| |
| RUN apt-get update && apt-get install -y --no-install-recommends curl && rm -rf /var/lib/apt/lists/* |
|
|
| |
| COPY ./requirements.txt . |
| RUN --mount=type=cache,target=/home/user/.cache/uv \ |
| uv pip install -r requirements.txt |
|
|
| |
| COPY --chown=1000:1000 . . |
|
|
| |
| RUN --mount=type=cache,target=/home/user/.cache/uv \ |
| uv run python ./pypi_proxy.py --port $PIP_PORT & \ |
| PROXY_PID=$! && \ |
| until curl -s http://127.0.0.1:$PIP_PORT > /dev/null; do \ |
| echo "Waiting for PyPI proxy http://127.0.0.1:$PIP_PORT to start..." && \ |
| sleep 1; \ |
| done && \ |
| uv pip install --index-url http://127.0.0.1:$PIP_PORT/simple/ open-webui && \ |
| uv pip install audioop-lts && \ |
| uv pip uninstall -y torch && \ |
| kill $PROXY_PID |
|
|
| |
| RUN python -c "import site; import os; p = os.path.join(site.getsitepackages()[0], 'sitecustomize.py'); open(p, 'a').write('\ntry:\n import audioop_lts\n import sys\n sys.modules[\'audioop\'] = audioop_lts\nexcept ImportError:\n pass\n')" |
|
|
|
|
| |
| EXPOSE 7860 |
|
|
| |
| CMD ["open-webui", "serve", "--port", "7860"] |