# syntax=docker/dockerfile:1 FROM node:24-slim AS base ENV PNPM_HOME=/pnpm PATH=/pnpm:$PATH RUN corepack enable WORKDIR /app # --- build stage: install the workspace and build the www server --- FROM base AS build COPY pnpm-workspace.yaml pnpm-lock.yaml package.json tsconfig.json ./ COPY packages/core/package.json ./packages/core/package.json COPY packages/www/package.json ./packages/www/package.json RUN pnpm install --frozen-lockfile COPY packages ./packages RUN pnpm --filter www build # --- runtime stage: node server --- FROM base AS runtime ENV NODE_ENV=production # Bind to all interfaces so Docker/Railway can route to it; honor $PORT if set. ENV HOST=0.0.0.0 ENV PORT=4321 COPY --from=build /app /app WORKDIR /app/packages/www EXPOSE 4321 HEALTHCHECK --interval=30s --timeout=5s --start-period=20s \ CMD node -e "fetch('http://127.0.0.1:'+(process.env.PORT||4321)+'/api/v0/healthz').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))" CMD ["node", "./dist/server/entry.mjs"]