Files
amayo/AmayoWeb/DEPLOY_GUIDE.md

355 lines
8.1 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚀 Guía de Deploy - Amayo
## 📋 Arquitectura
```
┌─────────────────────────────────────────────────────────────┐
│ Usuario │
└────────────────┬────────────────────────────────────────────┘
┌────────┴────────┐
│ │
▼ ▼
┌───────────────┐ ┌──────────────────┐
│ docs.amayo.dev│ │ api.amayo.dev │
│ (Frontend) │ │ (Backend API) │
│ │ │ │
│ Archivos │ │ Proxy NGINX │
│ estáticos │ │ ↓ │
│ (Vue build) │ │ localhost:3000 │
└───────────────┘ │ (Bot Node.js) │
└──────────────────┘
```
## 🔧 Configuración Actual
| Componente | Dominio | Puerto | Servidor |
|------------|---------|--------|----------|
| Frontend Vue | `docs.amayo.dev` | 80/443 | Archivos estáticos |
| Backend API | `api.amayo.dev` | 80/443 → 3000 | Node.js (bot) |
**Importante:** El bot ejecuta el servidor desde `main.ts` en el puerto **3000**.
## 📝 Pasos de Deploy
### 1. Build del Frontend
```bash
cd AmayoWeb
npm run build
```
Esto genera la carpeta `dist/` con los archivos compilados.
### 2. Copiar Archivos al Servidor VPS
```bash
# Crear directorio si no existe
sudo mkdir -p /var/www/docs.amayo.dev
# Copiar archivos del build
sudo cp -r dist/* /var/www/docs.amayo.dev/
# Ajustar permisos
sudo chown -R www-data:www-data /var/www/docs.amayo.dev
sudo chmod -R 755 /var/www/docs.amayo.dev
```
### 3. Configurar NGINX
#### A. Frontend (docs.amayo.dev)
```bash
# Copiar configuración
sudo cp nginx-docs.amayo.dev.conf /etc/nginx/sites-available/docs.amayo.dev
# Habilitar sitio
sudo ln -s /etc/nginx/sites-available/docs.amayo.dev /etc/nginx/sites-enabled/
# Verificar configuración
sudo nginx -t
```
#### B. Backend API (api.amayo.dev)
```bash
# Copiar configuración
sudo cp nginx-api.amayo.dev.conf /etc/nginx/sites-available/api.amayo.dev
# Habilitar sitio
sudo ln -s /etc/nginx/sites-available/api.amayo.dev /etc/nginx/sites-enabled/
# Verificar configuración
sudo nginx -t
```
#### C. Reiniciar NGINX
```bash
sudo systemctl restart nginx
```
### 4. Configurar Variables de Entorno del Bot
En tu servidor VPS, asegúrate de tener estas variables:
```bash
# Editar archivo .env en la raíz del proyecto
nano .env
```
Agregar:
```env
# Puerto del servidor API (usado por el bot)
PORT=3000
API_PORT=3000
API_HOST=0.0.0.0
# Otras variables del bot
DISCORD_TOKEN=tu_token
DATABASE_URL=tu_database_url
# ... resto de variables
```
### 5. Iniciar/Reiniciar el Bot
El bot debe estar corriendo para que la API funcione:
```bash
# Opción 1: Con PM2 (recomendado)
pm2 restart amayo
# O si no está iniciado:
pm2 start npm --name amayo -- start
# Ver logs
pm2 logs amayo
# Opción 2: Directamente con npm
npm start
```
### 6. Verificar que Todo Funcione
#### A. Verificar Frontend
```bash
curl https://docs.amayo.dev
# Debe devolver HTML de tu app Vue
```
O abre en el navegador: https://docs.amayo.dev
#### B. Verificar Backend API
```bash
# Stats del bot
curl https://api.amayo.dev/api/bot/stats
# Debe devolver JSON con estadísticas
# {"servers":10,"users":1000,"commands":50}
```
#### C. Ver Logs de NGINX
```bash
# Frontend
sudo tail -f /var/log/nginx/docs.amayo.dev.access.log
# Backend
sudo tail -f /var/log/nginx/api.amayo.dev.access.log
# Errores
sudo tail -f /var/log/nginx/error.log
```
#### D. Ver Logs del Bot
```bash
pm2 logs amayo
```
## 🔄 Script de Deploy Automático
Puedes usar el script `deploy.sh` (necesitas crearlo):
```bash
#!/bin/bash
# Script de deploy para Amayo
echo "🚀 Iniciando deploy de Amayo..."
# 1. Build del frontend
echo "📦 Compilando frontend..."
cd AmayoWeb
npm run build
# 2. Copiar archivos
echo "📤 Copiando archivos al servidor..."
sudo rm -rf /var/www/docs.amayo.dev/*
sudo cp -r dist/* /var/www/docs.amayo.dev/
sudo chown -R www-data:www-data /var/www/docs.amayo.dev
sudo chmod -R 755 /var/www/docs.amayo.dev
# 3. Reiniciar NGINX
echo "🔄 Reiniciando NGINX..."
sudo nginx -t && sudo systemctl reload nginx
# 4. Reiniciar bot (para aplicar cambios del backend)
echo "🤖 Reiniciando bot..."
pm2 restart amayo
echo "✅ Deploy completado!"
echo "🌐 Frontend: https://docs.amayo.dev"
echo "🌐 Backend: https://api.amayo.dev"
```
Hacer ejecutable:
```bash
chmod +x deploy.sh
```
Ejecutar:
```bash
./deploy.sh
```
## 🧪 Testing Local (Desarrollo)
### Iniciar Backend (Bot)
```bash
# En la raíz del proyecto
npm start
# El bot iniciará el servidor en puerto 3000
```
### Iniciar Frontend
```bash
# En carpeta AmayoWeb
cd AmayoWeb
npm run dev
# Frontend en http://localhost:5173
```
El frontend se conectará automáticamente al backend en `localhost:3000` gracias al proxy de Vite.
## 🔍 Troubleshooting
### Error: "502 Bad Gateway" en api.amayo.dev
**Causa:** El bot no está corriendo o no está en el puerto 3000.
**Solución:**
```bash
# Verificar que el bot esté corriendo
pm2 status
# Verificar el puerto
netstat -tulpn | grep 3000
# Reiniciar el bot
pm2 restart amayo
# Ver logs
pm2 logs amayo
```
### Error: "404 Not Found" en rutas de Vue
**Causa:** Falta la configuración `try_files` en NGINX.
**Solución:** Asegúrate de que el archivo de configuración tenga:
```nginx
location / {
try_files $uri $uri/ /index.html;
}
```
### Error: CORS al hacer requests desde el frontend
**Causa:** Headers CORS no configurados correctamente.
**Solución:** Verifica que el archivo `nginx-api.amayo.dev.conf` tenga los headers CORS configurados.
### Frontend muestra valores en 0
**Causa:** El bot no está devolviendo datos o no puede acceder a la instancia del bot.
**Solución:**
1. Verifica que el bot esté conectado a Discord
2. Revisa los endpoints en `src/server/handler.ts`
3. Verifica que `require("../main").bot` funcione correctamente
### Certificados SSL no válidos
**Causa:** Certificados no generados o expirados.
**Solución:**
```bash
# Verificar certificados
sudo certbot certificates
# Renovar
sudo certbot renew
# Reiniciar NGINX
sudo systemctl restart nginx
```
## 📊 Checklist de Deploy
- [ ] Build del frontend completado (`npm run build`)
- [ ] Archivos copiados a `/var/www/docs.amayo.dev`
- [ ] Configuración de NGINX para `docs.amayo.dev` creada y habilitada
- [ ] Configuración de NGINX para `api.amayo.dev` creada y habilitada
- [ ] Certificados SSL configurados para ambos dominios
- [ ] Variables de entorno configuradas en el servidor
- [ ] Bot corriendo en puerto 3000
- [ ] NGINX reiniciado
- [ ] Verificado frontend: `curl https://docs.amayo.dev`
- [ ] Verificado backend: `curl https://api.amayo.dev/api/bot/stats`
- [ ] Probado login con Discord
- [ ] Verificadas estadísticas en vivo
## 🎯 URLs Finales
- 🌐 **Frontend:** https://docs.amayo.dev
- 🔌 **Backend API:** https://api.amayo.dev
- 📊 **Stats:** https://api.amayo.dev/api/bot/stats
- **Info:** https://api.amayo.dev/api/bot/info
## 📝 Notas Importantes
1. **Puerto 3000:** El bot ejecuta el servidor en este puerto desde `main.ts`. No cambiar sin actualizar la configuración.
2. **Separación de Dominios:**
- `docs.amayo.dev` → Archivos estáticos (Vue)
- `api.amayo.dev` → Proxy a Node.js (puerto 3000)
3. **CORS:** El backend acepta requests solo desde `docs.amayo.dev` en producción.
4. **PM2:** Asegúrate de que el bot esté configurado para reiniciarse automáticamente:
```bash
pm2 save
pm2 startup
```
5. **Logs:** Siempre revisa los logs si algo no funciona:
```bash
# Logs del bot
pm2 logs amayo
# Logs de NGINX
sudo tail -f /var/log/nginx/error.log
```
---
**Última actualización:** Noviembre 2025