FROM node:22-slim WORKDIR /app # Install pnpm RUN npm install -g pnpm # Install build tools for native dependencies (node-crc, @discordjs/opus) RUN apt-get update -qq && apt-get install -y -qq --no-install-recommends python3 make g++ wget && rm -rf /var/lib/apt/lists/* # Create non-root user RUN groupadd --system app && useradd --system -g app app # Copy dependency definition files first for better caching COPY pnpm-workspace.yaml . COPY pnpm-lock.yaml . COPY package.json . # Copy patches (pnpm patchedDependencies) COPY patches ./patches # Copy packages (workspace dependencies) COPY packages/shared ./packages/shared # Copy service COPY services/backend ./services/backend # Install dependencies with build cache RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store \ pnpm install --frozen-lockfile # Build shared workspace dependency first RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store \ pnpm --filter './packages/shared' run build # Build backend RUN --mount=type=cache,id=pnpm-store,target=/root/.local/share/pnpm/store \ pnpm --filter './services/backend' run build # Own dist + node_modules by non-root user RUN chown -R app:app /app # Switch to non-root user USER app # Expose port EXPOSE 3000 # Healthcheck — backend serves HTTP on port 3000 HEALTHCHECK --interval=30s --timeout=10s --start-period=15s --retries=3 \ CMD wget -qO- http://localhost:3000/api/health || exit 1 # Start backend CMD ["node", "services/backend/dist/index.js"]