diff --git a/Dockerfile b/Dockerfile index 2ce8712..fa5b57e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,6 @@ FROM node:16 as builder WORKDIR /calcom -ARG NEXT_PUBLIC_WEBAPP_URL=http://localhost:3000 -ARG NEXT_PUBLIC_APP_URL ARG NEXT_PUBLIC_LICENSE_CONSENT ARG CALCOM_TELEMETRY_DISABLED ARG DATABASE_URL @@ -10,8 +8,7 @@ ARG NEXTAUTH_SECRET=secret ARG CALENDSO_ENCRYPTION_KEY=secret ARG MAX_OLD_SPACE_SIZE=4096 -ENV NEXT_PUBLIC_WEBAPP_URL=$NEXT_PUBLIC_WEBAPP_URL \ - NEXT_PUBLIC_APP_URL=$NEXT_PUBLIC_APP_URL \ +ENV NEXT_PUBLIC_WEBAPP_URL=http://NEXT_PUBLIC_WEBAPP_URL_PLACEHOLDER \ NEXT_PUBLIC_LICENSE_CONSENT=$NEXT_PUBLIC_LICENSE_CONSENT \ CALCOM_TELEMETRY_DISABLED=$CALCOM_TELEMETRY_DISABLED \ DATABASE_URL=$DATABASE_URL \ @@ -31,6 +28,8 @@ RUN yarn build FROM node:16 as runner WORKDIR /calcom +ARG NEXT_PUBLIC_WEBAPP_URL=http://localhost:3000 + ENV NODE_ENV production RUN apt-get update && \ @@ -45,5 +44,12 @@ COPY --from=builder /calcom/apps/web ./apps/web COPY --from=builder /calcom/packages/prisma/schema.prisma ./prisma/schema.prisma COPY scripts scripts +# Save value used during this build stage. If NEXT_PUBLIC_WEBAPP_URL and BUILT_NEXT_PUBLIC_WEBAPP_URL differ at +# run-time, then start.sh will find/replace static values again. +ENV NEXT_PUBLIC_WEBAPP_URL=$NEXT_PUBLIC_WEBAPP_URL \ + BUILT_NEXT_PUBLIC_WEBAPP_URL=$NEXT_PUBLIC_WEBAPP_URL + +RUN scripts/replace-placeholder.sh http://NEXT_PUBLIC_WEBAPP_URL_PLACEHOLDER ${NEXT_PUBLIC_WEBAPP_URL} + EXPOSE 3000 CMD ["/calcom/scripts/start.sh"] diff --git a/README.md b/README.md index b812896..beb5cf4 100644 --- a/README.md +++ b/README.md @@ -112,7 +112,7 @@ Updating these variables is not required for evaluation, but is required for run | Variable | Description | Required | Default | | --- | --- | --- | --- | -| NEXT_PUBLIC_WEBAPP_URL | Base URL injected into static files | required | `http://localhost:3000` | +| NEXT_PUBLIC_WEBAPP_URL | Base URL injected into static files | optional | `http://localhost:3000` | | NEXT_PUBLIC_LICENSE_CONSENT | license consent - true/false | | | | CALCOM_TELEMETRY_DISABLED | Allow cal.com to collect anonymous usage data (set to `1` to disable) | | | | DATABASE_URL | database url with credentials | required | `postgresql://unicorn_user:magical_password@database:5432/calendso` | @@ -125,6 +125,7 @@ These variables must also be provided at runtime | Variable | Description | Required | Default | | --- | --- | --- | --- | +| NEXT_PUBLIC_WEBAPP_URL | Base URL of the site. NOTE: if this value differs from the value used at build-time, there will be a slight delay during container start (to update the statically built files). | optional | `http://localhost:3000` | | CALCOM_LICENSE_KEY | Enterprise License Key | | | | NEXTAUTH_SECRET | must match build variable | required | `secret` | | CALENDSO_ENCRYPTION_KEY | must match build variable | required | `secret` | diff --git a/scripts/replace-placeholder.sh b/scripts/replace-placeholder.sh new file mode 100755 index 0000000..57dbabb --- /dev/null +++ b/scripts/replace-placeholder.sh @@ -0,0 +1,16 @@ +FROM=$1 +TO=$2 + +if [ "${FROM}" = "${TO}" ]; then + echo "Nothing to replace, the value is already set to ${TO}." + + exit 0 +fi + +# Only peform action if $FROM and $TO are different. +echo "Replacing all statically built instances of $FROM with $TO." + +find apps/web/.next/ apps/web/public -type f | +while read file; do + sed -i "s|$FROM|$TO|g" "$file" +done diff --git a/scripts/start.sh b/scripts/start.sh index a70f1f2..d92bf2e 100755 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -1,6 +1,10 @@ #!/bin/sh set -x +# Replace the statically built BUILT_NEXT_PUBLIC_WEBAPP_URL with run-time NEXT_PUBLIC_WEBAPP_URL +# NOTE: if these values are the same, this will be skipped. +scripts/replace-placeholder.sh "$BUILT_NEXT_PUBLIC_WEBAPP_URL" "$NEXT_PUBLIC_WEBAPP_URL" + scripts/wait-for-it.sh ${DATABASE_HOST} -- echo "database is up" npx prisma migrate deploy --schema /calcom/packages/prisma/schema.prisma npx ts-node --transpile-only /calcom/packages/prisma/seed-app-store.ts