Sei sulla pagina 1di 2

Deploy di applicazioni ASP.

NET Core in ambiente Linux


Il presente documento illustra la procedura per la configurazione e impostazione di un ambiente di
produzione ASP.NET Core su un server GNU/Linux (CentOS).

In particolare viene descritto come installare un’applicazione ASP.NET Core esistente dietro un reverse –
proxy server e come impostare tale server in modo che inoltri le richieste al web server Kestrel
dell’applicazione.

Inoltre viene spiegato come assicurare l’avvio dell’applicazione, come servizio (daemon), allo startup e
configurare uno strumento di gestione del processo utile al riavvio dell’applicazione in caso di crash in
modo da garantirne l’alta disponibilità (high availability).

Prerequisiti
1. Accesso ad un server CentOS con utente standard con privilegi sudo
2. Framework .NET installato sul server CentOS
3. Un’applicazione ASP.NET Core esistente

Copia dell’applicazione
Lanciare il comando dotnet publish dall’ambiente di sviluppo per pubblicare l’applicazione in una
directory di cui si possa poi fare il deploy su server.

Prima di procedere copiare l’applicazione ASP.NET Core sul server. Provare ad avviare l’applicazione e
navigare all’indirizzo http://<indirizzo-server>:<porta> con il browser per verificare se
l’applicazione funziona correttamente in ambiente Linux.

Configurazione di un reverse – proxy server


Un reverse – proxy è un settaggio comune utile a servire applicazioni web dinamiche. Il reverse proxy
termina le richieste http e le inoltra all’applicazione ASP.NET Core.

La procedura qui descritta utilizza una singola istanza di Nginx installata sulla stessa macchina dov’è
installato il server http.

Installazione di Nginx
Il processo di installazione di Nginx dovrebbe terminare con la creazione (automatica) di uno script di
inizializzazione che avvii Nginx come daemon allo startup del sistema.

Configurazione di Nginx
A questo punto è necessario creare un file di configurazione per Nginx che inoltri tutto il traffico in entrata
sulla porta 80 del server alla porta 5000 (default) sulla quale è in ascolto l’applicazione web.

Di seguito un esempio di file di configurazione:


server {
listen 80;
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;
}
}
Una volta completata la modifica della configurazione di Nginx è possibile lanciare il comando nginx -t
per verificare la sintassi del file di configurazione; se il test ha successo si possono rendere effettive le
modifiche lanciando il comando nginx -s reload.

Monitoraggio dell’applicazione
Nginx è ora impostato per inoltrare le richieste, fatte all’indirizzo http://localhost:80, all’applicazione
ASP.NET Core avviata su Kestrel all’indirizzo http://127.0.0.1:5000.

Creazione del servizio


Allo stato attuale Nginx non è ancora impostato per gestire il processo Kestrel. Per far in modo che Nginx
possa far partire, fermare e monitorare l’applicazione è necessario creare un service file per il sistema di
inizializzazione systemd.

Di seguito un esempio di service file:


[Unit]
Description=Example .NET Web API Application running on CentOS

[Service]
WorkingDirectory=/var/aspnetcore/hellomvc
ExecStart=/usr/bin/dotnet /var/aspnetcore/hellomvc/hellomvc.dll
Restart=always
RestartSec=10 #Riavvia il servizio dopo 10 sec se dotnet va in crash
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production

[Install]
WantedBy=multi-user.target

Dopo aver salvato il file nella cartella /etc/systemd/system/ è necessario abilitare il servizio con il
comando systemctl enable nomefile.service ed avviarlo con il comando systemctl start
nomefile.service.

Per verificare che il servizio è attivo è possibile lanciare il comando systemctl status
nomefile.service.

Con il reverse – proxy configurato e Kestrel gestito attraverso systemd, l’applicazione web è
completamente configurata e raggiungibile da un browser sulla macchina locale all’indirizzo
http://localhost.