355 lines
8.1 KiB
Markdown
355 lines
8.1 KiB
Markdown
# 🚀 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
|