Cómo implementar una aplicación web Node.js en OuiPanel
Tiempo estimado: 15 minutos
Dificultad: Intermedia ⭐⭐
Tipo de servidor: Node.js
📋 Introducción
Esta guía explica cómo alojar una aplicación web Node.js (sitio web, API REST, panel de control, etc.) en OuiPanel con un nombre de dominio personalizado y HTTPS automático.
Qué puedes alojar
| Tipo de aplicación | Ejemplos |
|---|---|
| 🌐 Sitio web | Sitio de presentación, blog, cartera |
| 🔌 API REST | Backend para aplicación móvil/web |
| 📊 Panel de control | Panel de administración, interfaz de gestión |
| 🛒 Aplicación web | E-commerce, SaaS, herramienta en línea |
Qué necesitas
| Requisitos | Descripción |
|---|---|
| 📁 Una aplicación Node.js | Tu código fuente funcional |
| 💻 Un servidor Node.js | Adquirido en OuiHeberg |
| 🌐 Un nombre de dominio | (Opcional) Para acceder mediante una URL personalizada |
📁 Paso 1: Preparar los Archivos de la Aplicación
Structura de archivos
Tu aplicación debe tener esta estructura:
📁 MiApp/
├── 📄 index.js ← Archivo principal (o app.js, server.js...)
├── 📄 package.json ← Dependencias npm
├── 📄 .env ← Variables de entorno (creado en el servidor)
├── 📁 public/ ← (Opcional) Archivos estáticos (CSS, JS, imágenes)
├── 📁 views/ ← (Opcional) Plantillas (EJS, Pug, Handlebars)
└── 📁 routes/ ← (Opcional) Rutas de la aplicación
Archivo package.json
Crea un archivo package.json con tus dependencias:
{
"name": "mi-aplicacion-web",
"version": "1.0.0",
"description": "Mi aplicación web Node.js",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.18.2",
"dotenv": "^16.3.1"
}
}
💡 Ajusta
"main": "index.js"según el nombre de tu archivo principal (app.js,server.js, etc.).
Archivo principal (index.js)
Aquí tienes un ejemplo de una aplicación Express.js configurada para OuiPanel:
// Cargar las variables de entorno desde .env
require('dotenv').config();
const express = require('express');
const app = express();
// Puerto: utiliza SERVER_PORT (OuiPanel) o PORT (.env) o 3000 por defecto
const PORT = process.env.SERVER_PORT || process.env.PORT || 3000;
// Middleware para analizar JSON
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Servir archivos estáticos (CSS, JS, imágenes)
app.use(express.static('public'));
// Ruta principal
app.get('/', (req, res) => {
res.send(`
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Mi Aplicación</title>
<style>
body { font-family: Arial, sans-serif; max-width: 800px; margin: 50px auto; padding: 20px; }
h1 { color: #333; }
.status { background: #d4edda; padding: 15px; border-radius: 5px; color: #155724; }
</style>
</head>
<body>
<h1>🚀 Mi Aplicación Node.js</h1>
<div>
✅ ¡La aplicación funciona correctamente!
</div>
<p>Servidor iniciado en el puerto ${PORT}</p>
</body>
</html>
`);
});
// Ruta de ejemplo de API
app.get('/api/status', (req, res) => {
res.json({
status: 'online',
message: 'API funcional',
timestamp: new Date().toISOString()
});
});
// Ruta de API con parámetro
app.get('/api/hello/:name', (req, res) => {
res.json({
message: `¡Hola ${req.params.name}!`
});
});
// Iniciar el servidor en 0.0.0.0 (importante para OuiPanel)
app.listen(PORT, '0.0.0.0', () => {
console.log(`✅ Servidor iniciado en http://0.0.0.0:${PORT}`);
console.log(`📅 ${new Date().toLocaleString('es-ES')}`);
});
⚠️ IMPORTANTE: El servidor debe escuchar en
0.0.0.0(todas las interfaces), no enlocalhosto127.0.0.1.
Ejemplo con plantillas EJS
Si estás utilizando plantillas EJS:
package.json:
{
"name": "mi-aplicacion-web",
"version": "1.0.0",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.18.2",
"ejs": "^3.1.9",
"dotenv": "^16.3.1"
}
}
index.js:
require('dotenv').config();
const express = require('express');
const app = express();
const PORT = process.env.SERVER_PORT || process.env.PORT || 3000;
// Configuración EJS
app.set('view engine', 'ejs');
app.set('views', './views');
// Archivos estáticos
app.use(express.static('public'));
// Ruta principal
app.get('/', (req, res) => {
res.render('index', {
title: 'Mi Aplicación',
message: '¡Bienvenido a mi sitio!'
});
});
app.listen(PORT, '0.0.0.0', () => {
console.log(`✅ Servidor iniciado en el puerto ${PORT}`);
});
views/index.ejs:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<title><%= title %></title>
</head>
<body>
<h1><%= message %></h1>
</body>
</html>
📤 Paso 2: Subir los Archivos a OuiPanel
Mediante el Administrador de Archivos
- Conéctate a OuiPanel
- Selecciona tu servidor Node.js
- En el menú lateral, haz clic en Administrador de archivos

