140 lines
4.6 KiB
Docker
140 lines
4.6 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-soffice-wrapper.sh /usr/local/bin/soffice
|
|
COPY docker-entrypoint.sh /usr/local/bin/easyflow-entrypoint.sh
|
|
RUN chmod 755 /usr/local/bin/soffice /usr/local/bin/easyflow-entrypoint.sh
|
|
|
|
VOLUME ["/app/logs", "/app/data"]
|
|
EXPOSE 8111
|
|
|
|
ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/easyflow-entrypoint.sh"]
|