Guía Completa: Configurar Múltiples Proyectos en un VPS con Nginx
Estructura de Carpetas Recomendada
/var/www/
├── ERP-Sistemas/
│ ├── DEMO/
│ │ ├── FRONT/ # React/Vite
│ │ └── BACK/ # Express
│ ├── ABELSAC/
│ │ ├── FRONT/ # React/Vite
│ │ └── BACK/ # Express
│ ├── NUEVA_EMPRESA/ # Ejemplo para expansión
│ │ ├── FRONT/
│ │ └── BACK/
Pro Tip: Mantén esta estructura consistente para todos los clientes. Usa nombres cortos sin espacios.
Configuración Maestra de Nginx
Archivo: /etc/nginx/sites-available/ERP-Sistemas
Configuración Base
server {
listen 80;
server_name [IP];
# Redirección para assets (incluyendo imágenes)
location ~ ^/(assets|images)/(.*)$ {
rewrite ^/(assets|images)/(.*)$ /demo/$1/$2 last;
}
location /demo {
alias /var/www/ERP-Sistemas/Demo/ERP_Frontend/dist;
try_files $uri $uri/ /demo/index.html;
index index.html;
# Configuración para todos los archivos estáticos
location ~* \.(js|css|png|jpg|jpeg|gif|svg|ico|woff2|ttf|json)$ {
expires 1y;
add_header Cache-Control "public";
access_log off;
}
}
location /demo-api/ {
proxy_pass http://127.0.0.1:3000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Explicación Detallada:
- location /demo: Sirve los archivos estáticos del frontend construido
- sub_filter: Reescribe rutas en HTML/CSS/JS para que apunten a /demo/
- location /demo-api: Redirige API calls al backend correspondiente
- rewrite: Elimina el prefijo /demo-api antes de pasar al backend
Pasos de Implementación
Instalar Nginx en tu VPS (Ubuntu/Debian)
# Actualizar paquetes del sistema
sudo apt update
# Instalar Nginx
sudo apt install nginx -y
# Verificar que Nginx esté activo
sudo systemctl status nginx
Primera Configuración
-
Habilitar Nginx al inicio del sistema:
sudo systemctl enable nginx
-
Abrir puertos HTTP/HTTPS en el firewall:
sudo ufw allow 80/tcp # HTTP sudo ufw allow 443/tcp # HTTPS sudo ufw allow 22/tcp #SSH (acceso remoto, esencial para administrar el VPS). sudo ufw allow 1433/tcp #Microsoft SQL Server (asegúrate de que es necesario exponer este puerto públicamente). sudo ufw allow 6379/tcp # para redis sudo ufw enable
-
Verificar acceso temporal:
Deberías ver la página de bienvenida de Nginx.http://[TU-IP]
-
Crear archivo de configuración:
sudo nano /etc/nginx/sites-available/empresas
-
Habilitar el sitio:
sudo ln -s /etc/nginx/sites-available/empresas /etc/nginx/sites-enabled/ sudo nginx -t # Verificar sintaxis sudo systemctl restart nginx
Para Cada Nueva Empresa
-
Agregar bloque a Nginx:
Editar el archivo de configuración y añadir:
# ===== NUEVA_EMPRESA ===== location /nuevaempresa { alias /var/www/EMPRESAS/NUEVA_EMPRESA/FRONT/dist; try_files $uri $uri/ /nuevaempresa/index.html; sub_filter 'src="/' 'src="/nuevaempresa/'; sub_filter 'href="/' 'href="/nuevaempresa/'; } location /nuevaempresa-api { proxy_pass http://localhost:3002/api; # Usar nuevo puerto rewrite ^/nuevaempresa-api/(.*) /api/$1 break; }
-
Reiniciar Nginx:
sudo nginx -t && sudo systemctl restart nginx
-
Configurar .env del frontend:
VITE_API_BASE_URL=/nuevaempresa-api VITE_BASE_PATH=/nuevaempresa
Solución de Problemas Comunes
Error | Solución |
---|---|
404 en recursos estáticos | Verificar que alias apunte a /dist y permisos de carpeta |
502 Bad Gateway | Verificar que el backend esté corriendo con pm2 list |
Problemas de CORS | Asegurar que Express tenga: app.use(cors({ origin: ['http://tu_ip'] })) |
# 1. Propietario (www-data)
sudo chown -R www-data:www-data /var/www/ERP-Sistemas
# 2. Permisos para directorios (755) y archivos (644)
sudo find /var/www/ERP-Sistemas -type d -exec chmod 755 {} \;
sudo find /var/www/ERP-Sistemas -type f -exec chmod 644 {} \;
#si no funciona
sudo chmod -R 755 /var/www/ERP-Sistemas
# 3. Reiniciar Nginx
sudo systemctl restart nginx
GUIA 4 - Configurar Múltiples Proyectos en un VPS con Nginx
Reviewed by codeAb
on
12:20
Rating:
No hay comentarios: