# syntax=docker/dockerfile:1
# Build from the repository root: docker build -f server/Dockerfile -t cuiyuan-cloud .
# server/Dockerfile.dockerignore sends only explicit source/build inputs.
FROM node:22-bookworm-slim AS build
WORKDIR /app
ENV ELECTRON_SKIP_BINARY_DOWNLOAD=1
COPY package.json package-lock.json ./
RUN npm ci
COPY tsconfig.json vite.config.ts index.html ./
COPY src ./src
COPY public ./public
COPY builtin-skills ./builtin-skills
COPY prompts ./prompts
RUN npm run build

FROM node:22-bookworm-slim AS runtime
WORKDIR /app
# Chromium is server-owned. End-user browsers need no dependencies.
RUN apt-get update && apt-get install -y --no-install-recommends chromium ca-certificates tini && rm -rf /var/lib/apt/lists/*
ENV NODE_ENV=production ELECTRON_SKIP_BINARY_DOWNLOAD=1 CUIYUAN_HOST=0.0.0.0 CUIYUAN_PORT=8787 CUIYUAN_DATA_DIR=/app/cloud-data CUIYUAN_BROWSER_EXECUTABLE=/usr/bin/chromium
COPY package.json package-lock.json ./
RUN npm ci --omit=dev
COPY --from=build /app/dist ./dist
COPY electron ./electron
COPY runtime ./runtime
COPY server ./server
COPY config ./config
COPY prompts ./prompts
COPY builtin-skills ./builtin-skills
COPY LICENSE THIRD_PARTY_NOTICES.md ./
RUN mkdir /app/cloud-data && chown -R node:node /app/cloud-data
USER node
EXPOSE 8787
VOLUME ["/app/cloud-data"]
ENTRYPOINT ["/usr/bin/tini", "--"]
CMD ["node", "server/index.cjs"]
