FROM node:20-bookworm AS builder WORKDIR /app RUN corepack enable && corepack prepare npm@10.5.0 --activate COPY package.json package-lock.json turbo.json tsconfig.base.json ./ COPY apps ./apps COPY packages ./packages # These URLs are read by Next.js config during `next build`, so the production # image must bake Docker-network service URLs instead of localhost defaults. ARG API_INTERNAL_URL=http://api:4000/api/v1 ARG DASHBOARD_INTERNAL_URL=http://dashboard:3001 ARG ADMIN_INTERNAL_URL=http://admin:3002 # NEXT_PUBLIC_* vars must be present at build time — they are inlined into JS bundles ARG NEXT_PUBLIC_API_URL ARG NEXT_PUBLIC_MARKETPLACE_URL ARG NEXT_PUBLIC_DASHBOARD_URL ARG NEXT_PUBLIC_ADMIN_URL ENV API_INTERNAL_URL=$API_INTERNAL_URL \ DASHBOARD_INTERNAL_URL=$DASHBOARD_INTERNAL_URL \ ADMIN_INTERNAL_URL=$ADMIN_INTERNAL_URL \ NEXT_PUBLIC_API_URL=$NEXT_PUBLIC_API_URL \ NEXT_PUBLIC_MARKETPLACE_URL=$NEXT_PUBLIC_MARKETPLACE_URL \ NEXT_PUBLIC_DASHBOARD_URL=$NEXT_PUBLIC_DASHBOARD_URL \ NEXT_PUBLIC_ADMIN_URL=$NEXT_PUBLIC_ADMIN_URL RUN npm install RUN npm run db:generate RUN npm run build FROM node:20-bookworm AS runner WORKDIR /app ENV NODE_ENV=production RUN corepack enable && corepack prepare npm@10.5.0 --activate COPY --from=builder /app/package.json /app/package-lock.json /app/turbo.json /app/tsconfig.base.json ./ COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/apps ./apps COPY --from=builder /app/packages ./packages EXPOSE 3000 3001 3002 4000 CMD ["npm", "run", "start", "--workspace", "@rentaldrivego/api"]