Para que cualquier persona pueda visitar lo que ves en localhost:5000 o localhost:3000, necesitas cuatro elementos:
1) Un servidor virtual (VPS) con IP pública accesible las 24 horas;
2) Copiar tu código al servidor;
3) Un servidor web inverso como Nginx que reciba el tráfico web en los puertos 80 y 443; y
4) Un nombre de dominio apuntando a la IP de tu VPS con certificado SSL gratuito (Let's Encrypt).
1. Requisitos Previos
Antes de comenzar con los comandos en la terminal, asegúrate de contar con:
- Tu proyecto web funcionando sin errores en tu máquina local.
- Un servidor VPS con Linux (en esta guía utilizaremos Ubuntu 22.04 / 24.04 LTS o Debian 12).
- La dirección IP pública de tu servidor y tus credenciales de acceso root por SSH.
- Un cliente SSH (la terminal de Windows PowerShell, Terminal de macOS o la consola de Linux).
2. Conexión a tu Servidor VPS por SSH
Abre tu terminal y conéctate a tu servidor reemplazando TU_IP_PUBLICA por la dirección IP provista en tu plan:
ssh root@TU_IP_PUBLICA
Si es la primera vez que te conectas, el sistema te preguntará si deseas confiar en la huella del host (fingerprint). Escribe yes y presiona Enter. Luego introduce la contraseña de tu usuario root.
3. Actualización de Repositorios e Instalación de Nginx
Nginx será el encargado de escuchar las solicitudes web de Internet y entregárselas a tus usuarios de forma ultrarrápida:
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx
Verifica que el servicio esté corriendo correctamente:
sudo systemctl status nginx
Si abres tu navegador e ingresas http://TU_IP_PUBLICA, deberías ver la página de bienvenida predeterminada de Nginx.
4. Subir los Archivos de tu Proyecto
Existen dos formas estándar de subir tus archivos:
Opción A: Clonar mediante Git (Recomendada)
Si tu código está alojado en un repositorio (como GitHub o GitLab), puedes clonarlo directamente en el servidor:
cd /var/www
sudo git clone https://github.com/tu-usuario/tu-proyecto.git /var/www/tu-proyecto
Opción B: Subir vía SCP desde tu computadora
Desde la terminal de tu computadora local (no dentro del servidor):
scp -r ./mi-carpeta-local root@TU_IP_PUBLICA:/var/www/tu-proyecto
5. Configurar el Bloque de Servidor en Nginx
Crea un archivo de configuración para tu proyecto en el directorio de sitios disponibles:
sudo nano /etc/nginx/sites-available/tu-proyecto.conf
Si tu proyecto es un sitio web estático (HTML/CSS/JS), pega la siguiente configuración:
server {
listen 80;
server_name tu-dominio.com www.tu-dominio.com;
root /var/www/tu-proyecto;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
Si tu proyecto es una API o app dinámica (Node.js, .NET, Python) que corre en un puerto interno (por ejemplo el 5000):
server {
listen 80;
server_name tu-dominio.com www.tu-dominio.com;
location / {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Habilita el sitio creando un enlace simbólico y reinicia Nginx:
sudo ln -s /etc/nginx/sites-available/tu-proyecto.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
6. Configurar tu Dominio DNS
Ve al panel de control donde compraste tu dominio (o a tu proveedor de DNS como Cloudflare) y crea un registro tipo A apuntando a la IP de tu VPS:
- Tipo: A
- Nombre: @ (o tu subdominio)
- Valor/Destino: TU_IP_PUBLICA
- TTL: Automático o 300 segundos
7. Activar HTTPS Gratuito con Certbot y Let's Encrypt
Protege la navegación de tus usuarios instalando el certificado SSL oficial con un solo comando:
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d tu-dominio.com -d www.tu-dominio.com
Certbot modificará automáticamente tu archivo de Nginx para redirigir todo el tráfico HTTP a HTTPS de forma segura y programará la renovación automática cada 90 días.
Errores Frecuentes y Soluciones
Ocurre cuando Nginx intenta reenviar el tráfico al puerto local (ej. 5000), pero tu aplicación no está corriendo de fondo. Asegúrate de ejecutarla con un servicio systemd o PM2.
Nginx se ejecuta bajo el usuario www-data. Asegura que tenga permisos de lectura sobre tus archivos: sudo chown -R www-data:www-data /var/www/tu-proyecto y sudo chmod -R 755 /var/www/tu-proyecto.
Documentación Oficial Recomendada
Siguientes Pasos
Continúa aprendiendo con nuestras otras guías especializadas:
- ¿Construiste tu proyecto con IA? Guía específica para apps de ChatGPT, Claude y Gemini →
- Cómo publicar ASP.NET Core en un VPS Linux con Kestrel y systemd →
¿Necesitas un servidor para seguir esta guía?
Con los VPS de Planeta Nube obtienes acceso root completo, almacenamiento SSD rápido y recursos dedicados a un precio accesible en Perú y Latinoamérica.