Dockerfile.server•2.17 kB
# Build stage
FROM node:22-slim AS builder
WORKDIR /usr/src/app
# Copy package files first to leverage layer caching
COPY package*.json ./
COPY turbo.json ./
COPY api.graphql ./
# Copy all package.json files
COPY packages/core/package*.json ./packages/core/
COPY packages/shared/package*.json ./packages/shared/
# Copy tsconfig files
COPY tsconfig.json ./
COPY packages/core/tsconfig.json ./packages/core/
COPY packages/shared/tsconfig.json ./packages/shared/
# Install dependencies and build tools
RUN npm install && \
npm install -g typescript turbo
# Copy source code
COPY packages/core ./packages/core
COPY packages/shared ./packages/shared
# Install workspace dependencies specifically
RUN npm install
# Install @superglue/client specifically in shared package for TypeScript resolution
RUN cd packages/shared && npm install @superglue/client
# Build core and shared packages
RUN npx turbo run build --filter=@superglue/core --filter=@superglue/shared
# Production stage
FROM node:22-slim
WORKDIR /usr/src/app
# Install system dependencies
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get install -y libxml2 && \
DEBIAN_FRONTEND=noninteractive apt-get install -y fontconfig fontconfig-config libfontconfig1 && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Copy package files
COPY package*.json ./
COPY turbo.json ./
COPY api.graphql ./
# Copy relevant package.json files
COPY packages/core/package*.json ./packages/core/
COPY packages/shared/package*.json ./packages/shared/
# Install production dependencies and Playwright
RUN npm ci --omit=dev && \
npx playwright install --with-deps chromium
# Install @superglue/client in both core and shared packages for runtime
RUN cd packages/core && npm install @superglue/client
RUN cd packages/shared && npm install @superglue/client
# Copy built files from builder stage
COPY --from=builder /usr/src/app/packages/core/dist ./packages/core/dist
COPY --from=builder /usr/src/app/packages/shared/dist ./packages/shared/dist
# Expose ports for both servers
EXPOSE 3000 3002
# Start the server
CMD ["npx", "turbo", "run", "start", "--filter=@superglue/core"]