Introduzione
La distribuzione di applicazioni .NET Core su server Linux segna un cambiamento significativo rispetto alle tradizionali piattaforme di distribuzione incentrate su Microsoft. La natura multipiattaforma di .NET Core consente agli sviluppatori di sfruttare le prestazioni, l'affidabilità e la sicurezza degli ambienti Linux. Questa guida fornisce una panoramica completa della distribuzione di applicazioni .NET Core in varie distribuzioni Linux, concentrandosi sull'uso di Nginx o Apache come proxy inverso e sulla protezione delle distribuzioni con SSL.
Prerequisiti
Prima di immergerti nel processo di distribuzione, assicurati di avere:
- Un'applicazione .NET Core pronta per la distribuzione.
- Un server Linux (Ubuntu, CentOS o qualsiasi distribuzione preferita).
- Conoscenza base della riga di comando di Linux.
Passaggio 1: prepara il tuo server Linux
Innanzitutto, aggiorna il gestore pacchetti del tuo server. Installa il runtime o l'SDK .NET Core sul tuo server, a seconda delle tue esigenze specifiche. L'SDK è necessario per scopi di sviluppo, mentre il runtime è sufficiente per l'esecuzione delle applicazioni.
Per le distribuzioni basate su Debian come Ubuntu, utilizzare:
sudo dnf update
sudo apt install dotnet-runtime-6.0
Per le distribuzioni basate su Red Hat come CentOS, utilizzare:
sudo apt update
sudo dnf install dotnet-runtime-6.0
Passaggio 2: pubblicare l'applicazione .NET sul computer dello sviluppatore
La pubblicazione di un'applicazione .NET per la produzione è un passaggio cruciale che implica la preparazione dell'applicazione per la distribuzione, comprese la compilazione, l'ottimizzazione e il confezionamento. Per pubblicare un'applicazione .NET per la produzione, la CLI .NET fornisce un comando semplice e potente:
dotnet publish -c Release -o ./publish
Questo comando compila l'applicazione in modalità di rilascio, consentendo ottimizzazioni per migliorare le prestazioni e ridurre le dimensioni dell'applicazione. L'argomento -o ./publish
specifica la directory di output in cui verrà archiviata l'applicazione pubblicata. Garantisce che tutti i componenti runtime, le librerie e le dipendenze necessarie siano inclusi, rendendo l'applicazione pronta per la distribuzione su qualsiasi piattaforma o ambiente hosting supportato.
Passaggio 3: trasferire il codice pubblicato sul server di produzione
Questo processo prevede la copia sicura dei file dell'applicazione nell'ambiente di produzione. Un comando ampiamente utilizzato per questo scopo è scp (secure copy), che utilizza SSH per il trasferimento dei dati, garantendo sicurezza e affidabilità. Il comando seguente illustra come trasferire l'applicazione pubblicata da una directory locale a un server remoto:
scp -r ./publish username@your_production_server:/path/to/destination
Questo comando copia in modo ricorsivo l'intero contenuto della directory ./publish (dove è stata pubblicata l'applicazione .NET) nel percorso specificato sul server di produzione. Sostituisci nome utente, tuo_server_produzione e /percorso/della/destinazione rispettivamente con il nome utente SSH, il nome host o l'indirizzo IP del tuo server effettivo e il percorso in cui desideri che risieda l'applicazione.
Passaggio 4: esegui l'applicazione .NET
Passare alla directory dell'applicazione ed eseguire l'applicazione con il seguente comando:
dotnet MyApplication.dll
Questo comando avvia l'applicazione sulla porta predefinita, in genere 5000 per il server Kestrel.
Passaggio 5: configura un proxy inverso con Nginx o Apache
Un proxy inverso si trova davanti alla tua applicazione, gestendo le richieste HTTP in entrata e inoltrandole all'app. Questa configurazione aumenta la sicurezza, consente il bilanciamento del carico e serve il contenuto statico in modo efficiente.
Utilizzando Nginx
Installa Nginx:
sudo apt install nginx
Configura Nginx creando un nuovo file di configurazione per la tua applicazione in /etc/nginx/sites-available/myapp e collegalo a sites-enabled.
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost: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;
}
}
Abilita la configurazione e riavvia Nginx:
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
Utilizzando Apache
Installa Apache:
sudo apt install apache2
Abilita i moduli proxy e proxy_http :
sudo a2enmod proxy proxy_http
Crea un nuovo file di configurazione per la tua applicazione in /etc/apache2/sites-available/myapp.conf con il seguente contenuto:
<VirtualHost *:80>
ServerName example.com
ProxyPreserveHost On
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/
</VirtualHost>
Abilita il sito e riavvia Apache:
sudo a2ensite myapp.conf
sudo systemctl restart apache2
Passaggio 6: Proteggi l'applicazione con Let's Encrypt SSL
Proteggere la tua applicazione con SSL è fondamentale per proteggere i dati sensibili. Let's Encrypt offre certificati SSL gratuiti. Certbot è uno strumento popolare per ottenere e rinnovare i certificati Let's Encrypt.
Per Nginx
Installa Certbot e il plugin Nginx:
sudo apt-get install certbot python3-certbot-nginx
Ottieni e installa un certificato:
sudo certbot --nginx -d example.com
Per Apache
Installa Certbot e il plugin Apache:
sudo apt-get install certbot python3-certbot-apache
Ottieni e installa un certificato:
sudo certbot --apache -d example.com
Migliori pratiche
- Mantieni aggiornati il tuo server e la tua applicazione per mitigare le vulnerabilità.
- Utilizza le variabili di ambiente per le impostazioni dell'applicazione, in particolare per i dati sensibili.
- Implementare la registrazione e il monitoraggio per rilevare e risolvere tempestivamente i problemi.
- Prendi in considerazione l'utilizzo di una pipeline CI/CD per test e distribuzione automatizzati.
- Effettua regolarmente il backup dell'applicazione e del database.
Conclusione
La distribuzione di applicazioni .NET Core su server Linux apre un mondo di possibilità per gli sviluppatori abituati agli ambienti Windows. Seguendo questa guida è possibile sfruttare la potenza di Linux per ospitare applicazioni .NET Core robuste, sicure e scalabili.