- Prefijo v2: MCH - TRACEABILITY-MASTER.yml creado - Listo para integracion como submodulo Workspace: v2.0.0 | SIMCO: v4.0.0
12 KiB
12 KiB
GUIA DE CONFIGURACION - FASE 6
Proyecto: michangarrito Fecha: 2026-01-10 Version: 1.0.0 Sistema: SIMCO - NEXUS v4.0 Estado: DOCUMENTADO
1. RESUMEN EJECUTIVO
| Servicio | Estado | Prioridad | Dependencia |
|---|---|---|---|
| Docker Deployment | LISTO | P0 | Servidor |
| SSL/Dominio | PENDIENTE | P0 | Servidor |
| Meta WhatsApp Business | PENDIENTE | P0 | Cuenta Meta verificada |
| Stripe Produccion | PENDIENTE | P0 | Cuenta Stripe |
| LLM API Key | PENDIENTE | P1 | OpenRouter/OpenAI |
2. DOCKER DEPLOYMENT
2.1 Requisitos del Servidor
Minimo:
- 2 vCPU
- 4 GB RAM
- 40 GB SSD
- Ubuntu 22.04 LTS
Recomendado:
- 4 vCPU
- 8 GB RAM
- 80 GB SSD
- Ubuntu 22.04 LTS
2.2 Instalacion de Docker
# Actualizar sistema
sudo apt update && sudo apt upgrade -y
# Instalar dependencias
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# Agregar repositorio Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# Instalar Docker
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Agregar usuario al grupo docker
sudo usermod -aG docker $USER
# Verificar instalacion
docker --version
docker compose version
2.3 Despliegue
# Clonar repositorio
git clone https://github.com/tu-org/michangarrito.git
cd michangarrito
# Copiar y configurar .env
cp .env.example .env
nano .env # Editar variables
# Construir e iniciar servicios
docker compose up -d --build
# Verificar estado
docker compose ps
docker compose logs -f
2.4 Variables de Entorno Produccion
Crear archivo .env.production:
# APLICACION
NODE_ENV=production
APP_NAME=michangarrito
# PUERTOS
WEB_PORT=3140
BACKEND_PORT=3141
MCP_PORT=3142
WHATSAPP_PORT=3143
# DATABASE - GENERAR PASSWORD SEGURO
DB_HOST=postgres
DB_PORT=5432
DB_NAME=michangarrito_prod
DB_USER=michangarrito_prod
DB_PASSWORD=<GENERAR: openssl rand -base64 32>
DB_SSL=true
# REDIS
REDIS_HOST=redis
REDIS_PORT=6379
REDIS_DATABASE=8
# JWT - GENERAR SECRET SEGURO
JWT_SECRET=<GENERAR: openssl rand -base64 64>
JWT_EXPIRES_IN=7d
JWT_REFRESH_EXPIRES_IN=30d
# CORS
FRONTEND_URL=https://tu-dominio.com
ALLOWED_ORIGINS=https://tu-dominio.com,https://api.tu-dominio.com
# LOGGING
LOG_LEVEL=info
LOG_FORMAT=json
3. SSL Y DOMINIO
3.1 Configurar DNS
Agregar registros DNS:
Tipo Nombre Valor
A @ <IP_SERVIDOR>
A api <IP_SERVIDOR>
A whatsapp <IP_SERVIDOR>
CNAME www @
3.2 Instalar Certbot
# Instalar certbot
sudo apt install -y certbot python3-certbot-nginx
# Obtener certificado
sudo certbot --nginx -d tu-dominio.com -d api.tu-dominio.com -d whatsapp.tu-dominio.com
# Verificar renovacion automatica
sudo certbot renew --dry-run
3.3 Configuracion Nginx
Crear /deploy/nginx/conf.d/michangarrito.conf:
# Frontend
server {
listen 443 ssl http2;
server_name tu-dominio.com www.tu-dominio.com;
ssl_certificate /etc/letsencrypt/live/tu-dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tu-dominio.com/privkey.pem;
location / {
proxy_pass http://frontend:80;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
# Backend API
server {
listen 443 ssl http2;
server_name api.tu-dominio.com;
ssl_certificate /etc/letsencrypt/live/tu-dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tu-dominio.com/privkey.pem;
location / {
proxy_pass http://backend:3141;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
# WhatsApp Webhook
server {
listen 443 ssl http2;
server_name whatsapp.tu-dominio.com;
ssl_certificate /etc/letsencrypt/live/tu-dominio.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/tu-dominio.com/privkey.pem;
location / {
proxy_pass http://whatsapp-service:3143;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
}
}
# Redirect HTTP to HTTPS
server {
listen 80;
server_name tu-dominio.com www.tu-dominio.com api.tu-dominio.com whatsapp.tu-dominio.com;
return 301 https://$server_name$request_uri;
}
4. META WHATSAPP BUSINESS
4.1 Requisitos Previos
- Cuenta de Facebook Business verificada
- Numero de telefono dedicado (no usado en WhatsApp personal)
- Tarjeta de credito para verificacion
4.2 Pasos de Configuracion
-
Crear App en Meta for Developers
- Ir a https://developers.facebook.com/apps
- Crear nueva app tipo "Business"
- Agregar producto "WhatsApp"
-
Configurar WhatsApp Business
- Ir a WhatsApp > Getting Started
- Agregar numero de telefono
- Verificar numero via SMS/llamada
-
Obtener Credenciales
WHATSAPP_ACCESS_TOKEN = Token de acceso permanente WHATSAPP_PHONE_NUMBER_ID = ID del numero de telefono WHATSAPP_BUSINESS_ACCOUNT_ID = ID de cuenta de negocio WHATSAPP_VERIFY_TOKEN = Token personalizado para webhook WHATSAPP_APP_SECRET = Secret de la app -
Configurar Webhook
- URL:
https://whatsapp.tu-dominio.com/webhook - Verify token: El mismo valor de WHATSAPP_VERIFY_TOKEN
- Suscribirse a: messages, message_echoes, message_reactions
- URL:
-
Crear Templates de Mensajes
- Ir a WhatsApp > Message Templates
- Crear templates para:
- Recordatorio de pago
- Confirmacion de pedido
- Pedido listo
- Esperar aprobacion (24-48 horas)
4.3 Variables de Entorno
# WhatsApp Business API
WHATSAPP_ACCESS_TOKEN=EAAxxxxxxxxxx
WHATSAPP_PHONE_NUMBER_ID=123456789012345
WHATSAPP_BUSINESS_ACCOUNT_ID=123456789012345
WHATSAPP_VERIFY_TOKEN=mi_token_verificacion_secreto
WHATSAPP_APP_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
WHATSAPP_WEBHOOK_URL=https://whatsapp.tu-dominio.com/webhook
5. STRIPE PRODUCCION
5.1 Crear Cuenta Stripe
- Ir a https://stripe.com
- Crear cuenta
- Verificar identidad (requiere documento oficial)
- Activar modo produccion
5.2 Configurar Productos
En Stripe Dashboard > Products, crear:
Planes de Suscripcion:
| Producto | Precio | Intervalo |
|---|---|---|
| Changarrito | $99 MXN | Mensual |
| Tiendita | $249 MXN | Mensual |
Paquetes de Tokens:
| Producto | Precio | Tokens |
|---|---|---|
| Pack Basico | $49 MXN | 1,000 |
| Pack Estandar | $129 MXN | 3,000 |
| Pack Pro | $299 MXN | 8,000 |
| Pack Empresarial | $699 MXN | 20,000 |
5.3 Configurar Webhook
En Stripe Dashboard > Developers > Webhooks:
- Agregar endpoint:
https://api.tu-dominio.com/api/v1/payments/webhook/stripe - Eventos a suscribir:
checkout.session.completedcustomer.subscription.createdcustomer.subscription.updatedcustomer.subscription.deletedinvoice.paidinvoice.payment_failedpayment_intent.succeeded
5.4 Variables de Entorno
# Stripe (Produccion)
STRIPE_SECRET_KEY=sk_live_xxxxxxxxxxxxxxxx
STRIPE_PUBLISHABLE_KEY=pk_live_xxxxxxxxxxxxxxxx
STRIPE_WEBHOOK_SECRET=whsec_xxxxxxxxxxxxxxxx
# IDs de productos (obtener de Stripe Dashboard)
STRIPE_PRICE_CHANGARRITO=price_xxxxxxxxxxxxxxxx
STRIPE_PRICE_TIENDITA=price_xxxxxxxxxxxxxxxx
STRIPE_PRICE_TOKENS_1000=price_xxxxxxxxxxxxxxxx
STRIPE_PRICE_TOKENS_3000=price_xxxxxxxxxxxxxxxx
STRIPE_PRICE_TOKENS_8000=price_xxxxxxxxxxxxxxxx
STRIPE_PRICE_TOKENS_20000=price_xxxxxxxxxxxxxxxx
# OXXO
STRIPE_OXXO_ENABLED=true
6. LLM API KEY
6.1 Opciones de Proveedor
| Proveedor | Modelo Recomendado | Costo Aprox |
|---|---|---|
| OpenRouter | claude-3-haiku | $0.25/1M tokens |
| OpenAI | gpt-4o-mini | $0.15/1M input |
| Anthropic | claude-3-haiku | $0.25/1M tokens |
| Ollama | llama3 | Gratuito (self-hosted) |
6.2 Configurar OpenRouter (Recomendado)
- Ir a https://openrouter.ai
- Crear cuenta
- Ir a Keys > Create Key
- Copiar API Key
LLM_PROVIDER=openrouter
LLM_API_KEY=sk-or-v1-xxxxxxxxxxxxxxxx
LLM_MODEL=anthropic/claude-3-haiku
LLM_BASE_URL=https://openrouter.ai/api/v1
LLM_MAX_TOKENS=4096
6.3 Configurar OpenAI (Alternativa)
- Ir a https://platform.openai.com
- Crear cuenta
- Ir a API Keys > Create new secret key
- Copiar API Key
LLM_PROVIDER=openai
LLM_API_KEY=sk-xxxxxxxxxxxxxxxx
LLM_MODEL=gpt-4o-mini
LLM_BASE_URL=https://api.openai.com/v1
6.4 Multi-Tenant LLM
El sistema soporta credenciales LLM por tenant:
-- Tabla tenant_integration_credentials
INSERT INTO public.tenant_integration_credentials
(tenant_id, integration_type, provider, credentials)
VALUES
('uuid-del-tenant', 'llm', 'openai',
'{"api_key": "sk-tenant-key", "model": "gpt-4o"}');
Si el tenant no tiene credenciales propias, se usa el fallback de la plataforma.
7. CHECKLIST DE DESPLIEGUE
Pre-Despliegue
- Servidor aprovisionado
- Docker instalado
- Repositorio clonado
- Dominio configurado (DNS)
- Cuenta Meta Business verificada
- Cuenta Stripe activada
- API Key LLM obtenida
Configuracion
.env.productioncreado- Secretos generados (JWT_SECRET, DB_PASSWORD)
- SSL configurado (Certbot)
- Nginx configurado
- Webhook WhatsApp configurado
- Webhook Stripe configurado
- Templates WhatsApp aprobados
Validacion
docker compose ps- todos los servicios running- Frontend accesible via HTTPS
- API responde en /api/v1/health
- WhatsApp webhook verificado
- Stripe webhook recibe eventos
- LLM responde correctamente
8. COMANDOS UTILES
Docker
# Ver logs de todos los servicios
docker compose logs -f
# Ver logs de un servicio especifico
docker compose logs -f backend
# Reiniciar un servicio
docker compose restart backend
# Reconstruir un servicio
docker compose up -d --build backend
# Ejecutar comando en contenedor
docker compose exec backend sh
# Ver uso de recursos
docker stats
Mantenimiento
# Backup de base de datos
docker compose exec postgres pg_dump -U michangarrito_prod michangarrito_prod > backup.sql
# Restaurar backup
docker compose exec -T postgres psql -U michangarrito_prod michangarrito_prod < backup.sql
# Limpiar imagenes no usadas
docker system prune -af
# Ver espacio en disco
df -h
9. TROUBLESHOOTING
WhatsApp no recibe mensajes
- Verificar URL del webhook en Meta Dashboard
- Verificar que el token de verificacion coincida
- Revisar logs:
docker compose logs -f whatsapp-service - Verificar que el servidor responda con 200 OK
Stripe webhooks fallan
- Verificar URL del webhook en Stripe Dashboard
- Verificar STRIPE_WEBHOOK_SECRET
- Revisar logs:
docker compose logs -f backend | grep stripe - Usar Stripe CLI para testing local
LLM no responde
- Verificar API key valida
- Verificar creditos/saldo en proveedor
- Revisar logs del MCP server
- Probar con curl directo al proveedor
10. PROXIMOS PASOS
Una vez completada la configuracion:
-
Testing E2E
- Probar flujo completo de registro
- Probar ventas desde POS
- Probar chat WhatsApp
- Probar suscripciones
-
Monitoreo
- Configurar Sentry para errores
- Configurar alertas de uptime
- Configurar metricas de uso
-
Backups
- Configurar backup automatico de BD
- Configurar backup de volumenes Docker
Documentado por: Agente Orquestador Fecha: 2026-01-10 Version: 1.0.0