# syntax=docker/dockerfile:1.7 FROM node:20-alpine AS base ENV PNPM_HOME=/pnpm ENV PATH=$PNPM_HOME:$PATH WORKDIR /app RUN apk add --no-cache libc6-compat openssl && corepack enable FROM base AS deps COPY package.json pnpm-lock.yaml pnpm-workspace.yaml turbo.json ./ COPY apps/web/package.json apps/web/package.json COPY apps/server/package.json apps/server/package.json COPY packages/shared/package.json packages/shared/package.json RUN pnpm config set fetch-retries 5 \ && pnpm config set fetch-retry-mintimeout 10000 \ && pnpm config set fetch-retry-maxtimeout 120000 \ && pnpm install --frozen-lockfile FROM deps AS builder ENV NODE_ENV=production COPY packages/shared packages/shared COPY apps/server apps/server RUN pnpm --filter @ftb/shared build RUN pnpm --filter server exec prisma generate --schema prisma/schema.prisma RUN pnpm --filter server build FROM base AS runner ARG APP_VERSION=unknown ARG APP_BUILD_TIME= ARG APP_IMAGE_TAG= ENV NODE_ENV=production ENV APP_VERSION=$APP_VERSION ENV APP_BUILD_TIME=$APP_BUILD_TIME ENV APP_IMAGE_TAG=$APP_IMAGE_TAG LABEL org.opencontainers.image.revision=$APP_VERSION LABEL org.opencontainers.image.created=$APP_BUILD_TIME LABEL org.opencontainers.image.ref.name=$APP_IMAGE_TAG COPY --from=builder /app/package.json ./package.json COPY --from=builder /app/pnpm-lock.yaml ./pnpm-lock.yaml COPY --from=builder /app/pnpm-workspace.yaml ./pnpm-workspace.yaml COPY --from=builder /app/turbo.json ./turbo.json COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/packages/shared ./packages/shared COPY --from=builder /app/apps/server ./apps/server RUN mkdir -p /app/apps/server/data && chown -R node:node /app USER node EXPOSE 3001 CMD ["pnpm", "--filter", "server", "start:prod"]