-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathDockerfile
More file actions
47 lines (44 loc) · 2.07 KB
/
Dockerfile
File metadata and controls
47 lines (44 loc) · 2.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
FROM node:20-alpine AS base
RUN corepack enable && corepack prepare pnpm@9.15.0 --activate
FROM base AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml pnpm-workspace.yaml .npmrc* ./
COPY apps/runtime/package.json ./apps/runtime/
COPY packages/types/package.json ./packages/types/
COPY packages/transformer/package.json ./packages/transformer/
COPY packages/tsconfig/package.json ./packages/tsconfig/
COPY packages/logger/package.json ./packages/logger/
COPY packages/vault/package.json ./packages/vault/
COPY packages/eslint-config/package.json ./packages/eslint-config/
RUN pnpm install --frozen-lockfile --prod=false
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY --from=deps /app/apps/runtime/node_modules ./apps/runtime/node_modules
COPY --from=deps /app/packages ./packages
COPY . .
RUN pnpm turbo run build --filter=@apifold/runtime
FROM base AS runner
WORKDIR /app/apps/runtime
ENV NODE_ENV=production
RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 runtime
# Copy built runtime
COPY --from=builder /app/apps/runtime/dist ./dist
COPY --from=builder /app/apps/runtime/package.json ./package.json
# Copy root node_modules (resolves npm packages like postgres, express, etc.)
COPY --from=builder /app/node_modules ../../node_modules
# Copy runtime's node_modules (pnpm workspace symlinks)
COPY --from=builder /app/apps/runtime/node_modules ./node_modules
# Copy built workspace packages (logger, transformer, types, vault)
COPY --from=builder /app/packages/logger ../../packages/logger
COPY --from=builder /app/packages/transformer ../../packages/transformer
COPY --from=builder /app/packages/types ../../packages/types
COPY --from=builder /app/packages/vault ../../packages/vault
USER runtime
EXPOSE 3001 9090
ENV RUNTIME_PORT=3001
# Cap V8 heap to 1434MB — ~70% of 2GB Fly VM, leaves room for stack, buffers, and OS overhead.
ENV NODE_OPTIONS="--max-old-space-size=1434"
HEALTHCHECK --interval=30s --timeout=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:3001/health || exit 1
CMD ["node", "dist/cluster.js"]