| # Dockerfile.multi |
| # v0.8.1 |
|
|
| # Base for all builds |
| FROM node:20-alpine AS base-min |
| # Install jemalloc |
| RUN apk add --no-cache jemalloc |
| # Set environment variable to use jemalloc |
| ENV LD_PRELOAD=/usr/lib/libjemalloc.so.2 |
| WORKDIR /app |
| RUN apk --no-cache add curl |
| RUN npm config set fetch-retry-maxtimeout 600000 && \ |
| npm config set fetch-retries 5 && \ |
| npm config set fetch-retry-mintimeout 15000 |
| COPY package*.json ./ |
| COPY packages/data-provider/package*.json ./packages/data-provider/ |
| COPY packages/api/package*.json ./packages/api/ |
| COPY packages/data-schemas/package*.json ./packages/data-schemas/ |
| COPY packages/client/package*.json ./packages/client/ |
| COPY client/package*.json ./client/ |
| COPY api/package*.json ./api/ |
|
|
| # Install all dependencies for every build |
| FROM base-min AS base |
| WORKDIR /app |
| RUN npm ci |
|
|
| # Build `data-provider` package |
| FROM base AS data-provider-build |
| WORKDIR /app/packages/data-provider |
| COPY packages/data-provider ./ |
| RUN npm run build |
|
|
| # Build `data-schemas` package |
| FROM base AS data-schemas-build |
| WORKDIR /app/packages/data-schemas |
| COPY packages/data-schemas ./ |
| COPY --from=data-provider-build /app/packages/data-provider/dist /app/packages/data-provider/dist |
| RUN npm run build |
|
|
| # Build `api` package |
| FROM base AS api-package-build |
| WORKDIR /app/packages/api |
| COPY packages/api ./ |
| COPY --from=data-provider-build /app/packages/data-provider/dist /app/packages/data-provider/dist |
| COPY --from=data-schemas-build /app/packages/data-schemas/dist /app/packages/data-schemas/dist |
| RUN npm run build |
|
|
| # Build `client` package |
| FROM base AS client-package-build |
| WORKDIR /app/packages/client |
| COPY packages/client ./ |
| RUN npm run build |
|
|
| # Client build |
| FROM base AS client-build |
| WORKDIR /app/client |
| COPY client ./ |
| COPY --from=data-provider-build /app/packages/data-provider/dist /app/packages/data-provider/dist |
| COPY --from=client-package-build /app/packages/client/dist /app/packages/client/dist |
| COPY --from=client-package-build /app/packages/client/src /app/packages/client/src |
| ENV NODE_OPTIONS="--max-old-space-size=2048" |
| RUN npm run build |
|
|
| # API setup (including client dist) |
| FROM base-min AS api-build |
| # Add `uv` for extended MCP support |
| COPY --from=ghcr.io/astral-sh/uv:0.6.13 /uv /uvx /bin/ |
| RUN uv --version |
| WORKDIR /app |
| # Install only production deps |
| RUN npm ci --omit=dev |
| COPY api ./api |
| COPY config ./config |
| COPY --from=data-provider-build /app/packages/data-provider/dist ./packages/data-provider/dist |
| COPY --from=data-schemas-build /app/packages/data-schemas/dist ./packages/data-schemas/dist |
| COPY --from=api-package-build /app/packages/api/dist ./packages/api/dist |
| COPY --from=client-build /app/client/dist ./client/dist |
| WORKDIR /app/api |
| EXPOSE 3080 |
| ENV HOST=0.0.0.0 |
| CMD ["node", "server/index.js"] |