47 lines
1.5 KiB
Docker
47 lines
1.5 KiB
Docker
FROM node:24-bookworm-slim AS build
|
|
|
|
ENV PNPM_HOME="/pnpm"
|
|
ENV PATH="$PNPM_HOME:$PATH"
|
|
|
|
RUN corepack enable && corepack prepare pnpm@11.5.2 --activate
|
|
RUN apt-get update && apt-get install -y --no-install-recommends openssl && rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
|
|
COPY Backend/package.json Backend/pnpm-workspace.yaml ./Backend/
|
|
COPY UI/package.json UI/pnpm-workspace.yaml ./UI/
|
|
|
|
# Install in separate layers to keep peak memory low.
|
|
RUN cd Backend && pnpm install
|
|
RUN cd UI && pnpm install
|
|
|
|
COPY . .
|
|
|
|
# Build the frontend, then generate the Prisma client and compile the backend.
|
|
RUN cd UI && pnpm run build
|
|
RUN cd Backend && DATABASE_URL=postgresql://x:x@localhost/x pnpm run generate && pnpm run build
|
|
|
|
FROM node:24-bookworm-slim AS runtime
|
|
|
|
ENV NODE_ENV=production
|
|
ENV PNPM_HOME="/pnpm"
|
|
ENV PATH="$PNPM_HOME:$PATH"
|
|
|
|
RUN corepack enable && corepack prepare pnpm@11.5.2 --activate
|
|
RUN apt-get update && apt-get install -y --no-install-recommends openssl && rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
|
|
COPY Backend/package.json Backend/pnpm-workspace.yaml Backend/prisma.config.ts ./Backend/
|
|
COPY Backend/prisma ./Backend/prisma
|
|
|
|
RUN cd Backend && pnpm install --prod && DATABASE_URL=postgresql://x:x@localhost/x pnpm run generate
|
|
|
|
COPY --from=build /app/Backend/dist ./Backend/dist
|
|
COPY --from=build /app/UI/build ./UI/build
|
|
|
|
EXPOSE 5000
|
|
|
|
# Apply migrations on boot, then start the API (which also serves the UI build).
|
|
CMD ["sh", "-c", "cd /app/Backend && pnpm migrate:deploy && cd dist && node index.js"]
|