From 9a54297efd040efc9345103f30fbea0d492f7b86 Mon Sep 17 00:00:00 2001 From: Ricardo Paes Date: Sun, 6 Feb 2022 15:02:04 -0300 Subject: [PATCH] Build backend in docker for production with env vars --- .gitignore | 1 + backend/.dockerignore | 5 ++++ backend/Dockerfile | 23 +++++++++++++++++ backend/src/libs/wbot.ts | 4 ++- docker-compose.yaml | 56 ++++++++++++++++++++++++++++++++++++++++ frontend/.dockerignore | 5 ++++ 6 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 .gitignore create mode 100644 backend/.dockerignore create mode 100644 backend/Dockerfile create mode 100644 docker-compose.yaml create mode 100644 frontend/.dockerignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d90cb51 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.docker/data/ \ No newline at end of file diff --git a/backend/.dockerignore b/backend/.dockerignore new file mode 100644 index 0000000..0d40646 --- /dev/null +++ b/backend/.dockerignore @@ -0,0 +1,5 @@ +.git +*Dockerfile* +*docker-compose* +node_modules +dist \ No newline at end of file diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..f416a29 --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,23 @@ +FROM node:14 as build-deps + +WORKDIR /usr/src/app +COPY package*.json ./ +RUN npm install + +COPY . . +RUN npm run build + +RUN apt-get update && apt-get install -y wget +ENV DOCKERIZE_VERSION v0.6.1 +RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ + && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \ + && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz + +ENV NODE_ENV=production +ENV PORT=3000 + +EXPOSE 3000 + +ENTRYPOINT dockerize -wait tcp://${DB_HOST}:3306 \ + && npx sequelize db:migrate \ + && node dist/server.js \ No newline at end of file diff --git a/backend/src/libs/wbot.ts b/backend/src/libs/wbot.ts index 4febef7..b50f7bf 100644 --- a/backend/src/libs/wbot.ts +++ b/backend/src/libs/wbot.ts @@ -46,7 +46,9 @@ export const initWbot = async (whatsapp: Whatsapp): Promise => { const wbot: Session = new Client({ session: sessionCfg, puppeteer: { - executablePath: process.env.CHROME_BIN || undefined + executablePath: process.env.CHROME_BIN || undefined, + // @ts-ignore + browserWSEndpoint: process.env.CHROME_WS || undefined } }); diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..198889b --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,56 @@ +version: '3' + +networks: + whaticket: + +services: + + backend: + build: + context: ./backend + dockerfile: ./Dockerfile + environment: + - DB_HOST=mysql + - DB_USER=root + - DB_PASS=${MYSQL_ROOT_PASSWORD:-strongpassword} + - DB_NAME=${MYSQL_DATABASE:-whaticket} + - JWT_SECRET=${JWT_SECRET:-3123123213123} + - JWT_REFRESH_SECRET=${JWT_REFRESH_SECRET:-75756756756} + - CHROME_WS=ws://chrome:3000 + ports: + - 8080:3000 + networks: + - whaticket + + frontend: + ports: + - 3000:80 + build: + context: ./frontend + dockerfile: ./Dockerfile + environment: + - URL_BACKEND=http://backend:3000/ + networks: + - whaticket + + mysql: + image: mariadb:latest + command: --character-set-server=utf8mb4 --collation-server=utf8mb4_bin + ports: + - 3306:3306 + volumes: + - ./.docker/data/:/var/lib/mysql + environment: + - MYSQL_DATABASE=${MYSQL_DATABASE:-whaticket} + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-strongpassword} + - TZ=${TZ:-America/Fortaleza} + restart: always + networks: + - whaticket + + chrome: + image: browserless/chrome:latest + environment: + - MAX_CONCURRENT_SESSIONS=10 + networks: + - whaticket \ No newline at end of file diff --git a/frontend/.dockerignore b/frontend/.dockerignore new file mode 100644 index 0000000..b5f3ce1 --- /dev/null +++ b/frontend/.dockerignore @@ -0,0 +1,5 @@ +.git +*Dockerfile* +*docker-compose* +node_modules +build \ No newline at end of file