# syntax=docker/dockerfile:1 FROM node:22-slim LABEL org.opencontainers.image.source="https://github.com/Runfusion/Fusion" LABEL org.opencontainers.image.description="AI-orchestrated task board" ENV NODE_ENV=production ENV PORT=4040 RUN apt-get update \ && apt-get install -y --no-install-recommends git build-essential python3 curl \ && rm -rf /var/lib/apt/lists/* RUN corepack enable && corepack prepare pnpm@10.33.0 --activate WORKDIR /app COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./ COPY packages ./packages COPY plugins ./plugins RUN pnpm install --frozen-lockfile COPY . . RUN pnpm build WORKDIR /project RUN cp -r /app/node_modules /project/node_modules \ && mkdir -p /project/packages \ && cp -r /app/packages/cli /project/packages/cli \ && cp -r /app/packages/core /project/packages/core \ && cp -r /app/packages/engine /project/packages/engine \ && cp -r /app/packages/dashboard /project/packages/dashboard \ && cp /app/package.json /app/pnpm-lock.yaml /app/pnpm-workspace.yaml /project/ \ && chown -R node:node /project USER node EXPOSE 4040 HEALTHCHECK --interval=30s --timeout=5s --start-period=30s --retries=3 \ CMD curl -fsS -o /dev/null http://localhost:4040/ || exit 1 ENTRYPOINT ["node", "/project/packages/cli/dist/bin.js"] CMD ["dashboard"]