85 lines
3.2 KiB
Docker
85 lines
3.2 KiB
Docker
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"]
|