FROM --platform=$BUILDPLATFORM node:20 AS builder WORKDIR /calcom ## If we want to read any ENV variable from .env file, we need to first accept and pass it as an argument to the Dockerfile ARG NEXT_PUBLIC_LICENSE_CONSENT ARG NEXT_PUBLIC_WEBSITE_TERMS_URL ARG NEXT_PUBLIC_WEBSITE_PRIVACY_POLICY_URL ARG CALCOM_TELEMETRY_DISABLED ARG DATABASE_URL ARG NEXTAUTH_SECRET=secret ARG CALENDSO_ENCRYPTION_KEY=secret ARG MAX_OLD_SPACE_SIZE=6144 ARG NEXT_PUBLIC_API_V2_URL ARG CSP_POLICY ## We need these variables as required by Next.js build to create rewrites ARG NEXT_PUBLIC_SINGLE_ORG_SLUG ARG ORGANIZATIONS_ENABLED ENV NEXT_PUBLIC_WEBAPP_URL=http://NEXT_PUBLIC_WEBAPP_URL_PLACEHOLDER \ NEXT_PUBLIC_API_V2_URL=$NEXT_PUBLIC_API_V2_URL \ NEXT_PUBLIC_LICENSE_CONSENT=$NEXT_PUBLIC_LICENSE_CONSENT \ NEXT_PUBLIC_WEBSITE_TERMS_URL=$NEXT_PUBLIC_WEBSITE_TERMS_URL \ NEXT_PUBLIC_WEBSITE_PRIVACY_POLICY_URL=$NEXT_PUBLIC_WEBSITE_PRIVACY_POLICY_URL \ CALCOM_TELEMETRY_DISABLED=$CALCOM_TELEMETRY_DISABLED \ DATABASE_URL=$DATABASE_URL \ DATABASE_DIRECT_URL=$DATABASE_URL \ NEXTAUTH_SECRET=${NEXTAUTH_SECRET} \ CALENDSO_ENCRYPTION_KEY=${CALENDSO_ENCRYPTION_KEY} \ NEXT_PUBLIC_SINGLE_ORG_SLUG=$NEXT_PUBLIC_SINGLE_ORG_SLUG \ ORGANIZATIONS_ENABLED=$ORGANIZATIONS_ENABLED \ NODE_OPTIONS=--max-old-space-size=${MAX_OLD_SPACE_SIZE} \ BUILD_STANDALONE=true \ CSP_POLICY=$CSP_POLICY COPY package.json yarn.lock .yarnrc.yml playwright.config.ts turbo.json i18n.json ./ COPY .yarn ./.yarn COPY apps/web ./apps/web COPY apps/api/v2 ./apps/api/v2 COPY packages ./packages RUN yarn config set httpTimeout 1200000 RUN npx turbo prune --scope=@calcom/web --scope=@calcom/trpc --docker RUN yarn install # Build and make embed servable from web/public/embed folder RUN yarn workspace @calcom/trpc run build RUN yarn --cwd packages/embeds/embed-core workspace @calcom/embed-core run build RUN yarn --cwd apps/web workspace @calcom/web run copy-app-store-static RUN yarn --cwd apps/web workspace @calcom/web run build RUN rm -rf node_modules/.cache .yarn/cache apps/web/.next/cache FROM node:20-slim AS migrator WORKDIR /migrate RUN npm install --omit=dev prisma@6.16.1 FROM node:20-slim AS runner WORKDIR /calcom RUN apt-get update && apt-get install -y --no-install-recommends netcat-openbsd openssl wget && rm -rf /var/lib/apt/lists/* RUN npm install --omit=dev --os=linux --cpu=x64 sharp@0.34.5 COPY --from=builder /calcom/apps/web/.next/standalone ./ COPY --from=builder /calcom/apps/web/.next/static ./apps/web/.next/static COPY --from=builder /calcom/apps/web/public ./apps/web/public COPY --from=builder /calcom/packages/prisma/schema.prisma ./packages/prisma/schema.prisma COPY --from=builder /calcom/packages/prisma/migrations ./packages/prisma/migrations COPY --from=migrator /migrate /migrate COPY scripts/start.sh scripts/wait-for-it.sh scripts/replace-placeholder.sh ./scripts/ RUN chmod +x scripts/* ARG NEXT_PUBLIC_WEBAPP_URL=http://localhost:3000 ENV NEXT_PUBLIC_WEBAPP_URL=$NEXT_PUBLIC_WEBAPP_URL \ BUILT_NEXT_PUBLIC_WEBAPP_URL=$NEXT_PUBLIC_WEBAPP_URL ENV NODE_ENV=production EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=30s --retries=5 \ CMD wget --spider http://localhost:3000 || exit 1 CMD ["/calcom/scripts/start.sh"]