FROM caddy:2.10.2 AS proxy FROM node:24-bookworm-slim ARG DSH_VERSION # Keep the historical dependency-layer cache key; the template revision is set below. ARG RECIPE_REV=3 RUN apt-get update && apt-get install -y --no-install-recommends \ tini ca-certificates git procps \ python3 python3-pip python3-venv python-is-python3 \ libreoffice fonts-noto-cjk \ && rm -rf /var/lib/apt/lists/* RUN python --version && python3 -m pip --version && libreoffice --headless --version RUN test -n "$DSH_VERSION" && npm install --global --foreground-scripts --loglevel=verbose --registry=https://registry.npmjs.org "@deepseek-ai/dsh@${DSH_VERSION}" RUN npm install --global --ignore-scripts --registry=https://registry.npmjs.org pnpm@10.11.0 && test "$(pnpm --version)" = "10.11.0" COPY install-mobile.mjs /usr/local/lib/dsh-mgr/install-mobile.mjs RUN node /usr/local/lib/dsh-mgr/install-mobile.mjs COPY install-free-search.mjs /usr/local/lib/dsh-mgr/install-free-search.mjs RUN node /usr/local/lib/dsh-mgr/install-free-search.mjs COPY install-chat-manager.mjs patch-chat-manager.mjs /usr/local/lib/dsh-mgr/ RUN node /usr/local/lib/dsh-mgr/install-chat-manager.mjs COPY install-workspace.mjs /usr/local/lib/dsh-mgr/install-workspace.mjs RUN node /usr/local/lib/dsh-mgr/install-workspace.mjs COPY init-profile.mjs /usr/local/lib/dsh-mgr/init-profile.mjs COPY install-host-settings.mjs /usr/local/lib/dsh-mgr/install-host-settings.mjs RUN node /usr/local/lib/dsh-mgr/install-host-settings.mjs COPY --from=proxy /usr/bin/caddy /usr/bin/caddy # Strip upstream file capabilities without granting any runtime capabilities. # A fresh file copy omits security.capability xattrs; port 8080 needs none. RUN cp /usr/bin/caddy /usr/bin/caddy.clean && mv /usr/bin/caddy.clean /usr/bin/caddy COPY Caddyfile /etc/caddy/Caddyfile COPY entrypoint.sh /usr/local/bin/dsh-entrypoint RUN chmod 755 /usr/local/bin/dsh-entrypoint && mkdir -p /data /workspace /shared && ln -s /workspace /data/dsh-home && chown -R node:node /data /workspace /shared COPY install-misans.mjs /usr/local/lib/dsh-mgr/install-misans.mjs RUN node /usr/local/lib/dsh-mgr/install-misans.mjs COPY MiSans-NOTICE.txt /usr/local/share/fonts/misans/NOTICE.txt COPY install-office-preview.mjs native-office.mjs validate-office.py office-worker.py /usr/local/lib/dsh-mgr/ RUN node /usr/local/lib/dsh-mgr/install-office-preview.mjs COPY preview-download /usr/local/lib/dsh-mgr/preview-download COPY install-preview-download.mjs /usr/local/lib/dsh-mgr/install-preview-download.mjs RUN node /usr/local/lib/dsh-mgr/install-preview-download.mjs ARG RECIPE_REV=7 LABEL dsh-mgr.role=runtime dsh-mgr.version=$DSH_VERSION dsh-mgr.recipe=$RECIPE_REV ENV DSH_HOME=/workspace HOME=/workspace XDG_DATA_HOME=/workspace/.local/share XDG_CONFIG_HOME=/workspace/.config USER node WORKDIR /workspace EXPOSE 8080 ENTRYPOINT ["/usr/bin/tini", "-g", "--", "/usr/local/bin/dsh-entrypoint"] CMD ["web", "--no-open", "--port", "3080"]