This commit is contained in:
Lucas Tonon 2024-11-17 17:21:52 -03:00
parent 9c8c2bc4ab
commit c2e5c44a9c
8 changed files with 266 additions and 181 deletions

View File

@ -183,7 +183,7 @@ CONFIG_SESSION_PHONE_VERSION=2.3000.1015901307
# Set qrcode display limit
QRCODE_LIMIT=30
# Color of the QRCode on base64
QRCODE_COLOR='#175197'
QRCODE_COLOR='#000000'
# Typebot - Environment variables
TYPEBOT_ENABLED=false
@ -210,13 +210,13 @@ DIFY_ENABLED=false
# Cache - Environment variables
# Redis Cache enabled
CACHE_REDIS_ENABLED=true
CACHE_REDIS_ENABLED=false
CACHE_REDIS_URI=redis://redis:6379/6
CACHE_REDIS_TTL=604800
# Prefix serves to differentiate data from one installation to another that are using the same redis
CACHE_REDIS_PREFIX_KEY=evolution
# Enabling this variable will save the connection information in Redis and not in the database.
CACHE_REDIS_SAVE_INSTANCES=false
CACHE_REDIS_SAVE_INSTANCES=true
# Local Cache enabled
CACHE_LOCAL_ENABLED=false

View File

@ -1,48 +0,0 @@
name: Build Docker image
on:
push:
tags:
- "*.*.*"
jobs:
build_deploy:
name: Build and Deploy
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: atendai/evolution-api
tags: type=semver,pattern=v{{version}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v5
with:
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}

View File

@ -1,48 +0,0 @@
name: Build Docker image
on:
push:
branches:
- develop
jobs:
build_deploy:
name: Build and Deploy
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: atendai/evolution-api
tags: homolog
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v5
with:
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}

View File

@ -1,48 +0,0 @@
name: Build Docker image
on:
push:
branches:
- main
jobs:
build_deploy:
name: Build and Deploy
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Docker meta
id: meta
uses: docker/metadata-action@v5
with:
images: atendai/evolution-api
tags: latest
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push
id: docker_build
uses: docker/build-push-action@v5
with:
platforms: linux/amd64,linux/arm64
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
- name: Image digest
run: echo ${{ steps.docker_build.outputs.digest }}

View File

@ -0,0 +1,86 @@
name: Deploying API to Cloud Run
on:
pull_request:
branches: ["main", "dev", "qa"]
paths:
- "**"
env:
PROJECT_ID: skysales-ai
GAR_LOCATION: us-central1
CR_SERVICE: wpp-provider-api
SERVICE: klaus-cloudrun-service
REGION: us-central1
jobs:
deploy-backend:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Setup Google Cloud SDK
uses: google-github-actions/setup-gcloud@v2
with:
project_id: ${{ env.PROJECT_ID }}
service_account_key: ${{ secrets.GCP_SA_KEY }}
export_default_credentials: true
- name: Docker Auth
uses: "docker/login-action@v1"
with:
username: _json_key
password: "${{ secrets.GCP_SA_KEY }}"
registry: "${{ env.GAR_LOCATION }}-docker.pkg.dev"
- name: Build and Push Container
run: |-
docker build \
--build-arg SERVER_TYPE=http \
--build-arg SERVER_PORT=8080 \
--build-arg SERVER_URL=http://localhost:8080 \
--build-arg CORS_ORIGIN=* \
--build-arg CORS_METHODS=GET,POST,PUT,DELETE \
--build-arg CORS_CREDENTIALS=true \
--build-arg LOG_LEVEL=ERROR,WARN,DEBUG,INFO,LOG,VERBOSE,DARK,WEBHOOKS,WEBSOCKET \
--build-arg LOG_COLOR=true \
--build-arg LOG_BAILEYS=error \
--build-arg EVENT_EMITTER_MAX_LISTENERS=50 \
--build-arg DEL_INSTANCE=false \
--build-arg DATABASE_PROVIDER=postgresql \
--build-arg DATABASE_CONNECTION_CLIENT_NAME=evolution_exchange \
--build-arg DATABASE_SAVE_DATA_INSTANCE=true \
--build-arg DATABASE_SAVE_DATA_NEW_MESSAGE=true \
--build-arg DATABASE_SAVE_MESSAGE_UPDATE=true \
--build-arg DATABASE_SAVE_DATA_CONTACTS=true \
--build-arg DATABASE_SAVE_DATA_CHATS=true \
--build-arg DATABASE_SAVE_DATA_LABELS=true \
--build-arg DATABASE_SAVE_DATA_HISTORIC=true \
--build-arg DATABASE_SAVE_IS_ON_WHATSAPP=true \
--build-arg DATABASE_SAVE_IS_ON_WHATSAPP_DAYS=7 \
--build-arg DATABASE_DELETE_MESSAGE=true \
--build-arg AUTHENTICATION_API_KEY=2325CBB2-A2BB-4F98-8D88-D0B513435C7F \
--build-arg AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true \
--build-arg LANGUAGE=en \
-t "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/wpp-provider-api:${{ github.sha }}" \
--file ./prod.Dockerfile \
./
docker push "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/wpp-provider-api:${{ github.sha }}"
- name: Authenticate gcloud
uses: "google-github-actions/auth@v2"
with:
credentials_json: ${{ secrets.GCP_SA_KEY }}
service_account: "github-actions@skysales-ai.iam.gserviceaccount.com"
- name: Deploy to Cloud Run
uses: google-github-actions/deploy-cloudrun@v2.3.0
with:
service: ${{ env.CR_SERVICE }}
region: ${{ env.REGION }}
image: "${{ env.GAR_LOCATION }}-docker.pkg.dev/${{ env.PROJECT_ID }}/${{ env.SERVICE }}/wpp-provider-api:${{ github.sha }}"
secrets: |
DATABASE_CONNECTION_URI=WPP_API_PG_STRING:latest
- name: Show Output
run: echo ${{ steps.deploy.outputs.url }}

