Sistema CRM Multiempresa completo desarrollado con Laravel 11 + React 18, optimizado para Debian 13 (Trixie) con Docker.
- Características
- Prerrequisitos
- Instalación Rápida
- Documentación
- Arquitectura
- API Endpoints
- Contribución
- Aislamiento total de datos entre empresas
- Configuración de dominios personalizados
- Roles y permisos por empresa
- Super Admin: Gestión global del sistema
- Company Admin: Administración de empresa
- Supervisor: Gestión de equipos
- Agent: Ejecutivos de ventas
- Leads personalizables por campos
- Flujo de trabajo configurable
- Asignación automática y manual
- Seguimiento completo del ciclo de ventas
- Arrastrar y soltar leads entre etapas
- Configuración personalizable de columnas
- Filtros y búsquedas avanzadas
- Actualizaciones en tiempo real
- Asterisk: Telefonía VoIP integrada
- WhatsApp: Mensajería empresarial
- Email: Notificaciones automáticas
- WebSockets: Actualizaciones en vivo
- Autenticación JWT con Laravel Sanctum
- Encriptación de datos sensibles
- Control de acceso basado en roles
- Headers de seguridad HTTP
- CPU: 2 cores (4 cores recomendado)
- RAM: 4GB (8GB recomendado)
- Almacenamiento: 20GB SSD (50GB recomendado)
- Red: Conexión estable a internet
- Sistema Operativo: Debian 13 (Trixie)
- Docker Engine: v24.0 o superior
- Docker Compose: v2.0 o superior
- Git: v2.40 o superior
- OpenSSL: Para generación de claves
# Verificar versión de Debian
cat /etc/debian_version
# Verificar arquitectura (debe ser x86_64)
uname -m
# Verificar espacio en disco
df -h
# Verificar memoria RAM
free -h
# Verificar conexión a internet
ping -c 4 google.com# 1. Actualizar sistema
sudo apt update && sudo apt upgrade -y
# 2. Instalar dependencias
sudo apt install -y \
curl \
wget \
gnupg \
lsb-release \
apt-transport-https \
ca-certificates \
software-properties-common
# 3. Agregar clave GPG oficial de Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
# 4. Agregar repositorio Docker
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 5. Instalar Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 6. Iniciar y habilitar Docker
sudo systemctl start docker
sudo systemctl enable docker
# 7. Agregar usuario al grupo docker
sudo usermod -aG docker $USER# Configurar UFW firewall
sudo ufw --force reset
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw --force enable# 1. Clonar el repositorio
git clone https://github.com/elskull/tasisto.git
cd tasisto
# 2. Ejecutar instalador automático
chmod +x install.sh
./install.sh
# 3. Seguir las instrucciones del instalador
# El script configurará todo automáticamente incluyendo:
# - Variables de entorno
# - Generación de claves
# - Configuración de red
# - Inicio de servicios# Clonar repositorio
git clone https://github.com/elskull/tasisto.git
cd tasisto
# Crear directorios de datos persistentes
mkdir -p data/{postgres,redis,storage,logs}
# Configurar permisos
chmod 755 data
chmod 755 data/*# Copiar archivo de entorno base
cp .env.docker .env.local
# Editar configuración
nano .env.localConfiguración mínima requerida:
# Generar clave de aplicación
APP_KEY=base64:$(openssl rand -base64 32 | tr -d "=+/" | cut -c1-32)
# Configuración de la aplicación
APP_NAME="CRM Multiempresa"
APP_ENV=production
APP_DEBUG=false
APP_URL=http://localhost:8080
# Base de datos
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=crm_multicompany
DB_USERNAME=postgres
DB_PASSWORD=crm_password_2024
# Redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=crm_redis_password_2024
# Auto-migraciones (primer despliegue)
RUN_MIGRATIONS=true
RUN_SEEDS=true# Construir y levantar servicios
docker compose up -d --build
# Verificar estado de los contenedores
docker compose ps
# Esperar a que los servicios inicien (30-60 segundos)
sleep 60
# Verificar health check
curl http://localhost:9000/api/healthUna vez completada la instalación:
| Servicio | URL | Descripción |
|---|---|---|
| 🎯 Frontend | http://localhost:8080 | Interfaz web principal |
| 🔌 API Backend | http://localhost:9000/api | Endpoints de la API |
| 💚 Health Check | http://localhost:9000/api/health | Estado del sistema |
| 📊 Monitoring | http://localhost:3000 | Grafana (opcional) |
Credenciales de Acceso:
- Email:
admin@crm-multicompany.com - Password:
password
Usuarios adicionales disponibles:
admin@techsolutions.crm / passwordadmin@marketingpro.crm / password
| Documento | Descripción |
|---|---|
| 📖 Installation Guide | Guía completa de instalación |
| 🐧 Debian 13 Setup | Configuración específica para Debian 13 |
| 🔧 Configuration | Configuración avanzada |
| 🚀 Production Deployment | Despliegue en producción |
| Documento | Descripción |
|---|---|
| 📊 Monitoring | Configuración de monitoreo |
| 🔒 Security Guide | Guía de seguridad |
| 🐛 Troubleshooting | Solución de problemas |
| 📱 API Reference | Documentación de API |
CRM Multiempresa/
├── 📁 backend/ # Laravel 11 Backend API
│ ├── app/
│ │ ├── Http/Controllers/ # Controladores API REST
│ │ ├── Models/ # Modelos Eloquent
│ │ ├── Services/ # Lógica de negocio
│ │ ├── Traits/ # Traits reutilizables
│ │ └── Jobs/ # Jobs para colas
│ ├── database/
│ │ ├── migrations/ # Migraciones de base de datos
│ │ └── seeders/ # Datos de prueba
│ ├── routes/ # Rutas de API
│ └── config/ # Configuración Laravel
├── 📁 frontend/ # React 18 Frontend SPA
│ ├── src/
│ │ ├── components/ # Componentes React
│ │ ├── pages/ # Páginas principales
│ │ ├── hooks/ # Hooks personalizados
│ │ ├── store/ # Estado Redux Toolkit
│ │ ├── services/ # Servicios API
│ │ └── utils/ # Utilidades
│ ├── public/ # Assets estáticos
│ └── dist/ # Build de producción
├── 📁 docs/ # Documentación completa
├── 📁 monitoring/ # Configuración de monitoreo
├── 📁 data/ # Datos persistentes
├── 🐳 docker-compose.yml # Orquestación de servicios
├── 🐳 Dockerfile # Construcción de contenedores
├── 🔧 install.sh # Script de instalación automática
├── 📋 .env.docker # Variables de entorno base
└── 📋 README.md # Este archivo
| Componente | Tecnología | Versión | Descripción |
|---|---|---|---|
| Base de Datos | PostgreSQL | 16+ | Base de datos principal |
| Cache | Redis | 7+ | Caché y sesiones |
| Colas | Redis | 7+ | Colas de mensajes |
| Almacenamiento | Sistema de archivos | - | Almacenamiento local |
| Búsqueda (opcional) | Elasticsearch | 8+ | Búsqueda avanzada |
| Servicio | Imagen | Puerto | Descripción |
|---|---|---|---|
| PostgreSQL | postgres:16 | 5432 | Base de datos principal |
| Redis | redis:7 | 6379 | Caché y colas |
| Backend API | php:8.3-fpm | 9000 | API Laravel |
| Frontend Web | nginx:alpine | 8080 | Web estática |
| Queue Worker | php:8.3-fpm | - | Trabajos en background |
| WebSocket | php:8.3-fpm | 6001 | Conexiones en tiempo real |
| Nginx Proxy | nginx:alpine | 80 | Proxy reverso |
POST /api/auth/login # Iniciar sesión
POST /api/auth/logout # Cerrar sesión
GET /api/auth/me # Perfil de usuario
PUT /api/auth/profile # Actualizar perfil
POST /api/auth/change-password # Cambiar contraseñaGET /api/users # Listar usuarios
POST /api/users # Crear usuario
GET /api/users/{id} # Obtener usuario
PUT /api/users/{id} # Actualizar usuario
DELETE /api/users/{id} # Eliminar usuario
POST /api/users/{id}/assign-role # Asignar rolGET /api/leads # Listar leads
POST /api/leads # Crear lead
GET /api/leads/{id} # Obtener lead
PUT /api/leads/{id} # Actualizar lead
DELETE /api/leads/{id} # Eliminar lead
POST /api/leads/{id}/assign # Asignar lead
POST /api/leads/{id}/convert # Convertir lead
GET /api/leads/my # Leads del usuario
GET /api/leads/unassigned # Leads sin asignarGET /api/dashboard # Dashboard principal
GET /api/dashboard/stats # Estadísticas
GET /api/reports/leads # Reporte de leads
GET /api/reports/performance # Reporte de rendimiento
GET /api/reports/activity # Reporte de actividadGET /api/messages # Mensajes
POST /api/messages/send # Enviar mensaje
GET /api/messages/{id} # Mensajes de conversación
POST /api/calls # Registrar llamada
GET /api/calls/{id} # Llamadas de lead# Clave de aplicación Laravel
php artisan key:generate --show
# Clave de WebSocket (Reverb)
php artisan reverb:generate
# Certificado SSL (Let's Encrypt)
sudo certbot --nginx -d your-domain.com# Configuración de la aplicación
APP_NAME="CRM Multiempresa"
APP_ENV=production
APP_KEY=base64:GENERATE_NEW_KEY
APP_DEBUG=false
APP_URL=https://your-domain.com
# Base de datos
DB_CONNECTION=pgsql
DB_HOST=postgres
DB_PORT=5432
DB_DATABASE=crm_multicompany
DB_USERNAME=postgres
DB_PASSWORD=secure_password
# Cache y sesión
CACHE_DRIVER=redis
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_PASSWORD=redis_password
SESSION_DRIVER=database
# Colas
QUEUE_CONNECTION=redis
# WebSocket
BROADCAST_DRIVER=reverb
REVERB_APP_ID=12345
REVERB_APP_KEY=your_reverb_key
# Integraciones
ASTERISK_DEFAULT_HOST=your-asterisk-server
WHATSAPP_DEFAULT_PROVIDER=twilio# Headers de seguridad en Nginx
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
# Configuración CORS
php artisan config:clear
php artisan config:cache# Instalar Certbot
sudo apt install certbot python3-certbot-nginx
# Obtener certificado
sudo certbot --nginx -d your-domain.com
# Auto-renovación
echo "0 12 * * * /usr/bin/certbot renew --quiet" | sudo crontab -# Crear script de backup
cat > /opt/backup-crm.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/opt/backups"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
# Backup base de datos
docker exec postgres pg_dump -U postgres crm_multicompany > $BACKUP_DIR/db_$DATE.sql
# Backup archivos
tar -czf $BACKUP_DIR/files_$DATE.tar.gz data/storage/
# Eliminar backups antiguos (7 días)
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -delete
EOF
chmod +x /opt/backup-crm.sh
echo "0 2 * * * /opt/backup-crm.sh" | sudo crontab -# Verificar salud del sistema
curl http://localhost:9000/api/health
# Monitorear recursos
docker stats
htop
# Ver logs
docker compose logs -f backend# Ver estado
docker compose ps
# Ver logs
docker compose logs -f
docker compose logs -f backend
# Reiniciar servicios
docker compose restart
docker compose restart backend
# Detener servicios
docker compose down
# Reconstruir con cache limpia
docker compose build --no-cache
docker compose up -d# Entrar al contenedor backend
docker compose exec backend bash
# Ejecutar migraciones
php artisan migrate --force
# Limpiar cache
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear
# Optimizar para producción
php artisan config:cache
php artisan route:cache
php artisan view:cache
# Crear usuario
php artisan tinker
User::create([
'name' => 'Admin User',
'email' => 'admin@demo.com',
'password' => Hash::make('password')
]);# Acceder a PostgreSQL
docker compose exec postgres psql -U postgres crm_multicompany
# Ver tablas
\dt
# Respaldar base de datos
docker compose exec postgres pg_dump -U postgres crm_multicompany > backup.sql# Entrar al contenedor backend
docker compose exec backend bash
# Ejecutar tests
composer test
# Ejecutar tests específicos
composer test --filter LeadTest
# Generar coverage
composer test --coverage# Entrar al contenedor frontend
docker compose exec frontend sh
# Ejecutar tests
npm test
# Tests en modo watch
npm run test:watch¡Las contribuciones son bienvenidas! Por favor sigue estos pasos:
- Fork el repositorio
- Crea una rama (
git checkout -b feature/amazing-feature) - Commit tus cambios (
git commit -m 'Add amazing feature') - Push a la rama (
git push origin feature/amazing-feature) - Abre un Pull Request
- PHP: Sigue PSR-12
- JavaScript: Usa ES6+ y ESLint
- React: Usa Hooks y componentes funcionales
- Commits: Usa mensajes de commit convencionales
- Documentación: Comenta código complejo
- Tests funcionando
- Código siguiendo las guías de estilo
- Documentación actualizada
- Sin vulnerabilidades de seguridad
Este proyecto está licenciado bajo la MIT License - ver el archivo LICENSE para detalles.
- 📧 Email: support@crm-multicompany.com
- 📖 Documentación: docs/
- 🐛 Issues: GitHub Issues
- 💬 Discord: Servidor de Discord
# Verificar estado general
curl -s http://localhost:9000/api/health | jq .
# Revisar logs de errores
docker compose logs backend | grep ERROR
# Verificar uso de recursos
docker stats --no-stream- Puerto en uso: Cambia puertos en docker-compose.yml
- Permisos: Ejecuta
sudo chown -R $USER:$USER data/ - Docker no responde: Reinicia el servicio Docker
- Base de datos no conecta: Verifica credenciales en .env.local
- Multi-tenancia completa
- Gestión de usuarios y roles
- Sistema de leads completo
- Kanban interactivo
- Integración con Asterisk
- Integración con WhatsApp
- API RESTful completa
- WebSockets en tiempo real
- Dashboard con estadísticas
- Sistema de reportes avanzados
- Integración con email marketing
- App móvil (React Native)
- Automatización de flujos
- Integración con más proveedores VoIP
- Sistema de tickets de soporte
- API pública para terceros
- IA para predicción de ventas
- Machine Learning para scoring de leads
- Integración con calendarios
- Sistema de facturación
- Multi-idioma completo
- Temas personalizables
- Plugins y extensiones