Imposta e configura un server applicazioni su Ubuntu 24.04
Introduzione
Configurare e impostare un server applicativo su Ubuntu 24.04 è essenziale per distribuire applicazioni web in ambienti di produzione. Sia che tu stia ospitando applicazioni Node.js, servizi web Python o siti basati su PHP, un server applicativo configurato correttamente fornisce le basi per distribuzioni affidabili, sicure e scalabili.
Questo tutorial ti guida nella configurazione di un server applicativo pronto per la produzione su un Droplet Linux-Console.net con Ubuntu 24.04. Imparerai come installare e configurare i componenti essenziali, impostare un reverse proxy con Nginx, proteggere il tuo server con certificati SSL e distribuire applicazioni utilizzando systemd per la gestione dei processi. La configurazione segue le migliori pratiche di produzione, assicurando che il tuo server sia pronto a gestire carichi di lavoro reali.
Punti Chiave
- Configura un server applicativo pronto per la produzione su Ubuntu 24.04 utilizzando un Droplet di Linux-Console.net.
- Configura Nginx come proxy inverso per gestire le richieste in arrivo e instradare il traffico alle tue applicazioni
- Implementare la crittografia SSL/TLS utilizzando Let’s Encrypt per connessioni sicure.
- Distribuisci e gestisci applicazioni utilizzando
systemdper una gestione dei processi affidabile. - Applica misure di rafforzamento della sicurezza, inclusa la configurazione del firewall e dei permessi utente.
- Supporta più tipi di applicazioni, incluse applicazioni Node.js, Python e PHP.
Prerequisiti
Prima di iniziare, assicurati di avere quanto segue:
- Un Droplet di Linux-Console.net che esegue Ubuntu 24.04. Se hai bisogno di crearne uno, segui la nostra guida sull'Installazione Iniziale del Server con Ubuntu, che include la creazione di un utente non root con privilegi
sudoe la configurazione di un firewall. - Un nome di dominio puntava all'indirizzo IP del tuo Droplet. Puoi configurarlo seguendo la nostra guida su Come Configurare un Nome Host con Linux-Console.net.
- Conoscenza di base della riga di comando di Linux e accesso SSH al tuo server.
Passo 1 — Aggiornamento dei pacchetti di sistema
Inizia aggiornando l'indice dei pacchetti del tuo sistema e aggiornando i pacchetti esistenti per assicurarti di avere le ultime patch di sicurezza e le versioni del software:
sudo apt update
sudo apt upgrade -y
Ciò garantisce che il tuo server Ubuntu 24.04 abbia le informazioni sui pacchetti più recenti e gli aggiornamenti di sicurezza. Ubuntu 24.04 include versioni aggiornate dei pacchetti rispetto a Ubuntu 22.04, comprese versioni più recenti di systemd, Nginx e di altri componenti core.
Passo 2 — Installazione di Nginx come Proxy Inverso
Nginx funge da proxy inverso, gestendo le richieste HTTP e HTTPS in arrivo e inoltrandole al tuo server applicativo. Questa configurazione offre diversi vantaggi: terminazione SSL, capacità di bilanciamento del carico e maggiore sicurezza mantenendo il tuo server applicativo dietro il proxy.
Installa Nginx usando apt:
sudo apt install nginx -yDopo l'installazione, avvia e abilita Nginx per l'esecuzione automatica all'avvio:
sudo systemctl start nginx
sudo systemctl enable nginxVerifica che Nginx sia in esecuzione:
sudo systemctl status nginxDovresti vedere un output che indica che Nginx è attivo e in esecuzione.
● nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-12-18 07:03:01 UTC; 32s ago
Docs: man:nginx(8)
Main PID: 46284 (nginx)
Tasks: 3 (limit: 4656)
Memory: 2.4M (peak: 5.3M)
CPU: 46ms
CGroup: /system.slice/nginx.service
├─46284 "nginx: master process /usr/sbin/nginx -g daemon on; master_process on;"
├─46286 "nginx: worker process"
└─46287 "nginx: worker process"
Dec 18 07:03:01 Anish-Ubuntu-24 systemd[1]: Starting nginx.service - A high performance web server and a reverse proxy server...
Dec 18 07:03:01 Anish-Ubuntu-24 systemd[1]: Started nginx.service - A high performance web server and a reverse proxy server.Fase 3 — Configurazione del firewall
Ubuntu 24.04 utilizza UFW (Uncomplicated Firewall) per la gestione del firewall. Configuralo per consentire il traffico HTTP, HTTPS e SSH, bloccando gli altri porti non necessari.
Per prima cosa, assicurati che UFW sia installato e controlla il suo stato:
sudo ufw statusSe UFW non è attivo, attivalo e configura le regole necessarie:
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enablesudo ufw allow 'Nginx Full'
sudo ufw enable
Rules updated
Rules updated (v6)
Rules updated
Rules updated (v6)
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startupIl profilo Nginx Full consente il traffico sia HTTP (porta 80) sia HTTPS (porta 443). Verifica le regole del firewall:
sudo ufw status verbose
Dovresti vedere le regole che consentono il traffico di OpenSSH e Nginx Full.
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
80,443/tcp (Nginx Full) ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
80,443/tcp (Nginx Full (v6)) ALLOW IN Anywhere (v6) Fase 4 — Configurazione di SSL con Let’s Encrypt
Proteggere il tuo server applicativo con la crittografia SSL/TLS è essenziale per le distribuzioni in produzione. Let’s Encrypt fornisce certificati SSL gratuiti che possono essere rinnovati automaticamente.
Installa Certbot e il plugin per Nginx:
sudo apt install certbot python3-certbot-nginx -yOttieni un certificato SSL per il tuo dominio. Sostituisci your_domain con il nome reale del tuo dominio:
sudo certbot --nginx -d your_domain -d www.your_domainCertbot ti chiederà un indirizzo email e se desideri reindirizzare il traffico HTTP verso HTTPS. Scegli di reindirizzare per una maggiore sicurezza. Il certificato sarà rinnovato automaticamente prima della scadenza.
Testare il processo di rinnovo automatico:
sudo certbot renew --dry-runSe questo comando viene completato senza errori, il rinnovo automatico è configurato correttamente.
Passo 5 — Configurare Nginx come Proxy Inverso
Crea una configurazione di blocco server Nginx per instradare il traffico verso il tuo server applicativo. Questo esempio mostra una configurazione generica che puoi adattare per diversi tipi di applicazioni.
Crea un nuovo file di configurazione per il tuo dominio:
sudo nano /etc/nginx/sites-available/your_domainAggiungi la seguente configurazione, sostituendo your_domain con il tuo dominio reale e adattando l'URL proxy_pass per corrispondere alla porta della tua applicazione:
server {
listen 80;
listen [::]:80;
server_name your_domain www.your_domain;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name your_domain www.your_domain;
ssl_certificate /etc/letsencrypt/live/your_domain/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your_domain/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://localhost: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;
}
}
Questa configurazione:
- Reindirizza il traffico HTTP a HTTPS
- Termina SSL a livello di Nginx
- Inoltra le richieste alla tua applicazione in esecuzione sulla porta 3000 (adatta secondo necessità)
- Conserva gli indirizzi IP dei client e le informazioni sul protocollo
Abilita la configurazione creando un collegamento simbolico:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Verifica la configurazione di Nginx per errori di sintassi:
sudo nginx -tSe il test ha esito positivo, ricarica Nginx per applicare le modifiche:
sudo systemctl reload nginxFase 6 — Installazione delle dipendenze di runtime dell'applicazione
Le dipendenze di runtime di cui hai bisogno dipendono dal tipo di applicazione. Questa sezione tratta la configurazione per applicazioni Node.js, Python e PHP.
Installare Node.js
Per le applicazioni Node.js, installa Node.js utilizzando il repository di NodeSource per ottenere l'ultima versione LTS:
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejsVerifica l'installazione:
node --version
npm --versionv20.19.6
10.8.2Installare Python e pip
Ubuntu 24.04 include Python 3.12 di default. Installa pip e gli strumenti per gli ambienti virtuali:
sudo apt install python3-pip python3-venv -yVerifica l'installazione:
python3 --version
pip3 --versionpip3 --version
Python 3.12.3
pip 24.0 from /usr/lib/python3/dist-packages/pip (python 3.12)Installare PHP e PHP-FPM
Per le applicazioni PHP, installa PHP e PHP-FPM (FastCGI Process Manager):
sudo apt install php-fpm php-mysql php-mbstring php-xml php-curl -yVerifica che PHP-FPM sia in esecuzione:
sudo systemctl status php8.3-fpm Loaded: loaded (/usr/lib/systemd/system/php8.3-fpm.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-12-18 08:02:36 UTC; 1min 56s ago
Docs: man:php-fpm8.3(8)
Process: 59077 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.3/fpm/pool.d/www.conf 83 (code=exited, >
Main PID: 59074 (php-fpm8.3)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 4656)
Memory: 9.5M (peak: 10.4M)
CPU: 97ms
CGroup: /system.slice/php8.3-fpm.service
├─59074 "php-fpm: master process (/etc/php/8.3/fpm/php-fpm.conf)"
├─59075 "php-fpm: pool www"
└─59076 "php-fpm: pool www"
Dec 18 08:02:36 Anish-Ubuntu-24 systemd[1]: Starting php8.3-fpm.service - The PHP 8.3 FastCGI Process Manager...<$> Nota: Ubuntu 24.04 include PHP 8.3. Modifica i numeri di versione se il tuo sistema utilizza una versione diversa. <$>
Passo 7 — Creazione di un servizio Systemd per la tua applicazione
Systemd gestisce la tua applicazione come servizio, garantendo che si avvii automaticamente all'accensione e si riavvii in caso di arresto improvviso. Questo esempio crea un servizio systemd per un'applicazione Node.js, ma puoi adattarlo ad altri tipi di applicazioni.
Crea un file di servizio systemd:
sudo nano /etc/systemd/system/your-app.serviceAggiungi la seguente configurazione, modificando i percorsi e le variabili d'ambiente secondo necessità:
[Unit]
Description=Your Application Server
After=network.target
[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/your-app
Environment="NODE_ENV=production"
Environment="PORT=3000"
ExecStart=/usr/bin/node /var/www/your-app/server.js
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.targetPunti chiave di configurazione:
Type=simple: Per applicazioni che vengono eseguite in primo pianoUser=www-data: Esegue l'applicazione come utente non root per motivi di sicurezzaWorkingDirectory: Imposta la directory di lavoro dell'applicazioneRestart=on-failure: Riavvia automaticamente l'applicazione se va in crashRestartSec=10: Attende 10 secondi prima di riavviare
Ricarica systemd e avvia il tuo servizio:
sudo systemctl daemon-reload
sudo systemctl start your-app
sudo systemctl enable your-appControlla lo stato del servizio:
sudo systemctl status your-app● your-app.service
Loaded: loaded (/etc/systemd/system/your-app.service; enabled; preset: enabled)
Active: active (running) since Thu 2025-12-18 08:07:30 UTC; 4ms ago
Main PID: 59408 ((node))
Tasks: 1 (limit: 4656)
Memory: 512.0K (peak: 512.0K)
CPU: 936us
CGroup: /system.slice/your-app.service
└─59408 "(node)"
Dec 18 08:07:30 Anish-Ubuntu-24 systemd[1]: your-app.service: Scheduled restart job, restart counter is at 4.
Dec 18 08:07:30 Anish-Ubuntu-24 systemd[1]: Started your-app.service.Esempio di applicazione Python
Per un'applicazione Python che utilizza Gunicorn, il tuo servizio systemd potrebbe assomigliare a questo:
[Unit]
Description=Your Python Application
After=network.target
[Service]
Type=notify
User=www-data
WorkingDirectory=/var/www/your-app
Environment="PATH=/var/www/your-app/venv/bin"
ExecStart=/var/www/your-app/venv/bin/gunicorn --bind 127.0.0.1:8000 app:app
Restart=on-failure
[Install]
WantedBy=multi-user.targetEsempio di applicazione PHP
Per le applicazioni PHP, in genere si utilizza PHP-FPM con Nginx. Configura Nginx per inoltrare le richieste a PHP-FPM:
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
}Fase 8 — Distribuzione della tua applicazione
Crea una directory per la tua applicazione e imposta i permessi appropriati:
sudo mkdir -p /var/www/your-app
sudo chown -R www-data:www-data /var/www/your-appDistribuisci i file della tua applicazione in questa directory. Puoi usare Git, SCP o altri metodi di distribuzione:
cd /var/www/your-app
sudo -u www-data git clone https://github.com/your-username/your-repo.git .Installa le dipendenze e crea la tua applicazione secondo necessità. Per Node.js:
sudo -u www-data npm install --productionPer Python:
sudo -u www-data python3 -m venv venv
sudo -u www-data ./venv/bin/pip install -r requirements.txtDopo il deployment, riavvia il servizio della tua applicazione:
sudo systemctl restart your-appFase 9 — Migliori pratiche per il consolidamento della produzione
Applica queste misure di sicurezza per rafforzare il tuo server applicazioni per l'uso in produzione.
Disabilita l'accesso root tramite SSH
Modifica la configurazione SSH:
sudo nano /etc/ssh/sshd_configImposta quanto segue:
PermitRootLogin no
PasswordAuthentication noRiavvia SSH:
sudo systemctl restart sshdConfigura aggiornamenti di sicurezza automatici
Abilita aggiornamenti di sicurezza automatici:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgradesConfigura la rotazione dei log
Configura la rotazione dei log per evitare che i file di log occupino lo spazio su disco. Modifica la configurazione di logrotate:
sudo nano /etc/logrotate.d/your-appAggiungi :
/var/www/your-app/logs/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data www-data
sharedscripts
}Monitora lo spazio su disco
Configura il monitoraggio per avvisarti quando lo spazio su disco è insufficiente. Installa e configura gli strumenti di monitoraggio:
sudo apt install htop iotop -yFase 10 — Risoluzione dei Problemi Comuni
Questa sezione affronta i problemi comuni che potresti incontrare durante la configurazione del tuo server applicazioni.
Applicazione non avviata
Controlla lo stato del servizio e i registri:
sudo systemctl status your-app
sudo journalctl -u your-app -n 50 --no-pagerI problemi comuni includono:
- Percorsi dei file errati nel file di servizio systemd
- Variabili d'ambiente mancanti
- Errori di autorizzazione (assicurarsi che l'utente del servizio possa accedere ai file dell'applicazione)
Errore 502 Bad Gateway di Nginx
Questo di solito significa che Nginx non riesce a connettersi alla tua applicazione. Controlla:
- La tua applicazione è in esecuzione:
sudo systemctl status your-app- L'applicazione sta ascoltando sulla porta corretta:
sudo netstat -tlnp | grep 3000- L'URL
proxy_passnella tua configurazioneNginxcorrisponde alla porta della tua applicazione.
Problemi con il certificato SSL
Se i certificati SSL non si rinnovano:
- Controlla i log di Certbot:
sudo tail -f /var/log/letsencrypt/letsencrypt.log- Verifica che i record DNS del tuo dominio puntino al tuo server:
dig your_domain- Assicurati che le porte 80 e 443 siano aperte nel tuo firewall.
Alto utilizzo della memoria
Monitora l'utilizzo della memoria:
free -h
htopSe la tua applicazione consuma troppa memoria, considera:
- Ottimizzare il codice della tua applicazione
- Aumentare la RAM del tuo Droplet
- Implementazione della memorizzazione nella cache a livello di applicazione
Domande Frequenti
1. Cos'è un server applicazioni in Ubuntu?
Un server applicativo è un ambiente server che esegue e gestisce applicazioni web. Su Ubuntu 24.04, questo comporta tipicamente la configurazione di un ambiente di esecuzione (come Node.js, Python o PHP), l'impostazione di un proxy inverso (come Nginx) e l'uso di systemd per gestire i processi dell'applicazione. Il server applicativo gestisce le richieste in arrivo, esegue il codice dell'applicazione e restituisce le risposte ai client.
2. Come posso configurare systemd per la mia app?
Per configurare systemd per la tua applicazione, dovrai creare un file di servizio. Ecco un esempio passo-passo:
Supponiamo che la tua applicazione sia un'app Node.js situata in /home/ubuntu/my-app e che tu voglia eseguirla con npm start utilizzando l'utente ubuntu.
- Crea il file di servizio systemd:
sudo nano /etc/systemd/system/my-app.service- Aggiungi il seguente contenuto al file:
[Unit]
Description=My Node.js App
After=network.target
[Service]
Type=simple
User=ubuntu
WorkingDirectory=/home/ubuntu/my-app
ExecStart=/usr/bin/npm start
Restart=on-failure
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target- Ricaricare systemd per riconoscere il nuovo servizio:
sudo systemctl daemon-reload- Abilita il servizio per l'avvio automatico:
sudo systemctl enable my-app- Avvia l'applicazione:
sudo systemctl start my-appOra, la tua app verrà eseguita in background, si riavvierà in caso di errore e si avvierà automaticamente all'accensione. Puoi controllarne lo stato con:
sudo systemctl status my-appQuesto metodo funziona con la maggior parte delle applicazioni. Basta adattare ExecStart, User e WorkingDirectory secondo le esigenze del tuo stack.
3. Dovrei usare Nginx o Apache per il mio proxy inverso?
Sia Nginx che Apache funzionano bene come proxy inversi, ma Nginx è spesso preferito per i server di applicazioni moderni grazie al suo minor consumo di memoria, migliori prestazioni sotto alta concorrenza e configurazione più semplice per scenari di proxy inverso.
Nginx eccelle anche nella gestione dei contenuti statici e nel proxy delle richieste ai server applicativi, rendendolo ideale per le implementazioni in produzione. Apache rimane una scelta solida, soprattutto se hai bisogno di moduli specifici o sei più familiare con la sua sintassi di configurazione.
4. Come posso proteggere il mio server applicazioni su Ubuntu 24.04?
Proteggi il tuo server applicativo: abilitando il firewall UFW e permettendo solo le porte necessarie, installando certificati SSL con Let’s Encrypt, eseguendo le applicazioni come utenti non root, disabilitando il login SSH per l’utente root, configurando gli aggiornamenti di sicurezza automatici, mantenendo aggiornati i pacchetti software e implementando permessi corretti sui file. Inoltre, utilizza password forti o chiavi SSH, configura fail2ban per prevenire attacchi di forza bruta e verifica regolarmente i log delle applicazioni e del sistema per attività sospette.
5. Posso ospitare più app su un singolo server Ubuntu?
Sì, puoi ospitare più applicazioni su un singolo server Ubuntu 24.04. Configura servizi systemd separati per ciascuna applicazione, ognuno in ascolto su porte diverse (ad esempio, 3000, 3001, 8000). Configura blocchi server Nginx (host virtuali) per ciascun dominio o sottodominio, con ogni blocco che fa da proxy alla porta corretta dell'applicazione. Questo approccio ti permette di usare efficientemente le risorse del server mantenendo l'isolamento tra le applicazioni.
6. Come posso verificare se la mia app sta funzionando correttamente?
Verifica che la tua applicazione sia in esecuzione controllando lo stato del servizio systemd con sudo systemctl status your-app. Esamina i log dell'applicazione usando sudo journalctl -u your-app -f per vedere l'output dei log in tempo reale. Testa l'applicazione accedendo tramite il tuo dominio o indirizzo IP. Controlla che Nginx stia instradando correttamente le richieste esaminando i log di accesso e di errore di Nginx in /var/log/nginx/access.log e /var/log/nginx/error.log. Monitora l'utilizzo delle risorse con htop o free -h per assicurarti che la tua applicazione non stia consumando eccessivamente CPU o memoria.
Conclusione
Hai configurato con successo un server applicativo pronto per la produzione su Ubuntu 24.04. Il tuo Droplet Linux-Console.net è ora dotato di Nginx come reverse proxy, crittografia SSL/TLS, gestione dei servizi con systemd e misure di sicurezza avanzate. Questa configurazione supporta il deployment di applicazioni web Node.js, Python, PHP e altre in un ambiente sicuro e scalabile.
La configurazione segue le migliori pratiche di produzione, includendo il riavvio automatico dei servizi, il rinnovo dei certificati SSL, la protezione del firewall e i permessi utenti appropriati. Il tuo server applicativo è pronto per gestire carichi di lavoro reali e può essere scalato man mano che crescono le tue esigenze.
Per ulteriori approfondimenti e configurazioni avanzate, esplora questi tutorial correlati su Linux-Console.net:
- Come installare e usare Docker su Ubuntu - Impara la containerizzazione per un deployment e una gestione delle applicazioni più semplici
- Come Configurare Nginx come Reverse Proxy su Ubuntu - Approfondimento sulle configurazioni avanzate del reverse proxy Nginx
- Misure di Sicurezza Raccomandate per Proteggere i Tuoi Server - Tecniche aggiuntive di rafforzamento della sicurezza per i server di produzione
Pronto a distribuire le tue applicazioni? Inizia con i Droplet di Linux-Console.net per creare un'infrastruttura scalabile e affidabile per il tuo server applicativo. Con funzionalità come backup automatici, monitoraggio e prezzi flessibili, i Droplet di Linux-Console.net forniscono le basi necessarie per le distribuzioni in produzione.
Grazie per aver imparato con la community di Linux-Console.net.