4
.gitignore vendored
View File

@ -48,4 +48,6 @@ lerna-debug.log*
/prisma/migrations/*
pgadmin/*
pgadmin/*
.DS_Store

View File

@ -5,7 +5,7 @@ services:
restart: always
depends_on:
- redis
- postgres
# - postgres
ports:
- 8080:8080
volumes:
@ -32,39 +32,39 @@ services:
- 6379:6379
postgres:
container_name: postgres
image: postgres:15
networks:
- evolution-net
command: ["postgres", "-c", "max_connections=1000", "-c", "listen_addresses=*"]
restart: always
ports:
- 5432:5432
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=pass
- POSTGRES_DB=evolution
- POSTGRES_HOST_AUTH_METHOD=trust
volumes:
- postgres_data:/var/lib/postgresql/data
expose:
- 5432
# postgres:
# container_name: postgres
# image: postgres:15
# networks:
# - evolution-net
# command: ["postgres", "-c", "max_connections=1000", "-c", "listen_addresses=*"]
# restart: always
# ports:
# - 5432:5432
# environment:
# - POSTGRES_USER=user
# - POSTGRES_PASSWORD=pass
# - POSTGRES_DB=evolution
# - POSTGRES_HOST_AUTH_METHOD=trust
# volumes:
# - postgres_data:/var/lib/postgresql/data
# expose:
# - 5432
pgadmin:
image: dpage/pgadmin4
container_name: pgadmin-container
environment:
PGADMIN_DEFAULT_EMAIL: user@example.com
PGADMIN_DEFAULT_PASSWORD: adm
volumes:
- ./pgadmin:/var/lib/pgadmin
ports:
- "5050:80"
depends_on:
- postgres
networks:
- evolution-net
# pgadmin:
# image: dpage/pgadmin4
# container_name: pgadmin-container
# environment:
# PGADMIN_DEFAULT_EMAIL: user@example.com
# PGADMIN_DEFAULT_PASSWORD: adm
# volumes:
# - ./pgadmin:/var/lib/pgadmin
# ports:
# - "5050:80"
# depends_on:
# - postgres
# networks:
# - evolution-net
volumes:

141
prod.Dockerfile Normal file
View File

@ -0,0 +1,141 @@
# Stage 1: Build
FROM node:20-alpine AS builder
RUN apk update && \
apk add git ffmpeg wget curl bash
LABEL version="2.2.0" description="API to control WhatsApp features through HTTP requests."
LABEL maintainer="Davidson Gomes" git="https://github.com/DavidsonGomes"
LABEL contact="contato@atendai.com"
WORKDIR /evolution
COPY ./package.json ./tsconfig.json ./
RUN npm install -f
COPY ./src ./src
COPY ./public ./public
COPY ./prisma ./prisma
COPY ./manager ./manager
COPY ./runWithProvider.js ./
COPY ./tsup.config.ts ./
COPY ./Docker ./Docker
RUN chmod +x ./Docker/scripts/* && dos2unix ./Docker/scripts/*
RUN ./Docker/scripts/generate_database.sh
RUN npm run build
# Stage 2: Final
FROM node:20-alpine AS final
RUN apk update && \
apk add tzdata ffmpeg bash
ENV TZ=America/Sao_Paulo
WORKDIR /evolution
# Copy necessary files from builder
COPY --from=builder /evolution/package.json ./package.json
COPY --from=builder /evolution/package-lock.json ./package-lock.json
COPY --from=builder /evolution/node_modules ./node_modules
COPY --from=builder /evolution/dist ./dist
COPY --from=builder /evolution/prisma ./prisma
COPY --from=builder /evolution/manager ./manager
COPY --from=builder /evolution/public ./public
COPY --from=builder /evolution/Docker ./Docker
COPY --from=builder /evolution/runWithProvider.js ./runWithProvider.js
COPY --from=builder /evolution/tsup.config.ts ./tsup.config.ts
# Accept build arguments and set as environment variables
# Server Configuration
ARG SERVER_TYPE
ARG SERVER_PORT
ARG SERVER_URL
ENV SERVER_TYPE=${SERVER_TYPE}
ENV SERVER_PORT=${SERVER_PORT}
ENV SERVER_URL=${SERVER_URL}
# CORS Configuration
ARG CORS_ORIGIN
ARG CORS_METHODS
ARG CORS_CREDENTIALS
ENV CORS_ORIGIN=${CORS_ORIGIN}
ENV CORS_METHODS=${CORS_METHODS}
ENV CORS_CREDENTIALS=${CORS_CREDENTIALS}
# Logging Configuration
ARG LOG_LEVEL
ARG LOG_COLOR
ARG LOG_BAILEYS
ENV LOG_LEVEL=${LOG_LEVEL}
ENV LOG_COLOR=${LOG_COLOR}
ENV LOG_BAILEYS=${LOG_BAILEYS}
# Event Emitter Configuration
ARG EVENT_EMITTER_MAX_LISTENERS
ENV EVENT_EMITTER_MAX_LISTENERS=${EVENT_EMITTER_MAX_LISTENERS}
# Instance Deletion Configuration
ARG DEL_INSTANCE
ENV DEL_INSTANCE=${DEL_INSTANCE}
# Database Configuration
ARG DATABASE_PROVIDER
ARG DATABASE_CONNECTION_URI
ARG DATABASE_CONNECTION_CLIENT_NAME
ENV DATABASE_PROVIDER=${DATABASE_PROVIDER}
ENV DATABASE_CONNECTION_URI=${DATABASE_CONNECTION_URI}
ENV DATABASE_CONNECTION_CLIENT_NAME=${DATABASE_CONNECTION_CLIENT_NAME}
# Database Save Options
ARG DATABASE_SAVE_DATA_INSTANCE
ARG DATABASE_SAVE_DATA_NEW_MESSAGE
ARG DATABASE_SAVE_MESSAGE_UPDATE
ARG DATABASE_SAVE_DATA_CONTACTS
ARG DATABASE_SAVE_DATA_CHATS
ARG DATABASE_SAVE_DATA_LABELS
ARG DATABASE_SAVE_DATA_HISTORIC
ARG DATABASE_SAVE_IS_ON_WHATSAPP
ARG DATABASE_SAVE_IS_ON_WHATSAPP_DAYS
ARG DATABASE_DELETE_MESSAGE
ENV DATABASE_SAVE_DATA_INSTANCE=${DATABASE_SAVE_DATA_INSTANCE}
ENV DATABASE_SAVE_DATA_NEW_MESSAGE=${DATABASE_SAVE_DATA_NEW_MESSAGE}
ENV DATABASE_SAVE_MESSAGE_UPDATE=${DATABASE_SAVE_MESSAGE_UPDATE}
ENV DATABASE_SAVE_DATA_CONTACTS=${DATABASE_SAVE_DATA_CONTACTS}
ENV DATABASE_SAVE_DATA_CHATS=${DATABASE_SAVE_DATA_CHATS}
ENV DATABASE_SAVE_DATA_LABELS=${DATABASE_SAVE_DATA_LABELS}
ENV DATABASE_SAVE_DATA_HISTORIC=${DATABASE_SAVE_DATA_HISTORIC}
ENV DATABASE_SAVE_IS_ON_WHATSAPP=${DATABASE_SAVE_IS_ON_WHATSAPP}
ENV DATABASE_SAVE_IS_ON_WHATSAPP_DAYS=${DATABASE_SAVE_IS_ON_WHATSAPP_DAYS}
ENV DATABASE_DELETE_MESSAGE=${DATABASE_DELETE_MESSAGE}
# Authentication Configuration
ARG AUTHENTICATION_API_KEY
ARG AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES
ENV AUTHENTICATION_API_KEY=${AUTHENTICATION_API_KEY}
ENV AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=${AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES}
# Language Configuration
ARG LANGUAGE
ENV LANGUAGE=${LANGUAGE}
# Additional Environment Variables
ENV DOCKER_ENV=true
EXPOSE 8080
ENTRYPOINT ["/bin/bash", "-c", ". ./Docker/scripts/deploy_database.sh && npm run start:prod" ]