+18


![dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>](/assets/img/avatar_default.png)

![autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>](/assets/img/avatar_default.png)




FFXN
GitHub
yyh
盐粒 Yanli
autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
Tianle
dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Yunlu Wen
zyssyz123
Claude Opus 4.7
chariri
Asuka Minato
Copilot Autofix powered by AI
Nian
非法操作
Carmen Fernández Ruiz
wangxiaolei
QuantumGhost
L1nSn0w
Evan
Escape0707
Jingyi
Amr Sherif
ZHOU ZHICHEN
unknown
JzoNg
Xiyuan Chen
-LAN-
5730ede96f
Signed-off-by: dependabot[bot] <[email protected]> Signed-off-by: EvanYao826 <[email protected]> Co-authored-by: yyh <[email protected]> Co-authored-by: 盐粒 Yanli <[email protected]> Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Tianle <[email protected]> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Yunlu Wen <[email protected]> Co-authored-by: zyssyz123 <[email protected]> Co-authored-by: Claude Opus 4.7 (1M context) <[email protected]> Co-authored-by: chariri <[email protected]> Co-authored-by: Asuka Minato <[email protected]> Co-authored-by: Copilot Autofix powered by AI <[email protected]> Co-authored-by: Nian <[email protected]> Co-authored-by: 非法操作 <[email protected]> Co-authored-by: Carmen Fernández Ruiz <[email protected]> Co-authored-by: wangxiaolei <[email protected]> Co-authored-by: QuantumGhost <[email protected]> Co-authored-by: L1nSn0w <[email protected]> Co-authored-by: Evan <[email protected]> Co-authored-by: Escape0707 <[email protected]> Co-authored-by: Jingyi <[email protected]> Co-authored-by: Amr Sherif <[email protected]> Co-authored-by: ZHOU ZHICHEN <[email protected]> Co-authored-by: unknown <[email protected]> Co-authored-by: JzoNg <[email protected]> Co-authored-by: Xiyuan Chen <[email protected]> Co-authored-by: -LAN- <[email protected]>
127 lines
4.0 KiB
Docker
127 lines
4.0 KiB
Docker
# base image
|
|
FROM python:3.12-slim-bookworm AS base
|
|
|
|
WORKDIR /app/api
|
|
|
|
# Install uv
|
|
ENV UV_VERSION=0.8.9
|
|
|
|
RUN pip install --no-cache-dir uv==${UV_VERSION}
|
|
|
|
|
|
FROM base AS packages
|
|
|
|
# if you located in China, you can use aliyun mirror to speed up
|
|
# RUN sed -i '[email protected]@mirrors.aliyun.com@g' /etc/apt/sources.list.d/debian.sources
|
|
|
|
RUN apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
# basic environment
|
|
g++ \
|
|
# for building gmpy2
|
|
libmpfr-dev libmpc-dev
|
|
|
|
# Install Python dependencies (workspace members under providers/vdb/)
|
|
COPY api/pyproject.toml api/uv.lock ./
|
|
COPY api/providers ./providers
|
|
COPY dify-agent/pyproject.toml dify-agent/README.md /app/dify-agent/
|
|
COPY dify-agent/src /app/dify-agent/src
|
|
# Trust the checked-in lock during image builds; local path sources are copied from the repository context.
|
|
RUN uv sync --frozen --no-dev
|
|
|
|
# production stage
|
|
FROM base AS production
|
|
|
|
ENV FLASK_APP=app.py
|
|
ENV EDITION=SELF_HOSTED
|
|
ENV DEPLOY_ENV=PRODUCTION
|
|
ENV CONSOLE_API_URL=http://127.0.0.1:5001
|
|
ENV CONSOLE_WEB_URL=http://127.0.0.1:3000
|
|
ENV SERVICE_API_URL=http://127.0.0.1:5001
|
|
ENV APP_WEB_URL=http://127.0.0.1:3000
|
|
|
|
EXPOSE 5001
|
|
|
|
# set timezone
|
|
ENV TZ=UTC
|
|
|
|
# Set UTF-8 locale
|
|
ENV LANG=en_US.UTF-8
|
|
ENV LC_ALL=en_US.UTF-8
|
|
ENV PYTHONIOENCODING=utf-8
|
|
|
|
WORKDIR /app/api
|
|
|
|
# Create non-root user
|
|
ARG dify_uid=1001
|
|
ARG NODE_MAJOR=22
|
|
ARG NODE_PACKAGE_VERSION=22.21.0-1nodesource1
|
|
ARG NODESOURCE_KEY_FPR=6F71F525282841EEDAF851B42F59B5F99B1BE0B4
|
|
RUN groupadd -r -g ${dify_uid} dify && \
|
|
useradd -r -u ${dify_uid} -g ${dify_uid} -s /bin/bash dify && \
|
|
chown -R dify:dify /app
|
|
|
|
RUN \
|
|
apt-get update \
|
|
&& apt-get install -y --no-install-recommends \
|
|
ca-certificates \
|
|
curl \
|
|
gnupg \
|
|
&& mkdir -p /etc/apt/keyrings \
|
|
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key -o /tmp/nodesource.gpg \
|
|
&& gpg --show-keys --with-colons /tmp/nodesource.gpg \
|
|
| awk -F: '/^fpr:/ {print $10}' \
|
|
| grep -Fx "${NODESOURCE_KEY_FPR}" \
|
|
&& gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg /tmp/nodesource.gpg \
|
|
&& rm -f /tmp/nodesource.gpg \
|
|
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_MAJOR}.x nodistro main" \
|
|
> /etc/apt/sources.list.d/nodesource.list \
|
|
&& apt-get update \
|
|
# Install dependencies
|
|
&& apt-get install -y --no-install-recommends \
|
|
# basic environment
|
|
nodejs=${NODE_PACKAGE_VERSION} \
|
|
# for gmpy2 \
|
|
libgmp-dev libmpfr-dev libmpc-dev \
|
|
# For Security
|
|
expat libldap-2.5-0=2.5.13+dfsg-5 perl libsqlite3-0=3.40.1-2+deb12u2 zlib1g=1:1.2.13.dfsg-1 \
|
|
# install fonts to support the use of tools like pypdfium2
|
|
fonts-noto-cjk \
|
|
# install a package to improve the accuracy of guessing mime type and file extension
|
|
media-types \
|
|
# install libmagic to support the use of python-magic guess MIMETYPE
|
|
libmagic1 \
|
|
&& apt-get autoremove -y \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Copy Python environment and packages
|
|
ENV VIRTUAL_ENV=/app/api/.venv
|
|
COPY --from=packages --chown=dify:dify ${VIRTUAL_ENV} ${VIRTUAL_ENV}
|
|
COPY --from=packages --chown=dify:dify /app/dify-agent /app/dify-agent
|
|
ENV PATH="${VIRTUAL_ENV}/bin:${PATH}"
|
|
|
|
# Download nltk data
|
|
RUN mkdir -p /usr/local/share/nltk_data \
|
|
&& NLTK_DATA=/usr/local/share/nltk_data python -c "import nltk; nltk.download('punkt'); nltk.download('averaged_perceptron_tagger'); nltk.download('stopwords')" \
|
|
&& chmod -R 755 /usr/local/share/nltk_data
|
|
|
|
ENV TIKTOKEN_CACHE_DIR=/app/api/.tiktoken_cache
|
|
|
|
RUN python -c "import tiktoken; tiktoken.encoding_for_model('gpt2')" \
|
|
&& chown -R dify:dify ${TIKTOKEN_CACHE_DIR}
|
|
|
|
# Copy source code
|
|
COPY --chown=dify:dify api /app/api/
|
|
|
|
# Prepare entrypoint script
|
|
COPY --chown=dify:dify --chmod=755 api/docker/entrypoint.sh /entrypoint.sh
|
|
|
|
|
|
ARG COMMIT_SHA
|
|
ENV COMMIT_SHA=${COMMIT_SHA}
|
|
ENV NLTK_DATA=/usr/local/share/nltk_data
|
|
|
|
USER dify
|
|
|
|
ENTRYPOINT ["/bin/bash", "/entrypoint.sh"]
|