Files
EasyFlow/Dockerfile
陈子默 4e8640dcaf feat: 完善 Agent 标准交互与安全运行时
- 接入 AG-UI 运行投影、Turn 时间线和审批隔离

- 增加 Agent Skill 冻结绑定与运行时消费闭环

- 增加受控工作区、内置工具和私有 Artifact 生命周期
2026-08-19 22:13:41 +08:00

139 lines
4.5 KiB
Docker

# 后端构建脚本
FROM swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/eclipse-temurin:17-jre
ENV LANG=C.UTF-8
ENV LC_ALL=C.UTF-8
ENV TZ=Asia/Shanghai
ENV JAVA_OPTS=""
ENV EASYFLOW_JAR_PATH=/app/artifacts/easyflow.jar
ENV EASYFLOW_CONFIG_PATH=file:/app/application.yml
ENV EASYFLOW_LOG_FILE=/app/logs/app.log
ENV EASYFLOW_JAR_RESTART_GRACE_SECONDS=30
ENV NPM_CONFIG_REGISTRY=https://registry.npmjs.org
ENV PIP_INDEX_URL=https://pypi.org/simple
ENV PYTHONPATH=/opt/easyflow/python-packages
ENV NODE_PATH=/app/node_modules
WORKDIR /app
ARG DEBIAN_FRONTEND=noninteractive
RUN useradd --system --create-home easyflow && \
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.key && \
gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg /tmp/nodesource.gpg.key && \
chmod 644 /etc/apt/keyrings/nodesource.gpg && \
printf "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_24.x nodistro main\n" > /etc/apt/sources.list.d/nodesource.list && \
rm -f /tmp/nodesource.gpg.key && \
apt-get update && \
apt-get install -y --no-install-recommends \
coreutils \
diffutils \
file \
findutils \
fontconfig \
fonts-liberation2 \
fonts-noto-cjk \
gawk \
grep \
gzip \
inotify-tools \
jq \
libdigest-sha-perl \
libreoffice-calc \
libreoffice-impress \
libreoffice-writer \
nodejs \
pandoc \
poppler-utils \
procps \
python3 \
python3-pip \
python3-venv \
qpdf \
ripgrep \
sed \
tar \
tree \
unzip \
util-linux \
zip \
tini && \
rm -rf /var/lib/apt/lists/*
RUN mkdir -p /etc/pip "${PYTHONPATH}" /opt/easyflow/node-runtime && \
ln -sf /usr/bin/python3 /usr/local/bin/python && \
ln -sf /usr/bin/pip3 /usr/local/bin/pip && \
npm config set registry "${NPM_CONFIG_REGISTRY}" && \
printf "registry=%s\n" "${NPM_CONFIG_REGISTRY}" > /etc/npmrc && \
npm install -g pnpm@10.17.1 && \
pnpm config set registry "${NPM_CONFIG_REGISTRY}" && \
printf "[global]\nindex-url = %s\n" "${PIP_INDEX_URL}" > /etc/pip.conf
RUN python3 -m pip install --no-cache-dir --target "${PYTHONPATH}" \
python-docx==1.2.0 \
python-pptx==1.0.2 \
openpyxl==3.1.5 \
xlsxwriter==3.2.9 \
lxml==6.1.1 \
defusedxml==0.7.1 \
pillow==12.3.0 \
pypdf==6.16.1 \
pdfplumber==0.11.10 \
pdf2image==1.17.0 \
reportlab==5.0.0 \
numpy==2.5.2 \
pandas==3.0.5 \
matplotlib==3.11.1 \
seaborn==0.13.2 \
pyyaml==6.0.3 \
jsonschema==4.26.0 \
jinja2==3.1.6 \
beautifulsoup4==4.15.0 \
pydantic==2.13.4 \
python-dateutil==2.9.0.post0 \
tabulate==0.10.0 \
markdown==3.10.3 \
charset-normalizer==3.5.1 \
tenacity==9.1.4 && \
PYTHONPATH="${PYTHONPATH}" python3 -c "import bs4, defusedxml, docx, jsonschema, lxml, matplotlib, numpy, openpyxl, pandas, pdfplumber, PIL, pptx, pydantic, pypdf, reportlab, seaborn, yaml"
RUN npm install --prefix /opt/easyflow/node-runtime --omit=dev --no-audit --no-fund --save-exact \
docx@9.7.1 \
pptxgenjs@4.0.1 \
sharp@0.35.3 \
pdf-lib@1.17.1 \
pdfjs-dist@6.2.108 \
zod@4.4.3 \
ajv@8.20.0 \
yaml@2.9.0 \
csv-parse@7.0.2 \
csv-stringify@6.8.3 \
fast-xml-parser@5.10.1 \
marked@18.0.9 \
sanitize-html@2.17.7 \
cheerio@1.2.0 \
dayjs@1.11.21 \
handlebars@4.7.9 \
jszip@3.10.1 && \
ln -s /opt/easyflow/node-runtime/node_modules /app/node_modules && \
node -e "for (const name of ['docx','pptxgenjs','sharp','pdf-lib','pdfjs-dist/package.json','zod','ajv','yaml','csv-parse','csv-stringify','fast-xml-parser','marked','sanitize-html','cheerio','dayjs','handlebars','jszip']) require.resolve(name)" && \
npm cache clean --force
RUN fc-cache -f && \
mkdir -p /app/logs /app/artifacts /app/data && \
chown -R easyflow:easyflow /app
COPY docker-entrypoint.sh /usr/local/bin/easyflow-entrypoint.sh
RUN chmod 755 /usr/local/bin/easyflow-entrypoint.sh
VOLUME ["/app/logs", "/app/data"]
EXPOSE 8111
ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/easyflow-entrypoint.sh"]