Introduzione
Nel panorama dello sviluppo moderno, la versatilità e l’efficienza nella distribuzione delle applicazioni sono fondamentali. Ciò è particolarmente vero quando si lavora con .NET Core, il framework multipiattaforma di Microsoft, che ha visto un'adozione significativa per la creazione di un'ampia gamma di applicazioni. Uno scenario comune prevede l'esecuzione di più applicazioni .NET Core sullo stesso server. Questa guida fornisce una panoramica completa su come eseguire più applicazioni .NET Core affiancate su una singola istanza di Ubuntu senza fare affidamento su Docker, coprendo tutti gli aspetti, dall'installazione alla configurazione e alla distribuzione.
Docker e la containerizzazione offrono modi potenti per isolare e distribuire le applicazioni. Tuttavia, esistono scenari in cui è preferibile eseguire le applicazioni direttamente sul sistema host, sia per semplicità, conservazione delle risorse o requisiti di prestazioni specifici. Questa guida è incentrata su Ubuntu come sistema host, data la sua popolarità e il supporto all'interno dell'ecosistema .NET Core.
Prerequisiti
- Server Ubuntu (18.04 LTS o successivo consigliato)
- Conoscenza di base dell'interfaccia della riga di comando
- Applicazioni .NET Core destinate a versioni diverse (ad esempio, 3.1 e 6.0)
Passaggio 1: installare gli SDK .NET
.NET Core supporta l'installazione affiancata di diverse versioni di runtime, gli SDK per le versioni specifiche di .NET Core a cui sono destinate le applicazioni. Ciò consente lo sviluppo e l'esecuzione di applicazioni per quelle versioni sul tuo server Ubuntu.
Aggiorna l' indice dei pacchetti e installa i pacchetti prerequisiti per garantire che il tuo sistema possa accedere al repository dei pacchetti di Microsoft:
wget https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
sudo apt update
sudo apt install -y apt-transport-https
sudo apt update
Installare gli SDK .NET Core per le versioni richieste dalle applicazioni. Ad esempio, per installare gli SDK .NET Core 3.1, .NET 6 e .NET 8:
sudo apt install -y dotnet-sdk-3.1
sudo apt install -y dotnet-sdk-6.0
sudo apt install -y dotnet-sdk-8.0
Passaggio 2: configura ciascuna applicazione
Per eseguire più applicazioni sullo stesso server, è necessario assicurarsi che siano configurate per l'ascolto su porte diverse per evitare conflitti di porte.
Nella prima applicazione, modifica il file appsettings.json o appsettings.Production.json per specificare una porta univoca:
{
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://localhost:5001"
}
}
}
}
Per la seconda applicazione, modifica la sua configurazione in modo simile per assicurarti che sia in ascolto su una porta diversa, come 5001:
{
"Kestrel": {
"Endpoints": {
"Http": {
"Url": "http://localhost:5000"
}
}
}
}
Passaggio 3: eseguire le applicazioni
Passare alla directory di ogni applicazione e usare il comando dotnet run per avviarle, assicurandosi che siano in esecuzione sulle porte configurate.
dotnet run
In alternativa, per gli ambienti di produzione o se preferisci non utilizzare direttamente il comando dotnet run, pubblica le tue applicazioni per creare una distribuzione autonoma:
Pubblica le applicazioni con i seguenti comandi, adattandole al runtime specifico e ai percorsi dell'applicazione:
dotnet publish -c Release -r ubuntu.20.04-x64 --output /path/to/YourApp
Esegui le applicazioni pubblicate direttamente dalle relative directory di pubblicazione.
Passaggio 4: utilizzo di un proxy inverso (facoltativo)
In un ambiente di produzione o per semplificare le configurazioni di rete, potresti scegliere di utilizzare un proxy inverso come Nginx o Apache. Questa configurazione consente di instradare il traffico all'applicazione corretta in base ai percorsi URL o ai nomi di dominio, anche se le applicazioni sono in ascolto su porte diverse localmente.
Passaggio 5: configurazione dei servizi di sistema (facoltativo)
Per garantire che le tue applicazioni vengano eseguite come servizi e si avviino automaticamente all'avvio, puoi creare file di servizio systemd per ciascuna applicazione. Ecco un esempio per un'applicazione .NET:
Crea un file di servizio in /etc/systemd/system/yourapp.service :
[Unit]
Description=.NET Web Application
[Service]
WorkingDirectory=/path/to/app
ExecStart=/usr/bin/dotnet /path/to/app/YourApp.dll
Restart=always
RestartSec=10
SyslogIdentifier=dotnet-yourapp
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
[Install]
WantedBy=multi-user.target
Ricaricare il servizio demone di sistema:
sudo systemctl daemon-reload
Abilita e avvia il servizio:
sudo systemctl enable yourapp.service
sudo systemctl start yourapp.service
Ripeti la procedura per ogni applicazione, assicurandoti di utilizzare nomi di servizio univoci e percorsi corretti.
Conclusione
L'esecuzione di più applicazioni .NET Core affiancate su una singola istanza di Ubuntu è un processo semplice che può essere ottenuto senza Docker o la containerizzazione. Gestendo attentamente le installazioni SDK, configurando le porte delle applicazioni e, facoltativamente, configurando proxy inversi e servizi di sistema, è possibile distribuire e gestire in modo efficiente più applicazioni .NET Core. Questo approccio offre flessibilità nelle strategie di sviluppo e distribuzione, soddisfacendo una varietà di scenari e requisiti di prestazioni.