feat(docker): add monorepo Docker build with auto-migrate and pdf-lib

This commit is contained in:
neon
2026-01-13 14:28:36 -06:00
parent 7916454fb9
commit 8dea90d966
7 changed files with 56 additions and 47 deletions
+34 -23
View File
@@ -1,33 +1,44 @@
# Stage 1: Build client
FROM node:24-alpine AS client-builder
WORKDIR /app/client
COPY client/package.json client/package-lock.json ./
RUN npm ci
COPY client/ .
RUN npm run build
# Stage 2: Build server
FROM node:24-alpine AS server-builder
WORKDIR /app/server
COPY server/package.json server/package-lock.json ./
RUN npm ci
COPY server/ .
RUN npm run build
# Stage 3: Final image — production only, no devDependencies
FROM node:24-alpine AS final
RUN npm install -g pnpm@10
WORKDIR /app
COPY --from=server-builder /app/server/dist ./dist
COPY --from=server-builder /app/server/package.json ./package.json
COPY --from=server-builder /app/server/package-lock.json ./package-lock.json
RUN npm ci --omit=dev
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./
COPY packages/ packages/
COPY client/package.json ./client/
RUN pnpm install --filter client... --frozen-lockfile
# Vue build served as static files by NestJS
COPY client/ ./client/
RUN pnpm --filter client run build-only
# Stage 2: Build server + create prod deploy bundle
FROM node:24-alpine AS server-builder
RUN npm install -g pnpm@10
WORKDIR /app
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml ./
COPY packages/ packages/
COPY server/package.json ./server/
RUN pnpm install --filter server... --frozen-lockfile
COPY server/ ./server/
RUN pnpm --filter server run build
# pnpm deploy prunes to prod deps; dist/ is gitignored so copy it in after
RUN pnpm --filter server deploy --prod --legacy /deploy
RUN cp -r /app/server/dist /deploy/dist
# Stage 3: Final image
FROM node:24-alpine
WORKDIR /app
COPY --from=server-builder /deploy ./
COPY --from=client-builder /app/client/dist ./public
EXPOSE 3000
ENV NODE_ENV=production
CMD ["node", "dist/main.js"]
COPY --from=server-builder /app/server/entrypoint.sh ./entrypoint.sh
RUN chmod +x entrypoint.sh
CMD ["sh", "entrypoint.sh"]