Come distribuire un'applicazione web Node.js su OuiPanel
Tempo stimato : 15 minuti
Difficoltà : Intermedia ⭐⭐
Tipo di server : Node.js
📋 Introduzione
Questa guida ti spiega come ospitare un'applicazione web Node.js (sito web, API REST, dashboard...) su OuiPanel con un nome di dominio personalizzato e HTTPS automatico.
Cosa puoi ospitare
| Tipo di applicazione | Esempi |
|---|---|
| 🌐 Sito web | Sito vetrina, blog, portfolio |
| 🔌 API REST | Backend per applicazione mobile/web |
| 📊 Dashboard | Pannello di amministrazione, interfaccia di gestione |
| 🛒 Applicazione web | E-commerce, SaaS, strumento online |
Di cosa hai bisogno
| Requisiti | Descrizione |
|---|---|
| 📁 Un'applicazione Node.js | Il tuo codice sorgente funzionante |
| 💻 Un server Node.js | Ordinato su OuiHeberg |
| 🌐 Un nome di dominio | (Opzionale) Per un accesso tramite URL personalizzata |
📁 Passo 1 : Preparare i File dell'Applicazione
Struttura dei file
La tua applicazione deve avere questa struttura :
📁 MonApp/
├── 📄 index.js ← File principale (o app.js, server.js...)
├── 📄 package.json ← Dipendenze npm
├── 📄 .env ← Variabili d'ambiente (creato sul server)
├── 📁 public/ ← (Opzionale) File statici (CSS, JS, immagini)
├── 📁 views/ ← (Opzionale) Template (EJS, Pug, Handlebars)
└── 📁 routes/ ← (Opzionale) Rotte dell'applicazione
File package.json
Crea un file package.json con le tue dipendenze :
{
"name": "la-mia-applicazione-web",
"version": "1.0.0",
"description": "La mia applicazione web Node.js",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"express": "^4.18.2",
"dotenv": "^16.3.1"
}
}
💡 Adatta
"main": "index.js"in base al nome del tuo file principale (app.js,server.js, ecc.).
File principale (index.js)
Ecco un esempio di applicazione Express.js configurata per OuiPanel :
// Carica le variabili d'ambiente da .env
require('dotenv').config();
const express = require('express');
const app = express();
// Porta : utilizza SERVER_PORT (OuiPanel) o PORT (.env) o 3000 per default
const PORT = process.env.SERVER_PORT || process.env.PORT || 3000;
// Middleware per analizzare il JSON
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// Servire i file statici (CSS, JS, immagini)
app.use(express.static('public'));
// Rotta principale
app.get('/', (req, res) => {
res.send(`
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>La Mia Applicazione</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>🚀 La Mia Applicazione Node.js</h1>
<div>
✅ L'applicazione funziona correttamente!
</div>
<p>Server avviato sulla porta ${PORT}</p>
</body>
</html>
`);
});
// Rotta API esempio
app.get('/api/status', (req, res) => {
res.json({
status: 'online',
message: 'API funzionante',
timestamp: new Date().toISOString()
});
});
// Rotta API con parametro
app.get('/api/hello/:name', (req, res) => {
res.json({
message: `Ciao ${req.params.name} !`
});
});
// Avviare il server su 0.0.0.0 (importante per OuiPanel)
app.listen(PORT, '0.0.0.0', () => {
console.log(`✅ Server avviato su http://0.0.0.0:${PORT}`);
console.log(`📅 ${new Date().toLocaleString('it-IT')}`);
});
⚠️ IMPORTANTE : Il server deve ascoltare su
0.0.0.0(tutte le interfacce), non sulocalhosto127.0.0.1.
Esempio con template EJS
Se utilizzi template EJS :
package.json :
{
"name": "la-mia-applicazione-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;
// Configurazione EJS
app.set('view engine', 'ejs');
app.set('views', './views');
// File statici
app.use(express.static('public'));
// Rotta principale
app.get('/', (req, res) => {
res.render('index', {
title: 'La Mia Applicazione',
message: 'Benvenuto nel mio sito!'
});
});
app.listen(PORT, '0.0.0.0', () => {
console.log(`✅ Server avviato sulla porta ${PORT}`);
});
views/index.ejs :
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title><%= title %></title>
</head>
<body>
<h1><%= message %></h1>
</body>
</html>
📤 Passo 2 : Caricare i File su OuiPanel
Via il Gestore File
- Accedi a OuiPanel
- Seleziona il tuo server Node.js
- Nel menu laterale, clicca su Gestore file

- Elimina i file di default (se ci sono)
- Clicca su Invia (Upload)
- Carica i tuoi file :
index.js(oapp.js,server.js...)package.json- I tuoi folder (
public/,views/,routes/...) se necessario

⚠️ Non caricare : Il file
.envsarà creato direttamente sul server (più sicuro).
Via SFTP (Consigliato per più file)
- Accedi in SFTP con FileZilla
- Trascina e rilascia tutto il contenuto della tua cartella applicazione
- Verifica che tutti i file siano stati caricati correttamente
📖 Consulta la guida "Accesso SFTP con FileZilla" per istruzioni dettagliate.
🔑 Passo 3 : Creare il File .env
Crea un file .env per memorizzare le tue variabili d'ambiente in modo sicuro.
Creare il file .env
- Nel Gestore file, clicca su Nuovo file
- Nominalo
.env(con il punto davanti) - Aggiungi le tue variabili :
# Configurazione dell'applicazione
PORT=3000
NODE_ENV=production
# Database (se necessario)
DATABASE_URL=mysql://user:password@host:3306/database
# Chiavi API (esempi)
API_KEY=la_tua_chiave_api
SECRET_KEY=la_tua_chiave_segreta

- Clicca su Crea o Salva
💡 Suggerimento : La variabile
SERVER_PORTè fornita automaticamente da OuiPanel. Usala come priorità nel tuo codice.
Struttura finale sul server
📁 Radice del server/
├── 📄 .env ← Variabili d'ambiente
├── 📄 index.js ← Il tuo codice
├── 📄 package.json ← Dipendenze
├── 📁 public/ ← File statici
├── 📁 views/ ← Template
└── 📁 node_modules/ ← (creato automaticamente)
⚙️ Passo 4 : Configurare il File di Avvio
OuiPanel deve sapere quale file eseguire all'avvio.
Accedere alle impostazioni
- Nel menu laterale, clicca su Configurazione
- Clicca su Impostazioni del server

Configurare il file da eseguire
Trova il campo File da eseguire (o Main File / Startup File) :

| Il tuo file principale | Valore da impostare |
|---|---|
index.js | index.js |
app.js | app.js |
server.js | server.js |
src/index.js | src/index.js |
⚠️ Importante : Il nome deve corrispondere esattamente al tuo file (sensibile al maiuscolo/minuscolo).
🚀 Passo 5 : Avviare l'Applicazione
Avviare il server
- Nel menu laterale, clicca su Console
- Clicca su Avvia
Installazione automatica delle dipendenze
Al primo avvio, il server esegue automaticamente npm install :
> npm install
added 62 packages in 4s
> node index.js
✅ Server avviato su http://0.0.0.0:25639
📅 15/12/2025 14:30:00
[
Screenshot realizzato con la configurazione EJS
Testare l'applicazione
- Annota la porta visualizzata nella console (es:
25639) - Recupera l'IP del tuo server nella Vista Globale
- Accedi a
http://IP:PORTnel tuo browser
Esempio : http://51.77.xxx.xxx:25639


💡 Per un accesso più semplice con un nome di dominio e HTTPS, configura il Proxy Manager (passo successivo).
🌐 Passo 6 : Configurare un Nome di Dominio (Proxy Manager)
Per accedere alla tua applicazione tramite un URL pulito con HTTPS (es: https://la-miaapp.com), utilizza il Proxy Manager.
Requisiti
- ✅ Un nome di dominio che possiedi
- ✅ Accesso alla zona DNS del tuo dominio
Configurare il DNS
- In OuiPanel → Proxy Manager, annota l'IP del Proxy
- Presso il tuo registrar (OVH, Cloudflare, ecc.), crea un record DNS :
| Tipo | Nome | Valore |
|---|---|---|
A | @ o app | IP del Proxy |
Aggiungere il dominio in OuiPanel
- Nel menu laterale, clicca su Proxy Manager
- Clicca su Aggiungi
- Compila :
| Campo | Valore |
|---|---|
| Nome di dominio | la-miaapp.com o app.miodominio.fr |
| Porta | La porta della tua applicazione (es: 25639) |
| SSL | ✅ Attivato |




- Clicca su Crea la redirezione
Risultato
La tua applicazione è ora accessibile tramite :
- ✅
https://la-miaapp.com(con HTTPS automatico) - ✅ Certificato SSL gratuito (Let's Encrypt)
📖 Consulta la guida "Configurare un Nome di Dominio con il Proxy Manager" per ulteriori dettagli.
🔧 Risoluzione dei Problemi
L'applicazione non si avvia
| ❌ Errore | ✅ Soluzione |
|---|---|
Cannot find module 'express' | Controlla package.json e riavvia |
Cannot find module 'dotenv' | Aggiungi dotenv in package.json |
Error: Cannot find module './index.js' | File di avvio configurato in modo errato |
SyntaxError | Errore nel tuo codice JavaScript |
L'applicazione si avvia ma non è accessibile
| ❌ Causa | ✅ Soluzione |
|---|---|
Ascolto su localhost | Cambia in 0.0.0.0 |
| Porta errata | Usa process.env.SERVER_PORT |
| Firewall | La porta deve essere quella assegnata da OuiPanel |
Controlla il tuo codice :
// ❌ ERRATO - ascolta solo in locale
app.listen(3000, 'localhost', () => {});
app.listen(3000, '127.0.0.1', () => {});
// ✅ CORRETTO - ascolta su tutte le interfacce
app.listen(PORT, '0.0.0.0', () => {});
Errore 502 Bad Gateway (Proxy Manager)
| ❌ Causa | ✅ Soluzione |
|---|---|
| Applicazione non avviata | Avvia il server in OuiPanel |
| Porta errata nel Proxy Manager | Controlla la porta configurata |
| Applicazione crashata | Controlla la Console |
L'applicazione si blocca all'avvio
| ❌ Causa | ✅ Soluzione |
|---|---|
| Variabile d'ambiente mancante | Controlla il file .env |
| Errore di sintassi | Correggi il codice |
| Pacchetto mancante | Controlla package.json |
Aggiungi una gestione degli errori :
// Gestione degli errori non catturati
process.on('uncaughtException', (error) => {
console.error('Errore non catturato:', error);
});
process.on('unhandledRejection', (error) => {
console.error('Promessa rifiutata:', error);
});
npm install fallisce
| ❌ Errore | ✅ Soluzione |
|---|---|
package.json not found | Controlla che il file sia nella radice |
ERESOLVE unable to resolve | Aggiorna le versioni in package.json |
🔒 Sicurezza
File .env
| ✅ Da fare | ❌ Da non fare |
|---|---|
Creare il .env sul server | Caricare il .env dal tuo PC |
Aggiungere .env al .gitignore | Commettere il .env su GitHub |
| Utilizzare variabili per i segreti | Mettere le chiavi API nel codice |
File .gitignore consigliato :
# Variabili d'ambiente
.env
.env.local
.env.production
# Moduli Node
node_modules/
Buone pratiche di sicurezza
const helmet = require('helmet'); // Sicurezza HTTP
const rateLimit = require('express-rate-limit'); // Anti-DDoS
// Aggiungere in package.json : "helmet": "^7.1.0", "express-rate-limit": "^7.1.5"
app.use(helmet());
const limiter = rateLimit({
windowMs: 15 * 60 * 1000, // 15 minuti
max: 100 // 100 richieste max per IP
});
app.use(limiter);
💡 Buone Pratiche
Performance
- ✅ Utilizza
NODE_ENV=productionin produzione - ✅ Attiva la compressione con
compression - ✅ Metti in cache i file statici
const compression = require('compression');
app.use(compression());
// Cache dei file statici (1 giorno)
app.use(express.static('public', { maxAge: '1d' }));
Struttura avanzata
Per un'applicazione più complessa :
📁 MonApp/
├── 📄 index.js ← Punto d'ingresso
├── 📄 package.json
├── 📄 .env
├── 📁 config/
│ └── 📄 database.js ← Configurazione BDD
├── 📁 routes/
│ ├── 📄 index.js ← Rotte principali
│ ├── 📄 api.js ← Rotte API
│ └── 📄 auth.js ← Rotte autenticazione
├── 📁 controllers/
│ └── 📄 userController.js
├── 📁 models/
│ └── 📄 User.js
├── 📁 middleware/
│ └── 📄 auth.js
├── 📁 public/
│ ├── 📁 css/
│ ├── 📁 js/
│ └── 📁 images/
└── 📁 views/
├── 📄 index.ejs
└── 📄 layout.ejs
📦 Frameworks Supportati
OuiPanel supporta tutti i framework Node.js :
| Framework | Descrizione |
|---|---|
| Express.js | Framework minimalista (utilizzato in questa guida) |
| Fastify | Alternativa veloce a Express |
| Koa | Framework leggero del team di Express |
| NestJS | Framework TypeScript strutturato |
| Next.js | Framework React con SSR |
| Nuxt.js | Framework Vue.js con SSR |
💡 Il principio rimane lo stesso: ascoltare su
0.0.0.0con la porta fornita da OuiPanel.
📝 Riepilogo
1. Preparare i file (index.js + package.json con dotenv)
2. Assicurarsi che il server ascolti su 0.0.0.0:PORT
3. Caricare i file su OuiPanel (senza il .env)
4. Creare il file .env sul server
5. Configurare il file di avvio (index.js, app.js...)
6. Avviare il server
7. Testare tramite http://IP:PORT
8. (Opzionale) Configurare il Proxy Manager per un dominio con HTTPSHai bisogno di un hosting Node.js?
Distribuisci le tue applicazioni Node.js con il nostro hosting ottimizzato e supporto dedicato.
