Skip to content

Instantly share code, notes, and snippets.

@mdestafadilah
Created September 30, 2025 02:11
Show Gist options
  • Select an option

  • Save mdestafadilah/9421048657930a50f58cb94239c5ed90 to your computer and use it in GitHub Desktop.

Select an option

Save mdestafadilah/9421048657930a50f58cb94239c5ed90 to your computer and use it in GitHub Desktop.
Install EvolutionAPI on VPS (English Version ~ Translated)
How to Install aaPanel + Evolution API 2.2.3 on a VPS (Step by Step)
πŸš€ Evolution V2 Installation
1️⃣ System Update and Dependency Installation
Open a terminal and run the following command:
sudo apt-get update ; apt-get install -y apparmor-utils
2️⃣ Server Name Setting
You can replace manager1 with a name of your choice:
hostnamectl set-hostname manager1
3️⃣ /etc/hosts File Configuration
Edit the hosts file with the command:
nano /etc/hosts
Change the localhost line to the name you defined in the previous step (example: manager1):
127.0.0.1 manager1
After editing, save and exit (Ctrl+X, press Y and Enter).
4️⃣ Docker Installation
Run this command to install Docker:
curl -fsSL https://get.docker.com | bash
5️⃣ Swarm Initialization
After installation, start Docker Swarm with:
docker swarm init
6️⃣ Network Creation
Now, create the network for the containers:
docker network create --driver=overlay network_public
7️⃣ Traefik.yaml File Configuration
Open a text editor:
nano traefik.yaml
After editing the file, save and exit (Ctrl+X, press Y and Enter).
8️⃣ Stack Deployment
Finally, run the command below to deploy Traefik:
docker stack deploy --prune --resolve-image always -c traefik.yaml traefik
9️⃣ Portainer Installation
Run the following command to install Portainer:
docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:latest
πŸ’‘ Tip: Verify that the commands were executed correctly before proceeding to the next steps.
WARNING: If you change the Postgres password in the postgres.yaml file, you must update this password in the evolution.yaml file on lines 40 and 75. Failure to do so will result in errors.
@mdestafadilah
Copy link
Author

mdestafadilah commented Nov 7, 2025

# 🌐 SERVICE URL CONFIG
SERVICE_URL_EVO_8080=http://localhost:8080
SERVICE_URL_EVO=http://localhost:8080
SERVER_URL=${SERVICE_URL_EVO}

# πŸ”§ DATABASE CONFIG
DB_TYPE=postgresdb
POSTGRES_DB=postgres
DB_POSTGRESDB_HOST=postgres
DB_POSTGRESDB_PORT=5432
SERVICE_USER_POSTGRES=# isi_username_postgres
SERVICE_PASSWORD_POSTGRES=# isi_password_postgres
DATABASE_PROVIDER=postgresql
DATABASE_CONNECTION_CLIENT_NAME=evolution_v2

# 🧹 DATA SAVE OPTIONS
DEL_INSTANCE=false
DATABASE_SAVE_DATA_INSTANCE=true
DATABASE_SAVE_DATA_NEW_MESSAGE=true
DATABASE_SAVE_MESSAGE_UPDATE=true
DATABASE_SAVE_DATA_CONTACTS=true
DATABASE_SAVE_DATA_CHATS=true
DATABASE_SAVE_DATA_LABELS=true
DATABASE_SAVE_DATA_HISTORIC=true

