Skip to content

elskull/tasisto

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚀 CRM Multiempresa

Sistema CRM Multiempresa completo desarrollado con Laravel 11 + React 18, optimizado para Debian 13 (Trixie) con Docker.

📋 Tabla de Contenidos


Características

🏢 Multi-tenancia Completa

  • Aislamiento total de datos entre empresas
  • Configuración de dominios personalizados
  • Roles y permisos por empresa

👥 Gestión de Usuarios

  • Super Admin: Gestión global del sistema
  • Company Admin: Administración de empresa
  • Supervisor: Gestión de equipos
  • Agent: Ejecutivos de ventas

🎯 Gestión de Leads

  • Leads personalizables por campos
  • Flujo de trabajo configurable
  • Asignación automática y manual
  • Seguimiento completo del ciclo de ventas

📊 Tablero Kanban

  • Arrastrar y soltar leads entre etapas
  • Configuración personalizable de columnas
  • Filtros y búsquedas avanzadas
  • Actualizaciones en tiempo real

📞 Integraciones

  • Asterisk: Telefonía VoIP integrada
  • WhatsApp: Mensajería empresarial
  • Email: Notificaciones automáticas
  • WebSockets: Actualizaciones en vivo

🔒 Seguridad

  • Autenticación JWT con Laravel Sanctum
  • Encriptación de datos sensibles
  • Control de acceso basado en roles
  • Headers de seguridad HTTP

🐧 Prerrequisitos (Debian 13)

📋 Requisitos del Sistema

Hardware Mínimo:

  • CPU: 2 cores (4 cores recomendado)
  • RAM: 4GB (8GB recomendado)
  • Almacenamiento: 20GB SSD (50GB recomendado)
  • Red: Conexión estable a internet

Software Requerido:

  • 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

🔧 Verificación de Requisitos

# 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

📦 Instalación de Docker en Debian 13

# 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

🔥 Configuración Firewall

# 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

🚀 Instalación Rápida

Método 1: Instalación Automática (Recomendado)

# 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

🔧 Método 2: Instalación Manual Paso a Paso

Paso 1: Preparación del Entorno

# 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/*

Paso 2: Configurar Variables de Entorno

# Copiar archivo de entorno base
cp .env.docker .env.local

# Editar configuración
nano .env.local

Configuració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

Paso 3: Iniciar Aplicación

# 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/health

🌐 Acceso a la Aplicación

Una 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 / password
  • admin@marketingpro.crm / password

📚 Documentación Completa

📖 Guías de Instalación

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

🛠️ Guías Técnicas

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

🏗️ Arquitectura del Sistema

📁 Estructura del Proyecto

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

🗄️ Base de Datos y Almacenamiento

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

📦 Servicios Docker

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

🔌 API Endpoints Principales

🔐 Autenticación

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ña

👥 Gestión de Usuarios

GET    /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 rol

🎯 Gestión de Leads

GET    /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 asignar

📊 Dashboard y Reportes

GET    /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 actividad

💬 Comunicaciones

GET    /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

🔧 Configuración y Personalización

🔑 Generación de Claves

# 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

🎛️ Variables de Entorno

# 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

🛡️ Configuración de Seguridad

# 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

🚀 Despliegue en Producción

🌐 Configuración HTTPS

# 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 -

💾 Backup Automático

# 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 -

📊 Monitoreo

# Verificar salud del sistema
curl http://localhost:9000/api/health

# Monitorear recursos
docker stats
htop

# Ver logs
docker compose logs -f backend

🛠️ Comandos Útiles

🐳 Gestión de Contenedores

# 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

🔧 Mantenimiento de Laravel

# 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')
]);

📊 Base de Datos

# 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

🧪 Testing

🔧 Tests del Backend

# 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

🎨 Tests del Frontend

# Entrar al contenedor frontend
docker compose exec frontend sh

# Ejecutar tests
npm test

# Tests en modo watch
npm run test:watch

🤝 Contribución

¡Las contribuciones son bienvenidas! Por favor sigue estos pasos:

  1. Fork el repositorio
  2. Crea una rama (git checkout -b feature/amazing-feature)
  3. Commit tus cambios (git commit -m 'Add amazing feature')
  4. Push a la rama (git push origin feature/amazing-feature)
  5. Abre un Pull Request

📋 Guía de Estilo

  • 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

🧪 Requisitos para Contribuir

  • Tests funcionando
  • Código siguiendo las guías de estilo
  • Documentación actualizada
  • Sin vulnerabilidades de seguridad

📄 Licencia

Este proyecto está licenciado bajo la MIT License - ver el archivo LICENSE para detalles.


📞 Soporte y Ayuda

🆘 Obtén Ayuda

📊 Estado del Sistema

# 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

🐛 Problemas Comunes

  1. Puerto en uso: Cambia puertos en docker-compose.yml
  2. Permisos: Ejecuta sudo chown -R $USER:$USER data/
  3. Docker no responde: Reinicia el servicio Docker
  4. Base de datos no conecta: Verifica credenciales en .env.local

🛣️ Roadmap

Características Actuales

  • 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

🚧 En Desarrollo

  • 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

🔮 Características Futuras

  • 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

🎉 Hecho con ❤️ para equipos de ventas modernos

Build Status License Version Debian

🐧 Optimizado para Debian 13 (Trixie)

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors