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
13 changes: 12 additions & 1 deletion .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,21 @@ API.md
LICENSE
*.md

# EasyPanel and deployment configs (not needed in container)
easypanel.json
docker-compose*.yml
docker-compose*.yaml

# Nix files
*.nix
flake.lock

# Others
.DS_Store
.idea/
.vscode/
*.swp
*.swo
tmp/
tmp/
*.test
*_test.go
91 changes: 91 additions & 0 deletions .env.easypanel.sample
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
# ===========================================
# WuzAPI - EasyPanel Environment Variables
# ===========================================
# Copy this file and configure the values below
# in EasyPanel's Environment Variables section

# -------------------------------------------
# REQUIRED - Security Tokens
# -------------------------------------------

# Admin token for managing users and sessions
# Generate a secure random string (minimum 32 characters)
WUZAPI_ADMIN_TOKEN=your_secure_admin_token_here_32chars

# Encryption key for sensitive data storage (exactly 32 characters for AES-256)
# IMPORTANT: Save this key! Losing it means losing access to all encrypted data
WUZAPI_GLOBAL_ENCRYPTION_KEY=your_32_character_encryption_key

# HMAC key for webhook signature verification (minimum 32 characters)
WUZAPI_GLOBAL_HMAC_KEY=your_hmac_key_minimum_32_characters

# -------------------------------------------
# REQUIRED - Database Configuration
# -------------------------------------------

# PostgreSQL credentials
DB_USER=wuzapi
DB_PASSWORD=your_secure_postgres_password
DB_NAME=wuzapi

# These are set automatically by docker-compose
# DB_HOST=db
# DB_PORT=5432
# DB_SSLMODE=disable

# -------------------------------------------
# OPTIONAL - Webhook Configuration
# -------------------------------------------

# Global webhook URL to receive all events from all users
# Leave empty to disable global webhook
WUZAPI_GLOBAL_WEBHOOK=

# Webhook format: json or form
WEBHOOK_FORMAT=json

# Webhook retry settings
WEBHOOK_RETRY_ENABLED=true
WEBHOOK_RETRY_COUNT=5
WEBHOOK_RETRY_DELAY_SECONDS=30

# -------------------------------------------
# OPTIONAL - Application Settings
# -------------------------------------------

# Timezone for server operations
TZ=America/Sao_Paulo

# Device name shown in WhatsApp
SESSION_DEVICE_NAME=WuzAPI

# Your domain (used for Traefik labels in EasyPanel)
DOMAIN=wuzapi.yourdomain.com

# -------------------------------------------
# OPTIONAL - RabbitMQ Configuration
# -------------------------------------------

# RabbitMQ credentials (if using message queue)
RABBITMQ_USER=wuzapi
RABBITMQ_PASSWORD=your_secure_rabbitmq_password
RABBITMQ_QUEUE=whatsapp_events

# -------------------------------------------
# NOTES FOR EASYPANEL
# -------------------------------------------
#
# 1. Mark these variables as "Secret" in EasyPanel:
# - WUZAPI_ADMIN_TOKEN
# - WUZAPI_GLOBAL_ENCRYPTION_KEY
# - WUZAPI_GLOBAL_HMAC_KEY
# - DB_PASSWORD
# - RABBITMQ_PASSWORD
#
# 2. After deployment, access:
# - Dashboard: https://your-domain/dashboard
# - API Docs: https://your-domain/api
# - QR Login: https://your-domain/login
#
# 3. For SSL, EasyPanel handles Let's Encrypt automatically
# when you configure a domain in the Domains section
1 change: 1 addition & 0 deletions .envrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
use flake
12 changes: 11 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,18 @@ dbdata/
files/
wuzapi
.env
.direnv/
.tool-versions

# Nix build outputs (keep source files)
result
result-*

# Local environment samples (keep .env.sample, ignore others)
.env.*
!.env.sample
!.env.easypanel.sample

# Added by Claude Task Master
# Logs
logs
Expand Down Expand Up @@ -39,4 +49,4 @@ NEW_FEATS.md