- Elimina los archivos predeterminados (si los hay)
- Haz clic en Subir (Upload)
- Sube tus archivos:
index.js(oapp.js,server.js...)package.json- Tus carpetas (
public/,views/,routes/...) si es necesario

⚠️ No subas: El archivo
.envse creará directamente en el servidor (más seguro).
Mediante SFTP (Recomendado para varios archivos)
- Conéctate por SFTP con FileZilla
- Arrastra y suelta todo el contenido de tu carpeta de aplicación
- Verifica que todos los archivos se hayan subido correctamente
📖 Consulta la guía "Acceso SFTP con FileZilla" para obtener instrucciones detalladas.
🔑 Paso 3: Crear el Archivo .env
Cree un archivo .env para almacenar de forma segura sus variables de entorno.
Crear el archivo .env
- En el Administrador de archivos, haga clic en Nuevo archivo
- Nómbrelo
.env(con el punto delante) - Agregue sus variables:
# Configuración de la aplicación
PORT=3000
NODE_ENV=production
# Base de datos (si es necesario)
DATABASE_URL=mysql://user:password@host:3306/database
# Claves API (ejemplos)
API_KEY=your_api_key
SECRET_KEY=your_secret_key

- Haga clic en Crear o Guardar
💡 Consejo: La variable
SERVER_PORTse proporciona automáticamente por OuiPanel. Úsela preferiblemente en su código.
Estructura final en el servidor
📁 Raíz del servidor/
├── 📄 .env ← Variables de entorno
├── 📄 index.js ← Su código
├── 📄 package.json ← Dependencias
├── 📁 public/ ← Archivos estáticos
├── 📁 views/ ← Plantillas
└── 📁 node_modules/ ← (creado automáticamente)
⚙️ Paso 4: Configurar el Archivo de Inicio
OuiPanel necesita saber qué archivo ejecutar al inicio.
Acceder a los parámetros
- En el menú lateral, haga clic en Configuración
- Haga clic en Parámetros del servidor

Configurar el archivo a ejecutar
Localice el campo Archivo a ejecutar (o Main File / Startup File):

