diff --git a/.env.example b/.env.example index e086427..cd81e8b 100644 --- a/.env.example +++ b/.env.example @@ -32,6 +32,9 @@ POSTGRES_PASSWORD=magical_password POSTGRES_DB=calendso DATABASE_HOST=database:5432 DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB} +# Needed to run migrations while using a connection pooler like PgBouncer +# Use the same one as DATABASE_URL if you're not using a connection pooler +DATABASE_DIRECT_URL=${DATABASE_URL} GOOGLE_API_CREDENTIALS={} # Set this to '1' if you don't want Cal to collect anonymous usage diff --git a/.github/workflows/docker-build-push-dockerhub.yml b/.github/workflows/docker-build-push-dockerhub.yml index fcb183a..1dcfc89 100644 --- a/.github/workflows/docker-build-push-dockerhub.yml +++ b/.github/workflows/docker-build-push-dockerhub.yml @@ -121,6 +121,7 @@ jobs: NEXT_PUBLIC_LICENSE_CONSENT=${{ env.NEXT_PUBLIC_LICENSE_CONSENT }} NEXT_PUBLIC_TELEMETRY_KEY=${{ env.NEXT_PUBLIC_TELEMETRY_KEY }} DATABASE_URL=postgresql://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@${{ env.DATABASE_HOST }}/${{ env.POSTGRES_DB }} + DATABASE_DIRECT_URL=postgresql://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@${{ env.DATABASE_HOST }}/${{ env.POSTGRES_DB }} - name: Test runtime run: | @@ -131,6 +132,7 @@ jobs: docker run --rm --network stack \ -p 3000:3000 \ -e DATABASE_URL=postgresql://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@database/${{ env.POSTGRES_DB }} \ + -e DATABASE_DIRECT_URL=postgresql://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@database/${{ env.POSTGRES_DB }} \ -e NEXTAUTH_SECRET=${{ env.NEXTAUTH_SECRET }} \ -e CALENDSO_ENCRYPTION_KEY=${{ env.CALENDSO_ENCRYPTION_KEY }} \ $tag & @@ -187,6 +189,7 @@ jobs: NEXT_PUBLIC_LICENSE_CONSENT=${{ env.NEXT_PUBLIC_LICENSE_CONSENT }} NEXT_PUBLIC_TELEMETRY_KEY=${{ env.NEXT_PUBLIC_TELEMETRY_KEY }} DATABASE_URL=postgresql://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@${{ env.DATABASE_HOST }}/${{ env.POSTGRES_DB }} + DATABASE_DIRECT_URL=postgresql://${{ env.POSTGRES_USER }}:${{ env.POSTGRES_PASSWORD }}@${{ env.DATABASE_HOST }}/${{ env.POSTGRES_DB }} if: ${{ !github.event.release.prerelease }} - name: Image digest diff --git a/Dockerfile b/Dockerfile index d56ebdb..167c7c4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -13,6 +13,7 @@ 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 \ + DATABASE_DIRECT_URL=$DATABASE_URL \ NEXTAUTH_SECRET=${NEXTAUTH_SECRET} \ CALENDSO_ENCRYPTION_KEY=${CALENDSO_ENCRYPTION_KEY} \ NODE_OPTIONS=--max-old-space-size=${MAX_OLD_SPACE_SIZE} @@ -72,4 +73,4 @@ EXPOSE 3000 HEALTHCHECK --interval=30s --timeout=30s --retries=5 \ CMD wget --spider http://localhost:3000 || exit 1 -CMD ["/calcom/scripts/start.sh"] \ No newline at end of file +CMD ["/calcom/scripts/start.sh"] diff --git a/README.md b/README.md index f68a1be..7cc9a5f 100644 --- a/README.md +++ b/README.md @@ -67,24 +67,24 @@ If you are evaluating Cal.com or running with minimal to no modifications, this cp .env.example .env ``` - Most configurations can be left as-is, but for configuration options see [Important Run-time variables](#important-run-time-variables) below. - + Most configurations can be left as-is, but for configuration options see [Important Run-time variables](#important-run-time-variables) below. + Update the appropriate values in your .env file, then proceed. - + 4. (optional) Pre-Pull the images by running the following command: - + ```bash docker compose pull ``` - + This will use the default image locations as specified by `image:` in the docker-compose.yaml file. - + Note: To aid with support, by default Scarf.sh is used as registry proxy for download metrics. - + 5. Start Cal.com via docker compose (Most basic users, and for First Run) To run the complete stack, which includes a local Postgres database, Cal.com web app, and Prisma Studio: - + ```bash docker compose up -d ``` @@ -139,7 +139,7 @@ If you are evaluating Cal.com or running with minimal to no modifications, this cd calcom-docker ``` -3. Update the calcom submodule. +3. Update the calcom submodule. ```bash git submodule update --remote --init @@ -151,7 +151,7 @@ If you are evaluating Cal.com or running with minimal to no modifications, this For configuration options see [Build-time variables](#build-time-variables) below. Update the appropriate values in your .env file, then proceed. -5. Build the Cal.com docker image: +5. Build the Cal.com docker image: Note: Due to application configuration requirements, an available database is currently required during the build process. @@ -206,20 +206,22 @@ These variables must also be provided at runtime | NEXTAUTH_URL | Location of the auth server. By default, this is the Cal.com docker instance itself. | optional | `{NEXT_PUBLIC_WEBAPP_URL}/api/auth` | | NEXTAUTH_SECRET | must match build variable | required | `secret` | | CALENDSO_ENCRYPTION_KEY | must match build variable | required | `secret` | -| DATABASE_URL | database url with credentials | required | `postgresql://unicorn_user:magical_password@database:5432/calendso` | +| DATABASE_URL | database url with credentials - if using a connection pooler, this setting should point there | required | `postgresql://unicorn_user:magical_password@database:5432/calendso` | +| DATABASE_DIRECT_URL | direct database url with credentials if using a connection pooler (e.g. PgBouncer, Prisma Accelerate, etc.) | optional | | ### Build-time variables -If building the image yourself, these variables must be provided at the time of the docker build, and can be provided by updating the .env file. Currently, if you require changes to these variables, you must follow the instructions to build and publish your own image. +If building the image yourself, these variables must be provided at the time of the docker build, and can be provided by updating the .env file. Currently, if you require changes to these variables, you must follow the instructions to build and publish your own image. -Updating these variables is not required for evaluation, but is required for running in production. Instructions for generating variables can be found in the [cal.com instructions](https://github.com/calcom/cal.com) +Updating these variables is not required for evaluation, but is required for running in production. Instructions for generating variables can be found in the [cal.com instructions](https://github.com/calcom/cal.com) | Variable | Description | Required | Default | | --- | --- | --- | --- | | 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` | +| DATABASE_URL | database url with credentials - if using a connection pooler, this setting should point there | required | `postgresql://unicorn_user:magical_password@database:5432/calendso` | +| DATABASE_DIRECT_URL | direct database url with credentials if using a connection pooler (e.g. PgBouncer, Prisma Accelerate, etc.) | optional | | | NEXTAUTH_SECRET | Cookie encryption key | required | `secret` | | CALENDSO_ENCRYPTION_KEY | Authentication encryption key | required | `secret` | @@ -249,7 +251,7 @@ Certain versions may have trouble creating a user if the field `metadata` is emp If you experience this error, it may be the way the default Auth callback in the server is using the WEBAPP_URL as a base url. The container does not necessarily have access to the same DNS as your local machine, and therefor needs to be configured to resolve to itself. You may be able to correct this by configuring `NEXTAUTH_URL=http://localhost:3000/api/auth`, to help the backend loop back to itself. ``` -docker-calcom-1 | @calcom/web:start: [next-auth][error][CLIENT_FETCH_ERROR] +docker-calcom-1 | @calcom/web:start: [next-auth][error][CLIENT_FETCH_ERROR] docker-calcom-1 | @calcom/web:start: https://next-auth.js.org/errors#client_fetch_error request to http://testing.localhost:3000/api/auth/session failed, reason: getaddrinfo ENOTFOUND testing.localhost { docker-calcom-1 | @calcom/web:start: error: { docker-calcom-1 | @calcom/web:start: message: 'request to http://testing.localhost:3000/api/auth/session failed, reason: getaddrinfo ENOTFOUND testing.localhost', diff --git a/docker-compose.yaml b/docker-compose.yaml index f2b90ef..9004bbb 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -32,6 +32,7 @@ services: NEXTAUTH_SECRET: ${NEXTAUTH_SECRET} CALENDSO_ENCRYPTION_KEY: ${CALENDSO_ENCRYPTION_KEY} DATABASE_URL: ${DATABASE_URL} + DATABASE_DIRECT_URL: ${DATABASE_URL} network: stack restart: always networks: @@ -41,6 +42,7 @@ services: env_file: .env environment: - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB} + - DATABASE_DIRECT_URL=${DATABASE_URL} depends_on: - database @@ -55,6 +57,7 @@ services: env_file: .env environment: - DATABASE_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB} + - DATABASE_DIRECT_URL=${DATABASE_URL} depends_on: - database command: