From 92e5ae0ebdebc43b82b81edcb72b214d0417334e Mon Sep 17 00:00:00 2001 From: ksurl Date: Mon, 21 Nov 2022 11:26:44 -0800 Subject: [PATCH] refactor(docker-compose): combine dockerfiles with entrypoint (#727) * combine worker and main image, support encryption key, app secret key env, and postgres pw * Update docker/entrypoint.sh fix env file path Co-authored-by: Ali BARIN * add build tag, move compose to root * add volumes * style: remove trailing indent * refactor(docker-compose): empty encryption env. vars * docs(docker-compose): update compose folder * refactor(docker-compose): remove host network * fix(docker-compose): add environment variable keys Co-authored-by: Ali BARIN --- README.md | 2 +- .../docker-compose.yml => docker-compose.yml | 29 ++++++++++++++----- docker/{images/worker => }/Dockerfile | 7 +++-- docker/entrypoint.sh | 26 +++++++++++++++++ docker/images/main/Dockerfile | 15 ---------- packages/docs/pages/guide/installation.md | 2 +- 6 files changed, 54 insertions(+), 27 deletions(-) rename docker/compose/docker-compose.yml => docker-compose.yml (58%) rename docker/{images/worker => }/Dockerfile (50%) create mode 100755 docker/entrypoint.sh delete mode 100644 docker/images/main/Dockerfile diff --git a/README.md b/README.md index e89c008e..cdded87a 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ The official documentation can be found here: [https://automatisch.io/docs](http git clone git@github.com:automatisch/automatisch.git # Go to the repository folder -cd automatisch/docker/compose +cd automatisch # Start docker compose -p automatisch up diff --git a/docker/compose/docker-compose.yml b/docker-compose.yml similarity index 58% rename from docker/compose/docker-compose.yml rename to docker-compose.yml index 9938eabc..b9b13263 100644 --- a/docker/compose/docker-compose.yml +++ b/docker-compose.yml @@ -2,8 +2,9 @@ version: '3.9' services: main: build: - context: ../images/main - network: host + context: ./docker + tags: + - automatisch/automatisch ports: - '3000:3000' depends_on: @@ -18,12 +19,16 @@ services: - POSTGRES_HOST=postgres - POSTGRES_DATABASE=automatisch - POSTGRES_USERNAME=automatisch_user + - POSTGRES_PASSWORD=automatisch_password + - ENCRYPTION_KEY + - APP_SECRET_KEY volumes: - automatisch_storage:/automatisch/storage worker: build: - context: ../images/worker - network: host + context: ./docker + tags: + - automatisch/automatisch depends_on: - main environment: @@ -32,15 +37,25 @@ services: - POSTGRES_HOST=postgres - POSTGRES_DATABASE=automatisch - POSTGRES_USERNAME=automatisch_user + - POSTGRES_PASSWORD=automatisch_password + - ENCRYPTION_KEY + - APP_SECRET_KEY + - WORKER=true volumes: - automatisch_storage:/automatisch/storage postgres: image: 'postgres:14.5' environment: - POSTGRES_HOST_AUTH_METHOD: trust - POSTGRES_DB: automatisch - POSTGRES_USER: automatisch_user + - POSTGRES_DB=automatisch + - POSTGRES_USER=automatisch_user + - POSTGRES_PASSWORD=automatisch_password + volumes: + - postgres_data:/var/lib/postgresql/data redis: image: 'redis:7.0.4' + volumes: + - redis_data:/data volumes: automatisch_storage: + postgres_data: + redis_data: diff --git a/docker/images/worker/Dockerfile b/docker/Dockerfile similarity index 50% rename from docker/images/worker/Dockerfile rename to docker/Dockerfile index 05fa46ea..c1508952 100644 --- a/docker/images/worker/Dockerfile +++ b/docker/Dockerfile @@ -3,8 +3,9 @@ FROM node:16 WORKDIR /automatisch RUN apt-get update && apt-get install -y postgresql-client - -COPY ./wait-for-postgres.sh /automatisch/wait-for-postgres.sh +COPY ./entrypoint.sh /entrypoint.sh RUN yarn global add @automatisch/cli@0.2.0 -CMD sh /automatisch/wait-for-postgres.sh automatisch start-worker --env-file /automatisch/storage/.env + +EXPOSE 3000 +ENTRYPOINT /entrypoint.sh diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh new file mode 100755 index 00000000..5ac0ae56 --- /dev/null +++ b/docker/entrypoint.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +set -e + +export PGPASSWORD="$POSTGRES_PASSWORD" + +until psql -h "$POSTGRES_HOST" -U "$POSTGRES_USERNAME" -d "$POSTGRES_DATABASE" -c '\q'; do + >&2 echo "Waiting for Postgres to be ready..." + sleep 1 +done + +if [ ! -f /automatisch/storage/.env ]; then + >&2 echo "Saving environment variables" + ENCRYPTION_KEY="${ENCRYPTION_KEY:-$(openssl rand -base64 36)}" + APP_SECRET_KEY="${APP_SECRET_KEY:-$(openssl rand -base64 36)}" + echo "ENCRYPTION_KEY=$ENCRYPTION_KEY" >> /automatisch/storage/.env + echo "APP_SECRET_KEY=$APP_SECRET_KEY" >> /automatisch/storage/.env +fi + +>&2 echo "Postgres is up - executing command" + +if [ -n "$WORKER" ]; then + automatisch start-worker --env-file /automatisch/storage/.env +else + automatisch start --env-file /automatisch/storage/.env +fi diff --git a/docker/images/main/Dockerfile b/docker/images/main/Dockerfile deleted file mode 100644 index 9bd1d84b..00000000 --- a/docker/images/main/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -# syntax=docker/dockerfile:1 -FROM node:16 -WORKDIR /automatisch - -RUN apt-get update && apt-get install -y postgresql-client -COPY ./wait-for-postgres.sh /automatisch/wait-for-postgres.sh - -RUN mkdir -p /automatisch/storage -RUN touch /automatisch/storage/.env -RUN echo "ENCRYPTION_KEY=$(openssl rand -base64 36)" >> /automatisch/storage/.env -RUN echo "APP_SECRET_KEY=$(openssl rand -base64 36)" >> /automatisch/storage/.env -RUN yarn global add @automatisch/cli@0.2.0 - -EXPOSE 3000 -CMD sh /automatisch/wait-for-postgres.sh automatisch start --env-file=/automatisch/storage/.env diff --git a/packages/docs/pages/guide/installation.md b/packages/docs/pages/guide/installation.md index 60a0627c..376a71b7 100644 --- a/packages/docs/pages/guide/installation.md +++ b/packages/docs/pages/guide/installation.md @@ -7,7 +7,7 @@ You can install Automatisch by using docker compose. git clone git@github.com:automatisch/automatisch.git # Go to the repository folder -cd automatisch/docker/compose +cd automatisch # Start docker compose -p automatisch up