# πŸ‡ RABBITMQ
RABBITMQ_ENABLED=false
RABBITMQ_URI=amqp://admin:admin@rabbitmq:5672/default
RABBITMQ_EXCHANGE_NAME=evolution_v2
RABBITMQ_GLOBAL_ENABLED=false
RABBITMQ_EVENTS_APPLICATION_STARTUP=false
RABBITMQ_EVENTS_INSTANCE_CREATE=false
RABBITMQ_EVENTS_INSTANCE_DELETE=false
RABBITMQ_EVENTS_QRCODE_UPDATED=false
RABBITMQ_EVENTS_MESSAGES_SET=false
RABBITMQ_EVENTS_MESSAGES_UPSERT=true
RABBITMQ_EVENTS_MESSAGES_EDITED=false
RABBITMQ_EVENTS_MESSAGES_UPDATE=false
RABBITMQ_EVENTS_MESSAGES_DELETE=false
RABBITMQ_EVENTS_SEND_MESSAGE=false
RABBITMQ_EVENTS_CONTACTS_SET=false
RABBITMQ_EVENTS_CONTACTS_UPSERT=false
RABBITMQ_EVENTS_CONTACTS_UPDATE=false
RABBITMQ_EVENTS_PRESENCE_UPDATE=false
RABBITMQ_EVENTS_CHATS_SET=false
RABBITMQ_EVENTS_CHATS_UPSERT=false
RABBITMQ_EVENTS_CHATS_UPDATE=false
RABBITMQ_EVENTS_CHATS_DELETE=false
RABBITMQ_EVENTS_GROUPS_UPSERT=false
RABBITMQ_EVENTS_GROUP_UPDATE=false
RABBITMQ_EVENTS_GROUP_PARTICIPANTS_UPDATE=false
RABBITMQ_EVENTS_CONNECTION_UPDATE=true
RABBITMQ_EVENTS_CALL=false
RABBITMQ_EVENTS_TYPEBOT_START=false
RABBITMQ_EVENTS_TYPEBOT_CHANGE_STATUS=false

# πŸ“¨ AWS SQS
SQS_ENABLED=false
SQS_ACCESS_KEY_ID=
SQS_SECRET_ACCESS_KEY=
SQS_ACCOUNT_ID=
SQS_REGION=

# πŸ”Œ WEBSOCKET
WEBSOCKET_ENABLED=false
WEBSOCKET_GLOBAL_EVENTS=false

# πŸ’¬ WHATSAPP BUSINESS
WA_BUSINESS_TOKEN_WEBHOOK=evolution
WA_BUSINESS_URL=https://graph.facebook.com
WA_BUSINESS_VERSION=v20.0
WA_BUSINESS_LANGUAGE=pt_BR

# 🌐 WEBHOOK EVENTS
WEBHOOK_GLOBAL_URL=''
WEBHOOK_GLOBAL_ENABLED=false
WEBHOOK_GLOBAL_WEBHOOK_BY_EVENTS=false
WEBHOOK_EVENTS_APPLICATION_STARTUP=false
WEBHOOK_EVENTS_QRCODE_UPDATED=true
WEBHOOK_EVENTS_MESSAGES_SET=true
WEBHOOK_EVENTS_MESSAGES_UPSERT=true
WEBHOOK_EVENTS_MESSAGES_EDITED=true
WEBHOOK_EVENTS_MESSAGES_UPDATE=true
WEBHOOK_EVENTS_MESSAGES_DELETE=true
WEBHOOK_EVENTS_SEND_MESSAGE=true
WEBHOOK_EVENTS_CONTACTS_SET=true
WEBHOOK_EVENTS_CONTACTS_UPSERT=true
WEBHOOK_EVENTS_CONTACTS_UPDATE=true
WEBHOOK_EVENTS_PRESENCE_UPDATE=true
WEBHOOK_EVENTS_CHATS_SET=true
WEBHOOK_EVENTS_CHATS_UPSERT=true
WEBHOOK_EVENTS_CHATS_UPDATE=true
WEBHOOK_EVENTS_CHATS_DELETE=true
WEBHOOK_EVENTS_GROUPS_UPSERT=true
WEBHOOK_EVENTS_GROUPS_UPDATE=true
WEBHOOK_EVENTS_GROUP_PARTICIPANTS_UPDATE=true
WEBHOOK_EVENTS_CONNECTION_UPDATE=true
WEBHOOK_EVENTS_LABELS_EDIT=true
WEBHOOK_EVENTS_LABELS_ASSOCIATION=true
WEBHOOK_EVENTS_CALL=true
WEBHOOK_EVENTS_TYPEBOT_START=false
WEBHOOK_EVENTS_TYPEBOT_CHANGE_STATUS=false
WEBHOOK_EVENTS_ERRORS=false
WEBHOOK_EVENTS_ERRORS_WEBHOOK=

# πŸ“± CLIENT CONFIG
CONFIG_SESSION_PHONE_CLIENT="Evolution API V2"
CONFIG_SESSION_PHONE_NAME="Chrome"
QRCODE_LIMIT=30

# 🧠 INTEGRATIONS
OPENAI_ENABLED=true
DIFY_ENABLED=true
FLOWISE_ENABLED=true
N8N_ENABLED=true
TYPEBOT_ENABLED=true
TYPEBOT_API_VERSION=latest
CHATWOOT_ENABLED=true
CHATWOOT_MESSAGE_READ=true
CHATWOOT_MESSAGE_DELETE=true
CHATWOOT_IMPORT_PLACEHOLDER_MEDIA_MESSAGE=true

# πŸ’Ύ CACHE / REDIS
CACHE_REDIS_ENABLED=true
CACHE_REDIS_URI=redis://redis:6379/6
CACHE_REDIS_PREFIX_KEY=evolution_v2
CACHE_REDIS_SAVE_INSTANCES=false
CACHE_LOCAL_ENABLED=false

# ☁️ S3 CONFIG
S3_ENABLED=false
S3_ACCESS_KEY=
S3_SECRET_KEY=
S3_BUCKET=evolution
S3_PORT=443
S3_REGION=us-east-1
S3_ENDPOINT=files.site.com
S3_USE_SSL=true

# πŸ” AUTHENTICATION
SERVICE_PASSWORD_AUTHENTICATIONAPIKEY=# isi_api_key
AUTHENTICATION_EXPOSE_IN_FETCH_INSTANCES=true

# 🌍 LANGUAGE
LANGUAGE=en

@mdestafadilah
Copy link
Author

WORKING VERSION


services:
  # --- Layanan Evolution API ---
  evolution_api:
    image: atendai/evolution-api:latest # Atau versi tertentu, misalnya :v2.x.x
    container_name: evolution_api_service
    restart: always
    ports:
      - "${EVO_PORT_EXT}:8080" # Mapping port eksternal:internal
    volumes:
      - evolution_instances:/evolution/instances # Data sesi WhatsApp
    networks:
      - evo-network
    environment:
      # Variabel Umum
      - AUTHENTICATION_API_KEY=${EVO_API_KEY}
      - DEL_INSTANCE=${EVO_DEL_INSTANCE}
      - SECRET_KEY=${EVO_SECRET_KEY}
      - SERVER_URL=${EVO_SERVER_URL}

      # Konfigurasi Database (PostgreSQL)
      - DATABASE_ENABLED=true
      - DATABASE_PROVIDER=postgresql
      - DATABASE_CONNECTION_URI=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:${POSTGRES_PORT_INT}/${POSTGRES_DB}

      # Konfigurasi Cache (Redis)
      - REDIS_ENABLED=true
      - REDIS_URI=redis://redis:${REDIS_PORT_INT}

  # --- Layanan PostgreSQL ---
  postgres:
    image: postgres:15-alpine
    container_name: postgres_db
    restart: always
    environment:
      - POSTGRES_USER=${POSTGRES_USER}
      - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
      - POSTGRES_DB=${POSTGRES_DB}
    volumes:
      - ./postgres/data:/var/lib/postgresql/data# Volume data persisten
    ports:
      - "${POSTGRES_PORT_EXT}:${POSTGRES_PORT_INT}" # Opsional: Untuk akses DB dari luar Docker
    networks:
      - evo-network

  # --- Layanan Redis ---
  redis:
    image: redis:7-alpine
    container_name: redis_cache
    restart: always
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data # Volume data persisten
    ports:
      - "${REDIS_PORT_EXT}:${REDIS_PORT_INT}" # Opsional: Untuk akses Redis dari luar Docker
    networks:
      - evo-network

# --- Volume Persisten ---
volumes:
  evolution_instances: # Untuk data sesi Evolution API
  postgres_data:       # Untuk data PostgreSQL
  redis_data:          # Untuk data Redis

# --- Jaringan ---
networks:
  evo-network:
    driver: bridge

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment