|
| 1 | +# Stage 1: Build |
| 2 | +FROM node:22-slim AS builder |
| 3 | + |
| 4 | +WORKDIR /usr/src/app |
| 5 | + |
| 6 | +# Copy package files for workspaces dependency resolution |
| 7 | +COPY package*.json ./ |
| 8 | +COPY storage-service/package*.json ./storage-service/ |
| 9 | +COPY jena-storage-service/package*.json ./jena-storage-service/ |
| 10 | +COPY ldp-service/package*.json ./ldp-service/ |
| 11 | +COPY oslc-service/package*.json ./oslc-service/ |
| 12 | +COPY oslc-client/package*.json ./oslc-client/ |
| 13 | +COPY oslc-browser/package*.json ./oslc-browser/ |
| 14 | +COPY bmm-server/package*.json ./bmm-server/ |
| 15 | +COPY bmm-server/ui/package*.json ./bmm-server/ui/ |
| 16 | + |
| 17 | +# Install workspaces dependencies |
| 18 | +RUN npm install |
| 19 | + |
| 20 | +# Copy the entire monorepo source code |
| 21 | +COPY . . |
| 22 | + |
| 23 | +# Build workspaces in dependency order |
| 24 | +RUN npm run build --workspace=storage-service && \ |
| 25 | + npm run build --workspace=jena-storage-service && \ |
| 26 | + npm run build --workspace=ldp-service && \ |
| 27 | + npm run build --workspace=oslc-service && \ |
| 28 | + npm run build --workspace=oslc-browser && \ |
| 29 | + npm run build --workspace=bmm-server |
| 30 | + |
| 31 | +# Build the BMM Web UI assets |
| 32 | +WORKDIR /usr/src/app/bmm-server/ui |
| 33 | +RUN npm install && npm run build |
| 34 | + |
| 35 | +# Stage 2: Runtime |
| 36 | +FROM node:22-slim |
| 37 | + |
| 38 | +# Install curl (required for startup checks and population script) |
| 39 | +RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* |
| 40 | + |
| 41 | +WORKDIR /usr/src/app |
| 42 | + |
| 43 | +# Copy built workspace and node_modules from builder |
| 44 | +COPY --from=builder /usr/src/app /usr/src/app |
| 45 | + |
| 46 | +EXPOSE 3005 |
| 47 | + |
| 48 | +WORKDIR /usr/src/app/bmm-server |
| 49 | +RUN chmod +x start.sh testing/populate-eurent.sh |
| 50 | + |
| 51 | +CMD ["./start.sh"] |
0 commit comments