Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,18 @@ Evolution Go is a high-performance WhatsApp API built in Go, part of the [Evolut

### Docker (Recommended)

The easiest and fastest way to start the project with all its dependencies (PostgreSQL, RabbitMQ, MinIO) is by using our automated script:

```bash
git clone https://github.com/EvolutionAPI/evolution-go.git
cd evolution-go
make docker-build
make docker-run

# Runs the script that will prepare dependencies, variables, and start the containers
bash ./start.sh
```

> **Note:** The `start.sh` script will initialize submodules, create your `.env` based on `.env.example` (adjusting hosts for Docker), and run `docker compose up -d --build`.

### Local Development

```bash
Expand Down
86 changes: 86 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
version: '3.8'

services:
evolution-go:
build:
context: .
dockerfile: Dockerfile
image: evolution-go:latest
container_name: evolution-go
restart: unless-stopped
ports:
- "8080:8080"
env_file:
- .env
volumes:
- evolution_data:/app/dbdata
- evolution_logs:/app/logs
networks:
- evolution_network
depends_on:
- postgres
- rabbitmq
- minio

postgres:
image: postgres:15-alpine
container_name: evolution-postgres
restart: unless-stopped
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: root
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
- ./docker/examples/init-db.sql:/docker-entrypoint-initdb.d/init-db.sql
networks:
- evolution_network

rabbitmq:
Comment on lines +31 to +40
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚨 issue (security): Exposed services use default credentials and public ports, which can be risky outside a local-only environment.

Postgres, RabbitMQ, and MinIO are all using default credentials and publishing ports directly to the host. That’s OK for strictly local use, but on any network-accessible machine it exposes these services with trivial passwords. Consider documenting this clearly and/or providing a separate compose override that either binds only to 127.0.0.1 or uses stronger secrets to reduce accidental exposure.

image: rabbitmq:3-management-alpine
container_name: evolution-rabbitmq
restart: unless-stopped
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: admin
RABBITMQ_DEFAULT_VHOST: default
ports:
- "5672:5672"
- "15672:15672"
volumes:
- rabbitmq_data:/var/lib/rabbitmq
networks:
- evolution_network

minio:
image: minio/minio:latest
container_name: evolution-minio
restart: unless-stopped
command: server /data --console-address ":9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
ports:
- "9000:9000"
- "9001:9001"
volumes:
- minio_data:/data
networks:
- evolution_network

volumes:
evolution_data:
driver: local
evolution_logs:
driver: local
postgres_data:
driver: local
rabbitmq_data:
driver: local
minio_data:
driver: local

networks:
evolution_network:
driver: bridge
68 changes: 68 additions & 0 deletions start.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/bin/bash

# Output colors
GREEN='\033[0;32m'
BLUE='\033[0;34m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
NC='\033[0m' # No Color

echo -e "${BLUE}=== Initializing Evolution Go via Docker ===${NC}\n"

# 1. Update git submodules (fixes empty folder error in whatsmeow-lib)
echo -e "${YELLOW}[1/4] Preparing dependencies (git submodules)...${NC}"
git submodule update --init --recursive
if [ $? -ne 0 ]; then
echo -e "${RED}Error initializing submodules. Please check if git is installed.${NC}"
exit 1
fi
echo -e "${GREEN}Dependencies prepared successfully!${NC}\n"

# 2. Create .env file if it doesn't exist
echo -e "${YELLOW}[2/4] Configuring environment variables...${NC}"
if [ ! -f .env ]; then
if [ -f .env.example ]; then
cp .env.example .env

# Automatically adjust for Docker Compose
sed -i 's/localhost:5432/postgres:5432/g' .env
sed -i 's/localhost:5672/rabbitmq:5672/g' .env
sed -i 's/localhost:9000/minio:9000/g' .env
Comment on lines +28 to +30
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

issue (bug_risk): The sed -i usage is GNU-specific and may fail on macOS/other BSD-based systems.

On macOS (BSD sed), this form of sed -i will fail because it requires a backup extension (e.g., -i ''). To keep start.sh portable, consider detecting the platform and adjusting the flags, or avoid in-place edits by writing to a temp file and moving it back.


echo -e "${GREEN}.env file created from .env.example and adjusted for Docker!${NC}\n"
else
echo -e "${RED}.env.example file not found!${NC}"
exit 1
fi
else
echo -e "${GREEN}.env file already exists, keeping current configuration.${NC}\n"
fi

# 3. Build and start containers via Docker Compose
echo -e "${YELLOW}[3/4] Building image and starting containers (This may take a few minutes)...${NC}"
if command -v docker-compose &> /dev/null; then
docker-compose up -d --build
elif docker compose version &> /dev/null; then
docker compose up -d --build
else
echo -e "${RED}Docker Compose not found. Please install Docker Compose first.${NC}"
exit 1
fi

if [ $? -ne 0 ]; then
echo -e "${RED}Error starting Docker containers.${NC}"
exit 1
fi
echo -e "${GREEN}Containers started successfully!${NC}\n"

# 4. Finalization
echo -e "${BLUE}=== All set! ===${NC}"
echo -e "Evolution Go and its dependencies are running in the background."
echo -e "\nServices available:"
echo -e "- Evolution Go API: ${GREEN}http://localhost:8080${NC}"
echo -e "- Swagger Docs: ${GREEN}http://localhost:8080/swagger/index.html${NC}"
echo -e "- Manager UI: ${GREEN}http://localhost:8080/manager/login${NC}"
echo -e "- RabbitMQ Admin: ${GREEN}http://localhost:15672${NC} (admin/admin)"
echo -e "- MinIO Console: ${GREEN}http://localhost:9001${NC} (minioadmin/minioadmin)"
echo -e "\nTo view API logs, run:"
echo -e "${YELLOW}docker compose logs -f evolution-go${NC}"