# Stage 1: install dependencies with workspace context FROM node:20 AS deps # Install build dependencies RUN apt-get update && apt-get install -y python3 ffmpeg make g++ build-essential && rm -rf /var/lib/apt/lists/* RUN corepack enable && corepack prepare pnpm@10.11.0 --activate WORKDIR /repo COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc ./ COPY scripts ./scripts COPY patches ./patches RUN mkdir -p packages/happy-app packages/happy-server packages/happy-cli packages/happy-wire COPY packages/happy-app/package.json packages/happy-app/ COPY packages/happy-server/package.json packages/happy-server/ COPY packages/happy-cli/package.json packages/happy-cli/ COPY packages/happy-wire/package.json packages/happy-wire/ # Workspace postinstall requirements COPY packages/happy-app/patches packages/happy-app/patches COPY packages/happy-server/prisma packages/happy-server/prisma COPY packages/happy-cli/scripts packages/happy-cli/scripts COPY packages/happy-cli/tools packages/happy-cli/tools RUN SKIP_HAPPY_WIRE_BUILD=1 pnpm install --frozen-lockfile # Stage 2: build the server FROM deps AS builder COPY packages/happy-wire ./packages/happy-wire COPY packages/happy-server ./packages/happy-server RUN pnpm --filter @slopus/happy-wire build RUN pnpm --filter happy-server build # Stage 3: runtime FROM node:20 AS runner WORKDIR /repo # Runtime dependencies RUN apt-get update && apt-get install -y python3 ffmpeg && rm -rf /var/lib/apt/lists/* RUN corepack enable && corepack prepare pnpm@10.11.0 --activate # Set environment to production ENV NODE_ENV=production # Copy necessary files from the builder stage COPY --from=builder /repo/node_modules /repo/node_modules COPY --from=builder /repo/packages/happy-wire /repo/packages/happy-wire COPY --from=builder /repo/packages/happy-server /repo/packages/happy-server # Expose the port the app will run on EXPOSE 3000 # Command to run the application COPY --from=builder /repo/package.json /repo/pnpm-workspace.yaml /repo/ CMD ["pnpm", "--filter", "happy-server", "start"]