| 1 | # syntax=docker/dockerfile:1 |
| 2 | |
| 3 | FROM --platform=$BUILDPLATFORM node:22-slim AS deps |
| 4 | WORKDIR /src |
| 5 | |
| 6 | COPY package.json package-lock.json ./ |
| 7 | RUN --mount=type=cache,target=/root/.npm npm ci |
| 8 | |
| 9 | FROM deps AS frontend-builder |
| 10 | COPY . . |
| 11 | RUN npm run build |
| 12 | |
| 13 | FROM deps AS api-builder |
| 14 | COPY . . |
| 15 | RUN npm run build:api |
| 16 | |
| 17 | FROM node:22-alpine AS api |
| 18 | WORKDIR /app |
| 19 | |
| 20 | COPY --from=api-builder /src/dist-api ./dist-api |
| 21 | |
| 22 | ENV PORT=8081 |
| 23 | EXPOSE 8081 |
| 24 | |
| 25 | CMD ["node", "dist-api/api/server.js"] |
| 26 | |
| 27 | FROM nginx:1.27-alpine AS frontend |
| 28 | |
| 29 | COPY nginx.conf /etc/nginx/conf.d/default.conf |
| 30 | COPY --from=frontend-builder /src/dist /usr/share/nginx/html |
| 31 | |
| 32 | EXPOSE 8080 |