*.code-workspace
**/*.code-workspace
.vscode/workspaceStorage/
.vscode/workspaceStorage/
200 changes: 200 additions & 0 deletions EASYPANEL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,200 @@
# Despliegue de WuzAPI en EasyPanel

Esta guia explica como desplegar WuzAPI en [EasyPanel](https://easypanel.io).

## Requisitos Previos

- Una instancia de EasyPanel funcionando (v1.0+)
- Acceso al panel de administracion de EasyPanel
- Un dominio configurado (opcional pero recomendado)

## Metodo 1: Despliegue con Docker Compose (Recomendado)

### Paso 1: Crear un nuevo proyecto

1. Accede a tu panel de EasyPanel
2. Haz clic en **"Create Project"**
3. Asigna un nombre al proyecto, por ejemplo: `wuzapi`

### Paso 2: Agregar el servicio

1. Dentro del proyecto, haz clic en **"+ Service"**
2. Selecciona **"Docker Compose"**
3. Copia el contenido de `docker-compose-easypanel.yml` o apunta al repositorio

### Paso 3: Configurar variables de entorno

En la seccion de **Environment Variables** de EasyPanel, configura:

#### Variables Requeridas

```env
# Token de administrador (genera uno seguro)
WUZAPI_ADMIN_TOKEN=tu_token_seguro_aqui_32_caracteres

# Clave de encriptacion (exactamente 32 caracteres para AES-256)
WUZAPI_GLOBAL_ENCRYPTION_KEY=tu_clave_encriptacion_32_chars

# Clave HMAC para firmar webhooks (minimo 32 caracteres)
WUZAPI_GLOBAL_HMAC_KEY=tu_clave_hmac_minimo_32_caracteres

# Password de la base de datos
DB_PASSWORD=tu_password_seguro_postgres
```

#### Variables Opcionales

```env
# Webhook global para recibir todos los eventos
WUZAPI_GLOBAL_WEBHOOK=https://tu-servidor.com/webhook

# Zona horaria
TZ=America/Sao_Paulo

# Formato de webhook: json o form
WEBHOOK_FORMAT=json

# Nombre del dispositivo en WhatsApp
SESSION_DEVICE_NAME=WuzAPI

# Configuracion de reintentos de webhook
WEBHOOK_RETRY_ENABLED=true
WEBHOOK_RETRY_COUNT=5
WEBHOOK_RETRY_DELAY_SECONDS=30

# Password de RabbitMQ (opcional)
RABBITMQ_PASSWORD=tu_password_rabbitmq
```

### Paso 4: Configurar dominio

1. Ve a la seccion **"Domains"** del servicio `wuzapi`
2. Agrega tu dominio: `wuzapi.tudominio.com`
3. EasyPanel configurara automaticamente SSL con Let's Encrypt

### Paso 5: Desplegar

1. Haz clic en **"Deploy"**
2. Espera a que todos los servicios inicien (puede tomar 2-3 minutos)
3. Verifica el estado en la seccion **"Logs"**

## Metodo 2: Despliegue con Template de EasyPanel

Si prefieres usar el archivo `easypanel.json`:

1. En EasyPanel, ve a **Settings > Templates**
2. Haz clic en **"Import Template"**
3. Pega el contenido de `easypanel.json`
4. Guarda y despliega desde la seccion de templates

## Metodo 3: Despliegue desde GitHub

1. Crea un nuevo servicio en EasyPanel
2. Selecciona **"GitHub"** como fuente
3. Conecta tu repositorio de WuzAPI
4. Selecciona la rama `main`
5. EasyPanel detectara automaticamente el `Dockerfile`
6. Configura las variables de entorno como se indica arriba

## Estructura de Servicios

El despliegue incluye tres servicios:

| Servicio | Puerto | Descripcion |
|----------|--------|-------------|
| `wuzapi` | 8080 | API principal de WhatsApp |
| `db` | 5432 | PostgreSQL para datos persistentes |
| `rabbitmq` | 5672/15672 | Cola de mensajes (opcional) |

## Acceso a los Servicios

### API de WuzAPI
- URL: `https://wuzapi.tudominio.com`
- Dashboard: `https://wuzapi.tudominio.com/dashboard`
- Documentacion API: `https://wuzapi.tudominio.com/api`
- Login QR: `https://wuzapi.tudominio.com/login`

### RabbitMQ Management (opcional)
- URL: `https://rabbitmq.tudominio.com` (si configuraste el subdominio)
- Usuario: `wuzapi`
- Password: El valor de `RABBITMQ_PASSWORD`

## Verificar el Despliegue

1. Accede a `https://wuzapi.tudominio.com/api`
2. Deberias ver la documentacion de Swagger
3. Prueba el endpoint de health: `GET /session/status`

## Persistencia de Datos

Los siguientes volumenes se crean automaticamente:

- `wuzapi_data`: Datos de sesion de WhatsApp
- `wuzapi_postgres_data`: Base de datos PostgreSQL
- `wuzapi_rabbitmq_data`: Datos de RabbitMQ

**Importante**: Realiza backups periodicos de estos volumenes.

## Escalado

Para escalar WuzAPI horizontalmente:

1. Ve a la configuracion del servicio `wuzapi`
2. En **"Deploy"**, ajusta el numero de replicas
3. Nota: Cada replica necesita su propia sesion de WhatsApp

## Monitoreo

EasyPanel proporciona:

- **Logs**: Ver logs en tiempo real de cada servicio
- **Metricas**: CPU, memoria y red
- **Alertas**: Configura notificaciones para caidas

## Solucion de Problemas

### El servicio no inicia

1. Verifica los logs en EasyPanel
2. Asegurate de que las variables de entorno esten configuradas
3. Verifica que el puerto 8080 no este en uso

### Error de conexion a la base de datos

1. Espera a que el servicio `db` este saludable
2. Verifica que `DB_HOST=db` este configurado
3. Revisa los logs de PostgreSQL

### No se puede escanear el QR

1. Verifica que el servicio este corriendo
2. Accede a `https://wuzapi.tudominio.com/login`
3. Revisa los logs para errores de WhatsApp

### Webhook no funciona

1. Verifica que `WUZAPI_GLOBAL_WEBHOOK` este configurado
2. Asegurate de que la URL sea accesible desde el servidor
3. Revisa los logs para errores de conexion

## Actualizaciones

Para actualizar WuzAPI:

1. En EasyPanel, ve al servicio `wuzapi`
2. Haz clic en **"Rebuild"**
3. EasyPanel descargara la ultima version y reiniciara el servicio

## Recursos

- [Documentacion de WuzAPI](https://github.com/asternic/wuzapi)
- [Documentacion de EasyPanel](https://easypanel.io/docs)
- [API Reference](/api)

## Soporte

Si encuentras problemas:

1. Revisa los [issues de GitHub](https://github.com/asternic/wuzapi/issues)
2. Consulta la [documentacion de EasyPanel](https://easypanel.io/docs)
3. Abre un nuevo issue con los logs relevantes
16 changes: 16 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,22 @@ The Docker configuration will:

**Note:** The `.env` file is already included in `.gitignore` to avoid committing sensitive information to your repository.

### EasyPanel Deployment

WuzAPI can be easily deployed to [EasyPanel](https://easypanel.io). We provide ready-to-use configuration files:

1. **Quick Start**: Use `docker-compose-easypanel.yml` with EasyPanel's Docker Compose support
2. **Template**: Import `easypanel.json` as an EasyPanel template

**Required environment variables for EasyPanel:**
```
WUZAPI_ADMIN_TOKEN=your_secure_token
WUZAPI_GLOBAL_ENCRYPTION_KEY=your_32_char_key
DB_PASSWORD=your_db_password
```

For detailed instructions, see [EASYPANEL.md](EASYPANEL.md).

## Usage

To interact with the API, you must include the `Authorization` header in HTTP requests, containing the user's authentication token. You can have multiple users (different WhatsApp numbers) on the same server.
Expand Down
3 changes: 3 additions & 0 deletions constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,9 @@ var supportedEventTypes = []string{
// Facebook/Meta Bridge
"FBMessage",

// Chat lifecycle
"ChatNew",

// Special - receives all events
"All",
}
Expand Down
Loading