48 lines
1.3 KiB
Docker
48 lines
1.3 KiB
Docker
# Build stage
|
|
FROM node:20-alpine AS builder
|
|
|
|
RUN apk add --no-cache python3 make g++
|
|
RUN corepack enable && corepack prepare pnpm@10.28.2 --activate
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy workspace config
|
|
COPY package.json pnpm-workspace.yaml pnpm-lock.yaml turbo.json ./
|
|
COPY apps/api/package.json apps/api/
|
|
COPY packages/shared/package.json packages/shared/
|
|
|
|
# Enable hoisting so tsc can find all deps
|
|
RUN echo "node-linker=hoisted" > .npmrc
|
|
RUN pnpm install --frozen-lockfile
|
|
|
|
# Copy source
|
|
COPY apps/api/ apps/api/
|
|
COPY packages/shared/ packages/shared/
|
|
|
|
# Build api (node_modules are hoisted, tsc available at root)
|
|
RUN cd apps/api && ../../node_modules/.bin/tsc \
|
|
&& rm -f dist/db/migrations/*.d.ts dist/db/migrations/*.d.ts.map dist/db/migrations/*.js.map
|
|
|
|
# Runtime stage
|
|
FROM node:20-alpine
|
|
|
|
RUN apk add --no-cache curl
|
|
|
|
WORKDIR /app
|
|
|
|
# Copy built output (includes compiled migrations + knexfile in dist/db/)
|
|
COPY --from=builder /app/apps/api/dist ./dist
|
|
COPY --from=builder /app/apps/api/package.json ./
|
|
|
|
# Copy node_modules (runtime deps including bcrypt native)
|
|
COPY --from=builder /app/node_modules ./node_modules
|
|
COPY --from=builder /app/apps/api/node_modules ./apps_node_modules
|
|
|
|
# Entrypoint
|
|
COPY apps/api/docker-entrypoint.sh ./docker-entrypoint.sh
|
|
RUN chmod +x ./docker-entrypoint.sh
|
|
|
|
EXPOSE 3001
|
|
|
|
ENTRYPOINT ["./docker-entrypoint.sh"]
|