DevJourney · code I wrote while learning

Dockerfile

1.1 KB
# Stage 1: Build the app
FROM node:latest AS build-app
WORKDIR /app
# corepack is no longer shipped in Node >= 25; install pnpm directly
RUN npm install -g pnpm@11
COPY app/package.json ./package.json
COPY app/pnpm-lock.yaml ./pnpm-lock.yaml
COPY app/pnpm-workspace.yaml ./pnpm-workspace.yaml
RUN pnpm install --frozen-lockfile
COPY app/ ./
RUN pnpm run build

# Stage 2: Prepare the API
FROM node:latest AS build-api
WORKDIR /api
RUN npm install -g pnpm@11
COPY api/package.json ./package.json
COPY api/pnpm-lock.yaml ./pnpm-lock.yaml
RUN pnpm install --frozen-lockfile --prod
COPY api/ ./

# Stage 3: Run both app and API
FROM node:latest
WORKDIR /app
RUN npm install -g pnpm@11
COPY --from=build-app /app/build ./build
COPY --from=build-app /app/server.js ./server.js
COPY --from=build-app /app/node_modules ./node_modules
COPY --from=build-api /api ./api

    # Install serve for serving the React app (npm's global bin is on PATH)
    RUN npm install -g serve

# Expose ports
EXPOSE 3000 5000

# Start both the app and the API (use pnpm for the api)
CMD ["sh", "-c", "node server.js & cd api && pnpm run server"]