feat: Actualizar configuración de puertos y agregar guías de despliegue para el servidor
This commit is contained in:
@@ -2,6 +2,6 @@
|
||||
VITE_DISCORD_CLIENT_ID=tu_client_id_de_discord
|
||||
|
||||
# API Backend
|
||||
# Desarrollo: http://localhost:3001
|
||||
# Desarrollo: http://localhost:3000
|
||||
# Producción: https://api.amayo.dev
|
||||
VITE_API_URL=http://localhost:3001
|
||||
VITE_API_URL=http://localhost:3000
|
||||
|
||||
354
AmayoWeb/DEPLOY_GUIDE.md
Normal file
354
AmayoWeb/DEPLOY_GUIDE.md
Normal file
@@ -0,0 +1,354 @@
|
||||
# 🚀 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
|
||||
340
AmayoWeb/VPS_SETUP_COMMANDS.md
Normal file
340
AmayoWeb/VPS_SETUP_COMMANDS.md
Normal file
@@ -0,0 +1,340 @@
|
||||
# 🎯 Comandos Exactos para el VPS
|
||||
|
||||
## ✅ Ya Tienes Configurado
|
||||
|
||||
```
|
||||
✓ Certificado SSL para api.amayo.dev
|
||||
✓ Certificado SSL para docs.amayo.dev (según tu configuración)
|
||||
✓ NGINX instalado
|
||||
```
|
||||
|
||||
## 📝 Pasos a Seguir
|
||||
|
||||
### 1. Configurar NGINX para docs.amayo.dev (Frontend Vue)
|
||||
|
||||
Editar el archivo de configuración existente:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/nginx/sites-available/default
|
||||
```
|
||||
|
||||
**Reemplazar la configuración de `docs.amayo.dev` con esto:**
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name docs.amayo.dev;
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
listen [::]:443 ssl http2;
|
||||
server_name docs.amayo.dev;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/docs.amayo.dev/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/docs.amayo.dev/privkey.pem;
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
|
||||
|
||||
# IMPORTANTE: Cambiar a archivos estáticos
|
||||
root /var/www/docs.amayo.dev;
|
||||
index index.html;
|
||||
|
||||
access_log /var/log/nginx/docs.amayo.dev.access.log;
|
||||
error_log /var/log/nginx/docs.amayo.dev.error.log;
|
||||
|
||||
# Gzip
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
gzip_min_length 1024;
|
||||
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/json application/javascript;
|
||||
|
||||
# SPA fallback
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# Cache assets
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
|
||||
# Security headers
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
}
|
||||
```
|
||||
|
||||
### 2. Configurar NGINX para api.amayo.dev (Backend)
|
||||
|
||||
En el mismo archivo o crear uno separado:
|
||||
|
||||
```bash
|
||||
sudo nano /etc/nginx/sites-available/default
|
||||
```
|
||||
|
||||
**Agregar o modificar la sección de `api.amayo.dev`:**
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name api.amayo.dev;
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
listen [::]:443 ssl http2;
|
||||
server_name api.amayo.dev;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/api.amayo.dev/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/api.amayo.dev/privkey.pem;
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
|
||||
|
||||
access_log /var/log/nginx/api.amayo.dev.access.log;
|
||||
error_log /var/log/nginx/api.amayo.dev.error.log;
|
||||
|
||||
# Proxy al bot en puerto 3000
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 60s;
|
||||
proxy_read_timeout 60s;
|
||||
}
|
||||
|
||||
# CORS para el frontend
|
||||
add_header Access-Control-Allow-Origin "https://docs.amayo.dev" always;
|
||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
||||
add_header Access-Control-Allow-Headers "Authorization, Content-Type" always;
|
||||
add_header Access-Control-Allow-Credentials "true" always;
|
||||
|
||||
# Manejar preflight
|
||||
if ($request_method = 'OPTIONS') {
|
||||
add_header Access-Control-Allow-Origin "https://docs.amayo.dev" always;
|
||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
||||
add_header Access-Control-Allow-Headers "Authorization, Content-Type" always;
|
||||
add_header Access-Control-Max-Age 1728000;
|
||||
add_header Content-Type 'text/plain; charset=utf-8';
|
||||
add_header Content-Length 0;
|
||||
return 204;
|
||||
}
|
||||
|
||||
# Security headers
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Verificar y Reiniciar NGINX
|
||||
|
||||
```bash
|
||||
# Verificar sintaxis
|
||||
sudo nginx -t
|
||||
|
||||
# Si está OK, reiniciar
|
||||
sudo systemctl restart nginx
|
||||
|
||||
# Ver estado
|
||||
sudo systemctl status nginx
|
||||
```
|
||||
|
||||
### 4. Crear Directorio para el Frontend
|
||||
|
||||
```bash
|
||||
# Crear directorio
|
||||
sudo mkdir -p /var/www/docs.amayo.dev
|
||||
|
||||
# Ajustar permisos
|
||||
sudo chown -R $USER:www-data /var/www/docs.amayo.dev
|
||||
sudo chmod -R 755 /var/www/docs.amayo.dev
|
||||
```
|
||||
|
||||
### 5. Deploy del Frontend (Desde tu PC Local)
|
||||
|
||||
En tu PC con Windows, en la carpeta `AmayoWeb`:
|
||||
|
||||
```powershell
|
||||
# Build
|
||||
npm run build
|
||||
|
||||
# El contenido estará en la carpeta dist/
|
||||
```
|
||||
|
||||
**Transferir archivos al VPS:**
|
||||
|
||||
Opción A - Con SCP desde PowerShell:
|
||||
```powershell
|
||||
scp -r dist/* shnimlz@tu_ip_servidor:/home/shnimlz/amayo-frontend/
|
||||
```
|
||||
|
||||
Opción B - Con WinSCP o FileZilla (interfaz gráfica)
|
||||
|
||||
**En el VPS, mover los archivos:**
|
||||
|
||||
```bash
|
||||
# Copiar archivos al directorio web
|
||||
sudo cp -r /home/shnimlz/amayo-frontend/* /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
|
||||
```
|
||||
|
||||
### 6. Verificar Variables de Entorno del Bot
|
||||
|
||||
En el servidor VPS:
|
||||
|
||||
```bash
|
||||
cd /ruta/a/tu/proyecto/amayo
|
||||
|
||||
# Editar .env
|
||||
nano .env
|
||||
```
|
||||
|
||||
Asegúrate de tener:
|
||||
|
||||
```env
|
||||
PORT=3000
|
||||
DISCORD_TOKEN=tu_token
|
||||
# ... resto de tus variables
|
||||
```
|
||||
|
||||
### 7. Verificar que el Bot Esté Corriendo
|
||||
|
||||
```bash
|
||||
# Si usas PM2
|
||||
pm2 status
|
||||
|
||||
# Ver logs
|
||||
pm2 logs amayo
|
||||
|
||||
# Reiniciar si es necesario
|
||||
pm2 restart amayo
|
||||
|
||||
# Si no usas PM2, verificar el proceso
|
||||
ps aux | grep node
|
||||
|
||||
# Verificar que esté en el puerto 3000
|
||||
netstat -tulpn | grep 3000
|
||||
```
|
||||
|
||||
### 8. Verificar que Todo Funcione
|
||||
|
||||
```bash
|
||||
# Verificar frontend
|
||||
curl https://docs.amayo.dev
|
||||
|
||||
# Verificar backend API
|
||||
curl https://api.amayo.dev/api/bot/stats
|
||||
|
||||
# Ver logs de NGINX
|
||||
sudo tail -f /var/log/nginx/docs.amayo.dev.access.log
|
||||
sudo tail -f /var/log/nginx/api.amayo.dev.access.log
|
||||
```
|
||||
|
||||
## 🔥 Comando Rápido de Deploy (Crear Script)
|
||||
|
||||
Crear archivo en el servidor:
|
||||
|
||||
```bash
|
||||
nano ~/deploy-amayo-frontend.sh
|
||||
```
|
||||
|
||||
Contenido:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
|
||||
echo "🚀 Deploying Amayo Frontend..."
|
||||
|
||||
# Limpiar directorio
|
||||
sudo rm -rf /var/www/docs.amayo.dev/*
|
||||
|
||||
# Copiar nuevos archivos (ajusta la ruta según donde subas los archivos)
|
||||
sudo cp -r /home/shnimlz/amayo-frontend/* /var/www/docs.amayo.dev/
|
||||
|
||||
# Permisos
|
||||
sudo chown -R www-data:www-data /var/www/docs.amayo.dev
|
||||
sudo chmod -R 755 /var/www/docs.amayo.dev
|
||||
|
||||
# Reiniciar NGINX
|
||||
sudo systemctl reload nginx
|
||||
|
||||
echo "✅ Deploy completado!"
|
||||
echo "🌐 https://docs.amayo.dev"
|
||||
```
|
||||
|
||||
Hacer ejecutable:
|
||||
|
||||
```bash
|
||||
chmod +x ~/deploy-amayo-frontend.sh
|
||||
```
|
||||
|
||||
Usar:
|
||||
|
||||
```bash
|
||||
./deploy-amayo-frontend.sh
|
||||
```
|
||||
|
||||
## 🎯 Resumen de URLs
|
||||
|
||||
| Servicio | URL | Puerto Interno |
|
||||
|----------|-----|----------------|
|
||||
| Frontend | https://docs.amayo.dev | Archivos estáticos |
|
||||
| Backend API | https://api.amayo.dev | → localhost:3000 |
|
||||
|
||||
## 🔍 Troubleshooting Rápido
|
||||
|
||||
### El frontend no carga
|
||||
|
||||
```bash
|
||||
# Ver logs
|
||||
sudo tail -f /var/log/nginx/error.log
|
||||
|
||||
# Verificar archivos
|
||||
ls -la /var/www/docs.amayo.dev/
|
||||
|
||||
# Verificar NGINX
|
||||
sudo nginx -t
|
||||
```
|
||||
|
||||
### La API no responde (502)
|
||||
|
||||
```bash
|
||||
# Verificar bot
|
||||
pm2 status
|
||||
pm2 logs amayo
|
||||
|
||||
# Verificar puerto
|
||||
netstat -tulpn | grep 3000
|
||||
|
||||
# Reiniciar bot
|
||||
pm2 restart amayo
|
||||
```
|
||||
|
||||
### CORS errors
|
||||
|
||||
Verificar que la configuración de NGINX tenga los headers CORS correctos en la sección de `api.amayo.dev`.
|
||||
|
||||
---
|
||||
|
||||
**Notas:**
|
||||
- El bot se ejecuta en el puerto **3000** (no 3001)
|
||||
- El frontend son **archivos estáticos** de Vue
|
||||
- NGINX hace **proxy** del API al bot en puerto 3000
|
||||
67
AmayoWeb/nginx-api.amayo.dev.conf
Normal file
67
AmayoWeb/nginx-api.amayo.dev.conf
Normal file
@@ -0,0 +1,67 @@
|
||||
# Configuración NGINX para api.amayo.dev (Backend Node.js)
|
||||
# Ubicación: /etc/nginx/sites-available/api.amayo.dev
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name api.amayo.dev;
|
||||
|
||||
# Redirigir HTTP a HTTPS
|
||||
return 301 https://$server_name$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
listen [::]:443 ssl http2;
|
||||
server_name api.amayo.dev;
|
||||
|
||||
# Certificados SSL (generados con certbot)
|
||||
ssl_certificate /etc/letsencrypt/live/api.amayo.dev/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/api.amayo.dev/privkey.pem;
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
|
||||
|
||||
# Logs
|
||||
access_log /var/log/nginx/api.amayo.dev.access.log;
|
||||
error_log /var/log/nginx/api.amayo.dev.error.log;
|
||||
|
||||
# Proxy al servidor Node.js en puerto 3000 (el bot ejecuta server.ts)
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:3000;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection 'upgrade';
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_cache_bypass $http_upgrade;
|
||||
|
||||
# Timeouts
|
||||
proxy_connect_timeout 60s;
|
||||
proxy_send_timeout 60s;
|
||||
proxy_read_timeout 60s;
|
||||
}
|
||||
|
||||
# CORS headers para permitir requests desde el frontend
|
||||
add_header Access-Control-Allow-Origin "https://docs.amayo.dev" always;
|
||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
||||
add_header Access-Control-Allow-Headers "Authorization, Content-Type" always;
|
||||
add_header Access-Control-Allow-Credentials "true" always;
|
||||
|
||||
# Manejar preflight requests
|
||||
if ($request_method = 'OPTIONS') {
|
||||
add_header Access-Control-Allow-Origin "https://docs.amayo.dev" always;
|
||||
add_header Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS" always;
|
||||
add_header Access-Control-Allow-Headers "Authorization, Content-Type" always;
|
||||
add_header Access-Control-Max-Age 1728000;
|
||||
add_header Content-Type 'text/plain; charset=utf-8';
|
||||
add_header Content-Length 0;
|
||||
return 204;
|
||||
}
|
||||
|
||||
# Security headers
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
}
|
||||
54
AmayoWeb/nginx-docs.amayo.dev.conf
Normal file
54
AmayoWeb/nginx-docs.amayo.dev.conf
Normal file
@@ -0,0 +1,54 @@
|
||||
# Configuración NGINX para docs.amayo.dev (Frontend Vue)
|
||||
# Ubicación: /etc/nginx/sites-available/docs.amayo.dev
|
||||
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name docs.amayo.dev;
|
||||
|
||||
# Redirigir HTTP a HTTPS
|
||||
return 301 https://$server_name$request_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 443 ssl http2;
|
||||
listen [::]:443 ssl http2;
|
||||
server_name docs.amayo.dev;
|
||||
|
||||
# Certificados SSL (generados con certbot)
|
||||
ssl_certificate /etc/letsencrypt/live/docs.amayo.dev/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/docs.amayo.dev/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
# Ruta de archivos estáticos del build de Vue
|
||||
root /var/www/docs.amayo.dev;
|
||||
index index.html;
|
||||
|
||||
# Logs
|
||||
access_log /var/log/nginx/docs.amayo.dev.access.log;
|
||||
error_log /var/log/nginx/docs.amayo.dev.error.log;
|
||||
|
||||
# Gzip compression
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
gzip_min_length 1024;
|
||||
gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml+rss application/json application/javascript;
|
||||
|
||||
# SPA fallback - todas las rutas van a index.html
|
||||
location / {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# Cache para assets estáticos
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
|
||||
# Security headers
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header X-XSS-Protection "1; mode=block" always;
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
||||
}
|
||||
@@ -2,7 +2,7 @@ import axios from 'axios'
|
||||
|
||||
const API_URL = import.meta.env.PROD
|
||||
? 'https://api.amayo.dev/api'
|
||||
: 'http://localhost:3001/api'
|
||||
: 'http://localhost:3000/api'
|
||||
|
||||
export const authService = {
|
||||
// Redirigir al usuario a Discord OAuth2
|
||||
|
||||
@@ -2,7 +2,7 @@ import axios from 'axios'
|
||||
|
||||
const API_URL = import.meta.env.PROD
|
||||
? 'https://api.amayo.dev'
|
||||
: 'http://localhost:3001'
|
||||
: 'http://localhost:3000'
|
||||
|
||||
export const botService = {
|
||||
// Obtener estadísticas del bot
|
||||
|
||||
@@ -32,7 +32,7 @@ export default defineConfig({
|
||||
port: 5173,
|
||||
proxy: {
|
||||
'/api': {
|
||||
target: 'http://localhost:3001',
|
||||
target: 'http://localhost:3000',
|
||||
changeOrigin: true,
|
||||
}
|
||||
}
|
||||
|
||||
@@ -191,10 +191,11 @@ process.on("SIGTERM", gracefulShutdown);
|
||||
|
||||
async function bootstrap() {
|
||||
logger.info("🚀 Iniciando bot...");
|
||||
await server.listen(process.env.PORT || 3000, () => {
|
||||
logger.info(
|
||||
`📘 Amayo Docs disponible en http://localhost:${process.env.PORT || 3000}`
|
||||
);
|
||||
const apiPort = process.env.API_PORT || process.env.PORT || 3000;
|
||||
await server.listen(apiPort, () => {
|
||||
logger.info(`📘 Amayo API disponible en http://localhost:${apiPort}`);
|
||||
logger.info(`🌐 Production API URL: https://api.amayo.dev`);
|
||||
logger.info(`📝 Frontend URL: https://docs.amayo.dev`);
|
||||
});
|
||||
// Cargar recursos locales (no deberían tirar el proceso si fallan)
|
||||
try {
|
||||
|
||||
@@ -2,12 +2,14 @@ import { createServer } from "node:http";
|
||||
import { handler } from "./handler";
|
||||
|
||||
// Servidor API para api.amayo.dev
|
||||
const PORT = parseInt(process.env.API_PORT || "3001", 10);
|
||||
// Este servidor se inicia desde main.ts con el bot
|
||||
// En producción debe correr en el puerto configurado (default 3000)
|
||||
const PORT = parseInt(process.env.API_PORT || process.env.PORT || "3000", 10);
|
||||
const HOST = process.env.API_HOST || "0.0.0.0";
|
||||
|
||||
export const server = createServer((req, res) => handler(req, res));
|
||||
|
||||
// Iniciar servidor solo si este archivo se ejecuta directamente
|
||||
// Iniciar servidor solo si este archivo se ejecuta directamente (modo standalone)
|
||||
if (require.main === module) {
|
||||
server.listen(PORT, HOST, () => {
|
||||
console.log(`🚀 API Server running on http://${HOST}:${PORT}`);
|
||||
|
||||
Reference in New Issue
Block a user