FROM node:alpine RUN apk add --no-cache \ bash \ curl \ ghostscript \ graphicsmagick \ imagemagick \ postgresql-client \ redis \ chromium \ nss \ freetype \ harfbuzz \ ca-certificates \ ttf-freefont # Tell Puppeteer to use system Chromium instead of downloading ENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true ENV PUPPETEER_EXECUTABLE_PATH=/usr/bin/chromium-browser WORKDIR /app # Copy manifests first for better layer caching COPY package.json package-lock.json ./ COPY server/package.json ./server/ COPY shared/package.json ./shared/ COPY services/workflow-worker/package.json ./services/workflow-worker/ COPY ee/server/package.json ./ee/server/ COPY ee/packages/workflows/package.json ./ee/packages/workflows/ COPY packages ./packages COPY sdk ./sdk RUN npm config set legacy-peer-deps true && npm install # Bring in source (server, shared, ee, etc.) COPY . . ENV NODE_OPTIONS="--max-old-space-size=4096" COPY server/dev-entrypoint.sh /app/server-dev-entrypoint.sh RUN chmod +x /app/server-dev-entrypoint.sh EXPOSE 3000 ENV NODE_ENV=development ENTRYPOINT ["/app/server-dev-entrypoint.sh"]