From 05560ff1a34bbc67353ffc3a4f93ee7c414af6e6 Mon Sep 17 00:00:00 2001 From: Alex Sears Date: Thu, 17 Feb 2022 16:04:27 -0500 Subject: [PATCH 1/2] Update Dockerfile to use workspaces setup The main Cal.com project has started using Yarn workspaces to break the project up into separate packages and treat the project as a monorepo. This required quite a few changes to the Dockerfile that assumed the previous project setup. Signed-off-by: Alex Sears --- Dockerfile | 34 ++++++++++++++++++++-------------- docker-compose.yaml | 1 - scripts/start.sh | 4 ++-- scripts/wait-for-it.sh | 10 +++++----- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/Dockerfile b/Dockerfile index d2690cb..1923f6b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,11 @@ FROM node:14 as deps WORKDIR /calcom -COPY calendso/apps/web/package.json calendso/apps/web/yarn.lock ./ -COPY calendso/apps/web/prisma prisma +COPY calendso/package.json calendso/yarn.lock ./ +COPY calendso/apps/web/package.json calendso/apps/web/yarn.lock ./apps/web/ +COPY calendso/packages/prisma/package.json ./packages/prisma/package.json +COPY calendso/packages/lib/package.json ./packages/lib/package.json +COPY calendso/packages/tsconfig/package.json ./packages/tsconfig/package.json # RUN yarn install --frozen-lockfile RUN yarn install @@ -12,30 +15,33 @@ WORKDIR /calcom ARG BASE_URL ARG NEXT_PUBLIC_APP_URL ARG NEXT_PUBLIC_LICENSE_CONSENT -ARG NEXT_PUBLIC_TELEMETRY_KEY +ARG NEXT_PUBLIC_TELEMETRY_KEY ENV BASE_URL=$BASE_URL \ NEXT_PUBLIC_APP_URL=$NEXT_PUBLIC_APP_URL \ NEXT_PUBLIC_LICENSE_CONSENT=$NEXT_PUBLIC_LICENSE_CONSENT \ NEXT_PUBLIC_TELEMETRY_KEY=$NEXT_PUBLIC_TELEMETRY_KEY - + +COPY calendso/package.json calendso/yarn.lock calendso/turbo.json ./ COPY calendso/apps/web ./apps/web COPY calendso/packages ./packages -COPY --from=deps /calcom/node_modules ./apps/web/node_modules -WORKDIR /calcom/apps/web +COPY --from=deps /calcom/node_modules ./node_modules RUN yarn build && yarn install --production --ignore-scripts --prefer-offline FROM node:14 as runner WORKDIR /calcom ENV NODE_ENV production +RUN apt-get update && apt-get -y install netcat && rm -rf /var/lib/apt/lists/* -COPY --from=builder /calcom/apps/web/node_modules ./node_modules -COPY --from=builder /calcom/apps/web/prisma ./prisma -COPY --from=builder /calcom/apps/web/scripts ./scripts -COPY --from=builder /calcom/apps/web/next.config.js ./ -COPY --from=builder /calcom/apps/web/next-i18next.config.js ./ -COPY --from=builder /calcom/apps/web/public ./public -COPY --from=builder /calcom/apps/web/.next ./.next -COPY --from=builder /calcom/apps/web/package.json ./package.json +COPY calendso/package.json calendso/yarn.lock calendso/turbo.json ./ +COPY --from=builder /calcom/node_modules ./node_modules +COPY --from=builder /calcom/packages ./packages +COPY --from=builder /calcom/apps/web/node_modules ./apps/web/node_modules +COPY --from=builder /calcom/apps/web/scripts ./apps/web/scripts +COPY --from=builder /calcom/apps/web/next.config.js ./apps/web/next.config.js +COPY --from=builder /calcom/apps/web/next-i18next.config.js ./apps/web/next-i18next.config.js +COPY --from=builder /calcom/apps/web/public ./apps/web/public +COPY --from=builder /calcom/apps/web/.next ./apps/web/.next +COPY --from=builder /calcom/apps/web/package.json ./apps/web/package.json COPY scripts scripts EXPOSE 3000 diff --git a/docker-compose.yaml b/docker-compose.yaml index 9cb634f..27d9421 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -27,7 +27,6 @@ services: - NEXT_PUBLIC_APP_URL=${NEXT_PUBLIC_APP_URL} - NEXT_PUBLIC_LICENSE_CONSENT=${NEXT_PUBLIC_LICENSE_CONSENT} - NEXT_PUBLIC_TELEMETRY_KEY=${NEXT_PUBLIC_TELEMETRY_KEY} - image: calendso/calendso:latest restart: always networks: - stack diff --git a/scripts/start.sh b/scripts/start.sh index dc84684..1ee42da 100755 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -1,6 +1,6 @@ #!/bin/sh set -x -/app/scripts/wait-for-it.sh ${DATABASE_HOST} -- echo "database is up" -npx prisma migrate deploy +/calcom/scripts/wait-for-it.sh ${DATABASE_HOST} -- echo "database is up" +# npx prisma migrate deploy --schema /calcom/packages/prisma/schema.prisma yarn start diff --git a/scripts/wait-for-it.sh b/scripts/wait-for-it.sh index 0816f6f..08c8d6d 100755 --- a/scripts/wait-for-it.sh +++ b/scripts/wait-for-it.sh @@ -54,7 +54,7 @@ wait_for() { ;; wget) if ! command -v wget >/dev/null; then - echoerr 'nc command is missing!' + echoerr 'wget command is missing!' exit 1 fi ;; @@ -62,11 +62,11 @@ wait_for() { while :; do case "$PROTOCOL" in - tcp) + tcp) nc -w 1 -z "$HOST" "$PORT" > /dev/null 2>&1 ;; http) - wget --timeout=1 -q "$HOST" -O /dev/null > /dev/null 2>&1 + wget --timeout=1 -q "$HOST" -O /dev/null > /dev/null 2>&1 ;; *) echoerr "Unknown protocol '$PROTOCOL'" @@ -75,7 +75,7 @@ wait_for() { esac result=$? - + if [ $result -eq 0 ] ; then if [ $# -gt 7 ] ; then for result in $(seq $(($# - 7))); do @@ -181,4 +181,4 @@ case "$PROTOCOL" in ;; esac -wait_for "$@" \ No newline at end of file +wait_for "$@" From 60557d31fd92ae33a5f03a07d575d9cc26a96196 Mon Sep 17 00:00:00 2001 From: Alex Sears Date: Fri, 18 Feb 2022 15:12:09 -0500 Subject: [PATCH 2/2] Update Dockerfile to install prisma globally Prisma is a dev dependency in the main project. However, it is needed in the image so we can run the migrations before starting the server up. This installs it globally in the image since it won't be installed using the project's `package.json`. Signed-off-by: Alex Sears --- Dockerfile | 5 ++++- scripts/start.sh | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 1923f6b..1bef144 100644 --- a/Dockerfile +++ b/Dockerfile @@ -30,7 +30,10 @@ RUN yarn build && yarn install --production --ignore-scripts --prefer-offline FROM node:14 as runner WORKDIR /calcom ENV NODE_ENV production -RUN apt-get update && apt-get -y install netcat && rm -rf /var/lib/apt/lists/* +RUN apt-get update && \ + apt-get -y install netcat && \ + rm -rf /var/lib/apt/lists/* && \ + npm install --global prisma COPY calendso/package.json calendso/yarn.lock calendso/turbo.json ./ COPY --from=builder /calcom/node_modules ./node_modules diff --git a/scripts/start.sh b/scripts/start.sh index 1ee42da..822d1c0 100755 --- a/scripts/start.sh +++ b/scripts/start.sh @@ -2,5 +2,5 @@ set -x /calcom/scripts/wait-for-it.sh ${DATABASE_HOST} -- echo "database is up" -# npx prisma migrate deploy --schema /calcom/packages/prisma/schema.prisma +npx prisma migrate deploy --schema /calcom/packages/prisma/schema.prisma yarn start