Ricerca nel sito web

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 systemd per 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 sudo e 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 -y

Dopo l'installazione, avvia e abilita Nginx per l'esecuzione automatica all'avvio:

sudo systemctl start nginx
sudo systemctl enable nginx

Verifica che Nginx sia in esecuzione:

sudo systemctl status nginx

Dovresti 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 status

Se UFW non è attivo, attivalo e configura le regole necessarie:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo 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 startup

Il 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 -y

Ottieni 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_domain

Certbot 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-run

Se 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_domain

Aggiungi 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 -t

Se il test ha esito positivo, ricarica Nginx per applicare le modifiche:

sudo systemctl reload nginx

Fase 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 nodejs

Verifica l'installazione:

node --version
npm --version
v20.19.6
10.8.2

Installare 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 -y

Verifica l'installazione:

python3 --version
pip3 --version
pip3 --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 -y

Verifica 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.service

Aggiungi 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.target

Punti chiave di configurazione:

  • Type=simple: Per applicazioni che vengono eseguite in primo piano
  • User=www-data: Esegue l'applicazione come utente non root per motivi di sicurezza
  • WorkingDirectory: Imposta la directory di lavoro dell'applicazione
  • Restart=on-failure: Riavvia automaticamente l'applicazione se va in crash
  • RestartSec=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-app

Controlla 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.target

Esempio 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-app

Distribuisci 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 --production

Per Python:

sudo -u www-data python3 -m venv venv
sudo -u www-data ./venv/bin/pip install -r requirements.txt

Dopo il deployment, riavvia il servizio della tua applicazione:

sudo systemctl restart your-app

Fase 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_config

Imposta quanto segue:

PermitRootLogin no
PasswordAuthentication no

Riavvia SSH:

sudo systemctl restart sshd

Configura aggiornamenti di sicurezza automatici

Abilita aggiornamenti di sicurezza automatici:

sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

Configura 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-app

Aggiungi :

/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 -y

Fase 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-pager

I 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_pass nella tua configurazione Nginx corrisponde 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
htop

Se 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-app

Ora, 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-app

Questo 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.