From 03bb6b70196642805b11b75fd240fa511b3b99a1 Mon Sep 17 00:00:00 2001 From: Alex van Andel Date: Wed, 27 Oct 2021 00:23:36 +0100 Subject: [PATCH] Further changes to make Calendso packagable --- .env | 31 ++++--- Dockerfile | 19 ++--- docker-compose.yaml | 7 +- scripts/.gitkeep | 0 scripts/start.sh | 6 -- scripts/wait-for-it.sh | 184 ----------------------------------------- 6 files changed, 28 insertions(+), 219 deletions(-) delete mode 100644 scripts/.gitkeep delete mode 100755 scripts/start.sh delete mode 100755 scripts/wait-for-it.sh diff --git a/.env b/.env index 33e0384..09a783c 100644 --- a/.env +++ b/.env @@ -1,32 +1,29 @@ -POSTGRES_USER=unicorn_user -POSTGRES_PASSWORD=magical_password -POSTGRES_DB=calendso -DATABASE_HOST=db:5432 -DATABASE_URL="postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${DATABASE_HOST}/${POSTGRES_DB}" -GOOGLE_API_CREDENTIALS='secret' -BASE_URL='http://localhost:3000' -NEXTAUTH_URL='http://localhost:3000' +DATABASE_URL=postgresql://unicorn_user:magical_password@db:5432/calendso +BASE_URL=http://localhost:3000 +NEXTAUTH_URL=http://localhost:3000 # Remove this var if you don't want Calendso to collect anonymous usage NEXT_PUBLIC_TELEMETRY_KEY=js.2pvs2bbpqq1zxna97wcml.oi2jzirnbj1ev4tc57c5r # Used for the Office 365 / Outlook.com Calendar integration -MS_GRAPH_CLIENT_ID= -MS_GRAPH_CLIENT_SECRET= +# MS_GRAPH_CLIENT_ID= +# MS_GRAPH_CLIENT_SECRET= # Used for the Zoom integration -ZOOM_CLIENT_ID= -ZOOM_CLIENT_SECRET= +# ZOOM_CLIENT_ID= +# ZOOM_CLIENT_SECRET= # E-mail settings # Configures the global From: header whilst sending emails. -EMAIL_FROM='notifications@example.com' +EMAIL_FROM=notifications@example.com # Configure SMTP settings (@see https://nodemailer.com/smtp/). -EMAIL_SERVER_HOST='smtp.example.com' +EMAIL_SERVER_HOST=smtp.example.com EMAIL_SERVER_PORT=587 -EMAIL_SERVER_USER='email_user' -EMAIL_SERVER_PASSWORD='email_password' +EMAIL_SERVER_USER=email_user +EMAIL_SERVER_PASSWORD=email_password # Encryption key that will be used to encrypt CalDAV credentials, choose a random string, for example with `dd if=/dev/urandom bs=1K count=1 | md5sum` -CALENDSO_ENCRYPTION_KEY='' +# CALENDSO_ENCRYPTION_KEY= + +JWT_SECRET=ChangeMe diff --git a/Dockerfile b/Dockerfile index dc5b457..ec2ba01 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,19 +1,16 @@ -FROM node:14-alpine as deps +FROM node:14-alpine AS base # Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed. RUN apk add --no-cache libc6-compat WORKDIR /app -COPY calendso/package.json calendso/yarn.lock ./ -COPY calendso/prisma ./prisma/ -RUN yarn install --frozen-lockfile -RUN npx prisma generate - -FROM node:14-alpine as builder -WORKDIR /app COPY calendso . -COPY --from=deps /app/node_modules ./node_modules +RUN yarn install --frozen-lockfile + +FROM node:14-alpine AS builder +WORKDIR /app +COPY --from=base /app/ ./ RUN yarn build && yarn install --production --ignore-scripts --prefer-offline -FROM node:14-alpine as runner +FROM node:14-alpine AS runner WORKDIR /app ENV NODE_ENV production @@ -30,8 +27,10 @@ COPY --from=builder /app/package.json ./package.json USER nextjs EXPOSE 3000 + # Next.js collects completely anonymous telemetry data about general usage. # Learn more here: https://nextjs.org/telemetry # Uncomment the following line in case you want to disable telemetry. # ENV NEXT_TELEMETRY_DISABLED 1 + CMD ["yarn", "start"] diff --git a/docker-compose.yaml b/docker-compose.yaml index c7e6f74..17ed4d3 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -6,16 +6,19 @@ services: restart: always volumes: - database-data:/var/lib/postgresql/data/ - env_file: .env ports: - 5432:5432 calendso: - build: . + build: + target: "base" restart: always ports: - 3000:3000 - 5555:5555 env_file: .env + command: sh -c "npx prisma migrate reset --force && yarn db-seed && yarn dev" + environment: + - NODE_ENV=development depends_on: - db volumes: diff --git a/scripts/.gitkeep b/scripts/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/scripts/start.sh b/scripts/start.sh deleted file mode 100755 index 031c0f2..0000000 --- a/scripts/start.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -set -x - -/app/scripts/wait-for-it.sh ${DATABASE_HOST} -- echo "db is up" -npx prisma migrate deploy -yarn start diff --git a/scripts/wait-for-it.sh b/scripts/wait-for-it.sh deleted file mode 100755 index 0816f6f..0000000 --- a/scripts/wait-for-it.sh +++ /dev/null @@ -1,184 +0,0 @@ -#!/bin/sh - -# The MIT License (MIT) -# -# Copyright (c) 2017 Eficode Oy -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. - -set -- "$@" -- "$TIMEOUT" "$QUIET" "$PROTOCOL" "$HOST" "$PORT" "$result" -TIMEOUT=15 -QUIET=0 -# The protocol to make the request with, either "tcp" or "http" -PROTOCOL="tcp" - -echoerr() { - if [ "$QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi -} - -usage() { - exitcode="$1" - cat << USAGE >&2 -Usage: - $0 host:port|url [-t timeout] [-- command args] - -q | --quiet Do not output any status messages - -t TIMEOUT | --timeout=timeout Timeout in seconds, zero for no timeout - -- COMMAND ARGS Execute command with args after the test finishes -USAGE - exit "$exitcode" -} - -wait_for() { - case "$PROTOCOL" in - tcp) - if ! command -v nc >/dev/null; then - echoerr 'nc command is missing!' - exit 1 - fi - ;; - wget) - if ! command -v wget >/dev/null; then - echoerr 'nc command is missing!' - exit 1 - fi - ;; - esac - - while :; do - case "$PROTOCOL" in - tcp) - nc -w 1 -z "$HOST" "$PORT" > /dev/null 2>&1 - ;; - http) - wget --timeout=1 -q "$HOST" -O /dev/null > /dev/null 2>&1 - ;; - *) - echoerr "Unknown protocol '$PROTOCOL'" - exit 1 - ;; - esac - - result=$? - - if [ $result -eq 0 ] ; then - if [ $# -gt 7 ] ; then - for result in $(seq $(($# - 7))); do - result=$1 - shift - set -- "$@" "$result" - done - - TIMEOUT=$2 QUIET=$3 PROTOCOL=$4 HOST=$5 PORT=$6 result=$7 - shift 7 - exec "$@" - fi - exit 0 - fi - - if [ "$TIMEOUT" -le 0 ]; then - break - fi - TIMEOUT=$((TIMEOUT - 1)) - - sleep 1 - done - echo "Operation timed out" >&2 - exit 1 -} - -while :; do - case "$1" in - http://*|https://*) - HOST="$1" - PROTOCOL="http" - shift 1 - ;; - *:* ) - HOST=$(printf "%s\n" "$1"| cut -d : -f 1) - PORT=$(printf "%s\n" "$1"| cut -d : -f 2) - shift 1 - ;; - -q | --quiet) - QUIET=1 - shift 1 - ;; - -q-*) - QUIET=0 - echoerr "Unknown option: $1" - usage 1 - ;; - -q*) - QUIET=1 - result=$1 - shift 1 - set -- -"${result#-q}" "$@" - ;; - -t | --timeout) - TIMEOUT="$2" - shift 2 - ;; - -t*) - TIMEOUT="${1#-t}" - shift 1 - ;; - --timeout=*) - TIMEOUT="${1#*=}" - shift 1 - ;; - --) - shift - break - ;; - --help) - usage 0 - ;; - -*) - QUIET=0 - echoerr "Unknown option: $1" - usage 1 - ;; - *) - QUIET=0 - echoerr "Unknown argument: $1" - usage 1 - ;; - esac -done - -if ! [ "$TIMEOUT" -ge 0 ] 2>/dev/null; then - echoerr "Error: invalid timeout '$TIMEOUT'" - usage 3 -fi - -case "$PROTOCOL" in - tcp) - if [ "$HOST" = "" ] || [ "$PORT" = "" ]; then - echoerr "Error: you need to provide a host and port to test." - usage 2 - fi - ;; - http) - if [ "$HOST" = "" ]; then - echoerr "Error: you need to provide a host to test." - usage 2 - fi - ;; -esac - -wait_for "$@" \ No newline at end of file