Dockerfile.web•1.84 kB
# Build stage
FROM node:22-slim AS builder
WORKDIR /usr/src/app
# Copy package files first to leverage Docker layer caching
COPY package*.json ./
COPY turbo.json ./
COPY api.graphql ./
# Copy relevant package.json files
COPY packages/web/package*.json ./packages/web/
COPY packages/shared/package*.json ./packages/shared/
# Copy tsconfig files
COPY tsconfig.json ./
COPY packages/web/tsconfig.json ./packages/web/
COPY packages/shared/tsconfig.json ./packages/shared/
# Install dependencies and build tools
RUN npm install && \
npm install -g typescript next turbo
# Copy source code
COPY packages/web ./packages/web
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 web and shared packages
RUN npx turbo run build --filter=@superglue/web --filter=@superglue/shared
# Production stage
FROM node:22-slim
WORKDIR /usr/src/app
# Copy package files and configs
COPY package*.json ./
COPY turbo.json ./
COPY api.graphql ./
# Copy relevant package.json files
COPY packages/web/package*.json ./packages/web/
COPY packages/shared/package*.json ./packages/shared/
# Install production dependencies
RUN npm ci --omit=dev
# Install @superglue/client in shared packages for runtime
RUN cd packages/shared && npm install @superglue/client
# Copy built files from builder stage
COPY --from=builder /usr/src/app/packages/web/.next ./packages/web/.next
COPY --from=builder /usr/src/app/packages/web/public ./packages/web/public
COPY --from=builder /usr/src/app/packages/shared/dist ./packages/shared/dist
# Expose port for the web server
EXPOSE 3001
# Start the web server
CMD ["npx", "turbo", "run", "start", "--filter=@superglue/web"]