diff --git a/Dockerfile.external b/Dockerfile.external index 3e2530e09..80ffde315 100644 --- a/Dockerfile.external +++ b/Dockerfile.external @@ -2,7 +2,6 @@ FROM python:3.11.6-slim-bookworm as base # Install poetry RUN pip install pipx -RUN python3 -m pipx ensurepath RUN pipx install poetry ENV PATH="/root/.local/bin:$PATH" ENV PATH=".venv/bin/:$PATH" @@ -14,27 +13,38 @@ FROM base as dependencies WORKDIR /home/worker/app COPY pyproject.toml poetry.lock ./ -RUN poetry install --extras "ui vector-stores-qdrant llms-ollama embeddings-ollama" +ARG POETRY_EXTRAS="ui vector-stores-qdrant llms-ollama embeddings-ollama" +RUN poetry install --no-root --extras "${POETRY_EXTRAS}" FROM base as app - ENV PYTHONUNBUFFERED=1 ENV PORT=8080 +ENV APP_ENV=prod +ENV PYTHONPATH="$PYTHONPATH:/home/worker/app/private_gpt/" EXPOSE 8080 # Prepare a non-root user -RUN adduser --system worker +# More info about how to configure UIDs and GIDs in Docker: +# https://github.com/systemd/systemd/blob/main/docs/UIDS-GIDS.md + +# Define the User ID (UID) for the non-root user +# UID 100 is chosen to avoid conflicts with existing system users +ARG UID=100 + +# Define the Group ID (GID) for the non-root user +# GID 65534 is often used for the 'nogroup' or 'nobody' group +ARG GID=65534 + +RUN adduser --system --gid ${GID} --uid ${UID} --home /home/worker worker WORKDIR /home/worker/app -RUN mkdir local_data; chown worker local_data -RUN mkdir models; chown worker models +RUN chown worker /home/worker/app +RUN mkdir local_data && chown worker local_data +RUN mkdir models && chown worker models COPY --chown=worker --from=dependencies /home/worker/app/.venv/ .venv COPY --chown=worker private_gpt/ private_gpt -COPY --chown=worker fern/ fern -COPY --chown=worker *.yaml *.md ./ +COPY --chown=worker *.yaml . COPY --chown=worker scripts/ scripts -ENV PYTHONPATH="$PYTHONPATH:/private_gpt/" - USER worker -ENTRYPOINT python -m private_gpt \ No newline at end of file +ENTRYPOINT python -m private_gpt diff --git a/Dockerfile.local b/Dockerfile.local index 980a9b083..8ee9f1ee0 100644 --- a/Dockerfile.local +++ b/Dockerfile.local @@ -4,7 +4,6 @@ FROM python:3.11.6-slim-bookworm as base # Install poetry RUN pip install pipx -RUN python3 -m pipx ensurepath RUN pipx install poetry ENV PATH="/root/.local/bin:$PATH" ENV PATH=".venv/bin/:$PATH" @@ -24,28 +23,39 @@ FROM base as dependencies WORKDIR /home/worker/app COPY pyproject.toml poetry.lock ./ -RUN poetry install --extras "ui embeddings-huggingface llms-llama-cpp vector-stores-qdrant" +ARG POETRY_EXTRAS="ui embeddings-huggingface llms-llama-cpp vector-stores-qdrant" +RUN poetry install --no-root --extras "${POETRY_EXTRAS}" FROM base as app ENV PYTHONUNBUFFERED=1 ENV PORT=8080 +ENV APP_ENV=prod +ENV PYTHONPATH="$PYTHONPATH:/home/worker/app/private_gpt/" EXPOSE 8080 # Prepare a non-root user -RUN adduser --group worker -RUN adduser --system --ingroup worker worker +# More info about how to configure UIDs and GIDs in Docker: +# https://github.com/systemd/systemd/blob/main/docs/UIDS-GIDS.md + +# Define the User ID (UID) for the non-root user +# UID 100 is chosen to avoid conflicts with existing system users +ARG UID=100 + +# Define the Group ID (GID) for the non-root user +# GID 65534 is often used for the 'nogroup' or 'nobody' group +ARG GID=65534 + +RUN adduser --system --gid ${GID} --uid ${UID} --home /home/worker worker WORKDIR /home/worker/app -RUN mkdir local_data; chown worker local_data -RUN mkdir models; chown worker models +RUN chown worker /home/worker/app +RUN mkdir local_data && chown worker local_data +RUN mkdir models && chown worker models COPY --chown=worker --from=dependencies /home/worker/app/.venv/ .venv COPY --chown=worker private_gpt/ private_gpt -COPY --chown=worker fern/ fern -COPY --chown=worker *.yaml *.md ./ +COPY --chown=worker *.yaml ./ COPY --chown=worker scripts/ scripts -ENV PYTHONPATH="$PYTHONPATH:/private_gpt/" - USER worker ENTRYPOINT python -m private_gpt \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml index f12e1da95..517af6590 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -5,12 +5,15 @@ services: volumes: - ./local_data/:/home/worker/app/local_data ports: - - 8001:8080 + - 8001:8001 environment: - PORT: 8080 + PORT: 8001 PGPT_PROFILES: docker PGPT_MODE: ollama + PGPT_EMBED_MODE: ollama ollama: image: ollama/ollama:latest + ports: + - 11434:11434 volumes: - ./models:/root/.ollama diff --git a/settings-docker.yaml b/settings-docker.yaml index d8037fa6a..59d5f166e 100644 --- a/settings-docker.yaml +++ b/settings-docker.yaml @@ -6,7 +6,7 @@ llm: mode: ${PGPT_MODE:mock} embedding: - mode: ${PGPT_MODE:sagemaker} + mode: ${PGPT_EMBED_MODE:mock} llamacpp: llm_hf_repo_id: ${PGPT_HF_REPO_ID:TheBloke/Mistral-7B-Instruct-v0.1-GGUF} @@ -30,6 +30,7 @@ ollama: repeat_last_n: ${PGPT_OLLAMA_REPEAT_LAST_N:64} repeat_penalty: ${PGPT_OLLAMA_REPEAT_PENALTY:1.2} request_timeout: ${PGPT_OLLAMA_REQUEST_TIMEOUT:600.0} + autopull_models: ${PGPT_OLLAMA_AUTOPULL_MODELS:true} ui: enabled: true