| Su archivo principal | Valor a colocar |
|---|---|
index.js | index.js |
app.js | app.js |
server.js | server.js |
src/index.js | src/index.js |
⚠️ Importante: El nombre debe coincidir exactamente con su archivo (distingue mayúsculas y minúsculas).
🚀 Paso 5: Iniciar la Aplicación
Iniciar el servidor
- En el menú lateral, haga clic en Consola
- Haga clic en Iniciar
Instalación automática de dependencias
En el primer inicio, el servidor ejecuta automáticamente npm install:
> npm install
added 62 packages in 4s
> node index.js
✅ Servidor iniciado en http://0.0.0.0:25639
📅 15/12/2025 14:30:00
[
Captura de pantalla realizada con la configuración EJS
Probar la aplicación
- Tomar nota del puerto mostrado en la consola (ej:
25639) - Obtener la IP de su servidor en la Vista Global
- Acceder a
http://IP:PUERTOen su navegador
Ejemplo: http://51.77.xxx.xxx:25639


💡 Para un acceso más sencillo con un nombre de dominio y HTTPS, configure el Proxy Manager (siguiente paso).
🌐 Paso 6: Configurar un Nombre de Dominio (Proxy Manager)
Para acceder a su aplicación a través de una URL limpia con HTTPS (ej: https://monapp.com), utilice el Proxy Manager.
Requisitos previos
- ✅ Un nombre de dominio que posea
- ✅ Acceso a la zona DNS de su dominio
Configurar el DNS
- En OuiPanel → Proxy Manager, tome nota de la IP del Proxy
- En su registrador (OVH, Cloudflare, etc.), cree un registro DNS:
| Tipo | Nombre | Valor |
|---|---|---|
A | @ o app | IP del Proxy |
Agregar el dominio en OuiPanel
- En el menú lateral, haga clic en Proxy Manager
- Haga clic en Agregar
- Rellene:
| Campo | Valor |
|---|---|
| Nombre de dominio | monapp.com o app.mondomaine.fr |
| Puerto | El puerto de su aplicación (ej: 25639) |
| SSL | ✅ Activado |




- Haga clic en Crear la redirección
Resultado
Su aplicación ahora es accesible a través de:
- ✅
https://monapp.com(con HTTPS automático) - ✅ Certificado SSL gratuito (Let's Encrypt)
📖 Consulte la guía "Configurar un Nombre de Dominio con el Proxy Manager" para más detalles.
🔧 Solución de Problemas
La aplicación no se inicia
| ❌ Error | ✅ Solución |
|---|---|
No se puede encontrar el módulo 'express' | Verifique package.json y reinicie |
No se puede encontrar el módulo 'dotenv' | Agregue dotenv en package.json |
Error: No se puede encontrar el módulo './index.js' | Archivo de inicio incorrecto configurado |
Error de sintaxis | Error en su código JavaScript |
La aplicación se inicia pero no es accesible
| ❌ Causa | ✅ Solución |
|---|---|
Escucha en localhost | Cambie a 0.0.0.0 |
| Puerto incorrecto | Utilice process.env.SERVER_PORT |
| Cortafuegos | El puerto debe ser el asignado por OuiPanel |
Verifique su código:
// ❌ INCORRECTO - escucha solo en local
app.listen(3000, 'localhost', () => {});
app.listen(3000, '127.0.0.1', () => {});
// ✅ CORRECTO - escucha en todas las interfaces
app.listen(PORT, '0.0.0.0', () => {});
Error 502 Bad Gateway (Proxy Manager)
| ❌ Causa | ✅ Solución |
|---|---|
| Aplicación no iniciada | Inicie el servidor en OuiPanel |
| Puerto incorrecto en Proxy Manager | Verifique el puerto configurado |
| Aplicación bloqueada | Consulte la Consola |
La aplicación se bloquea al iniciar
| ❌ Causa | ✅ Solución |
|---|---|
| Variable de entorno faltante | Verifique el archivo .env |
| Error de sintaxis | Corrija el código |
| Paquete faltante | Verifique package.json |
Agregar manejo de errores:
// Gestionar errores no capturados
process.on('uncaughtException', (error) => {
console.error('Error no capturado:', error);
});
process.on('unhandledRejection', (error) => {
console.error('Promesa rechazada:', error);
});
npm install falla
| ❌ Error | ✅ Solución |
|---|---|
package.json not found | Verifique que el archivo esté en la raíz |
ERESOLVE unable to resolve | Actualice las versiones en package.json |
🔒 Seguridad
Archivo .env
| ✅ Por hacer | ❌ No hacer |
|---|---|
Crear el .env en el servidor | Subir el .env desde su PC |
Agregar .env al .gitignore | Hacer commit del .env en GitHub |
| Usar variables para secretos | Poner las claves API en el código |
Archivo .gitignore recomendado:
# Variables de entorno
.env
.env.local
.env.production
# Módulos de Node
node_modules/
Mejores prácticas de seguridad
const helmet = require('helmet'); // Seguridad HTTP
const rateLimit = require('express-rate-limit'); // Anti-DDoS
// Agregar en package.json: "helmet": "^7.1.0", "express-rate-limit": "^7.1.5"
app.use(helmet());
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minutos
max: 100 // 100 solicitudes máximas por IP
});
app.use(limiter);
💡 Buenas Prácticas
Rendimiento
- ✅ Utilice
NODE_ENV=productionen producción - ✅ Active la compresión con
compression - ✅ Guarde en caché los archivos estáticos
const compression = require('compression');
app.use(compression());
// Caché de archivos estáticos (1 día)
app.use(express.static('public', { maxAge: '1d' }));
Estructura avanzada
Para una aplicación más compleja:
📁 MiApp/
├── 📄 index.js ← Punto de entrada
├── 📄 package.json
├── 📄 .env
├── 📁 config/
│ └── 📄 database.js ← Configuración BD
├── 📁 routes/
│ ├── 📄 index.js ← Rutas principales
│ ├── 📄 api.js ← Rutas API
│ └── 📄 auth.js ← Rutas de autenticación
├── 📁 controllers/
│ └── 📄 userController.js
├── 📁 models/
│ └── 📄 User.js
├── 📁 middleware/
│ └── 📄 auth.js
├── 📁 public/
│ ├── 📁 css/
│ ├── 📁 js/
│ └── 📁 images/
└── 📁 views/
├── 📄 index.ejs
└── 📄 layout.ejs
📦 Frameworks Soportados
OuiPanel soporta todos los frameworks de Node.js:
| Framework | Descripción |
|---|---|
| Express.js | Framework minimalista (utilizado en esta guía) |
| Fastify | Alternativa rápida a Express |
| Koa | Framework ligero por el equipo de Express |
| NestJS | Framework TypeScript estructurado |
| Next.js | Framework React con SSR |
| Nuxt.js | Framework Vue.js con SSR |
💡 El principio sigue siendo el mismo: escuchar en
0.0.0.0con el puerto proporcionado por OuiPanel.
📝 Resumen
1. Preparar los archivos (index.js + package.json con dotenv)
2. Asegurarse de que el servidor escuche en 0.0.0.0:PUERTO
3. Subir los archivos a OuiPanel (sin el .env)
4. Crear el archivo .env en el servidor
5. Configurar el archivo de inicio (index.js, app.js...)
6. Iniciar el servidor
7. Probar a través de http://IP:PUERTO
8. (Opcional) Configurar el Proxy Manager para un dominio con HTTPS
