# syntax=docker/dockerfile:1 FROM node:22-bookworm-slim AS base WORKDIR /app ENV CI=true FROM base AS deps RUN apt-get update \ && apt-get install -y --no-install-recommends python3 make g++ \ && rm -rf /var/lib/apt/lists/* COPY package.json package-lock.json ./ RUN npm ci FROM base AS dev ENV NODE_ENV=development COPY --from=deps /app/node_modules ./node_modules COPY . . EXPOSE 5173 CMD ["npm", "run", "dev"] FROM base AS build ENV NODE_ENV=production COPY --from=deps /app/node_modules ./node_modules COPY . . RUN npm run build RUN npm prune --omit=dev FROM node:22-bookworm-slim AS runtime WORKDIR /app ENV NODE_ENV=production \ HOST=0.0.0.0 \ PORT=3000 \ DATABASE_URL=/app/data/holodream.db COPY --from=build /app/build ./build COPY --from=build /app/drizzle ./drizzle COPY --from=build /app/node_modules ./node_modules COPY --from=build /app/package.json ./package.json COPY docker/entrypoint.sh /usr/local/bin/holodream-entrypoint RUN chmod +x /usr/local/bin/holodream-entrypoint \ && mkdir -p /app/data \ && chown -R node:node /app EXPOSE 3000 HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=5 \ CMD node -e "fetch('http://127.0.0.1:3000/api/health').then((response) => { if (!response.ok) process.exit(1); }).catch(() => process.exit(1))" ENTRYPOINT ["holodream-entrypoint"] CMD ["node", "build"]