Guida completa: ASP.NET su Apache (Linux)

Tutorial passo-passo su come fare hosting di un sito web in ASP.NET su un sistema Linux con Apache.

Prerequisiti

  • Il tuo utente ha privilegi sudo
  • Hai installato Apache

Installiamo dotnet

Installiamo dotnet seguendo la pagina ufficiale microsoft.
Iniziamo scaricando l’installer per l’ASP.NET Core Runtime.

wget https://packages.microsoft.com/config/debian/11/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
sudo dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
sudo apt-get update

Grazie a questi 4 comandi, possiamo usare apt per installare i pacchetti necessari.

Procediamo ad installare l’SDK e il runtime per .NET 7.0:

sudo apt-get install -y dotnet-sdk-7.0
sudo apt-get install -y aspnetcore-runtime-7.0

Creiamo un nuovo progetto

Creiamo un nuovo progetto dotnet in una cartella dell’utente, ad esempio /home/timothy/myNewApp

cd /home/timothy
mkdir myNewApp
cd myNewApp

All’interno di questa cartella andremo a creare un nuovo progetto asp.net:

dotnet new webapp

Con questo semplice comando abbiamo creato un nuovo sito web in dotnet. Puoi vederne il contenuto usando il comando dir.

Adesso puoi già attivare il tuo sito con il comando dotnet run. Puoi anche specificare un url da cui accedere al tuo sito se non vuoi localhost. Per questo tutorial sto usando una macchina virtuale, quindi userò il parametro url come ip della macchina:

dotnet run --urls=http://192.168.1.68:5000/

Apri un browser e visita l’indirizzo 192.168.1.68:5000 e vedrai il nostro nuovo sito web:

Pubblichiamo il sito

Adesso siamo pronti per creare i file di pubblicazione del nostro sito. Si tratta di un semplice comando:

dotnet publish --configuration Release

Adesso troviamo i nostri file in /home/timothy/myNewApp/bin/Release/net7.0/publish.

Configuriamo Apache

Adesso andiamo a modificare le impostazioni del vhost principale di Apache. Andremo a configurare un proxy che “gira” le richieste della porta 80 di Apache alla porta 5000 di dotnet. Iniziamo abilitando i moduli necessari:

sudo a2enmod headers
sudo a2enmod proxy
sudo a2enmod proxy_http

Modifichiamo quindi il file /etc/apache2/sites-available/000-default.conf e impostiamo il contenuto:

<VirtualHost *:*>
        RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}
</VirtualHost>

<VirtualHost *:80>
        ProxyPreserveHost On
        ProxyPass / http://127.0.0.1:5000/
        ProxyPassReverse / http://127.0.0.1:5000/
        ServerName 192.168.1.68
        ErrorLog /var/log/apache2/error.log
        CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Crea le cartelle per ospitare il progetto /var/www/myNewApp/public_html e riavvia apache:

sudo systemctl restart apache2

Connettendoti al web server dal browser dovresti adesso ricevere un errore 503 di Service Unavailable. Questo è perché apache sta tentando di comunicare con il servizio dotnet sulla porta 5000 che ancora non abbiamo attivato.

Copiamo il contenuto di /home/timothy/myNewApp/bin/Release/net7.0/publish in /var/www/myNewApp/public_html

sudo rsync -r /home/timothy/myNewApp/bin/Release/net7.0/publish/* /var/www/myNewApp/public_html

Configuriamo il servizio dotnet

Per creare il nuovo servizio, creiamo un nuovo file in /etc/systemd/system contenente i comandi del servizio, ed eseguiamolo.

cd /etc/systemd/system
sudo nano kestrel-myNewApp.service

E in questo nuovo file inseriamo queste istruzioni (in grassetto ciò che devi modificare):

[Unit]
Description=.NET Core App running on ${distribution}
[Service]
WorkingDirectory=/var/www/myNewApp/public_html
ExecStart=/usr/bin/dotnet /var/www/myNewApp/public_html/myNewApp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-myNewApp-app
User=timothy
Environment=ASPNETCORE_ENVIRONMENT=Production 
[Install]
WantedBy=multi-user.target

E verifichiamo l’esito con il comando sudo systemctl status kestrel-myNewApp che dovrebbe essere Loaded e Inactive. Procediamo quindi ad abilitare il servizio:

sudo systemctl enable kestrel-myNewApp
sudo systemctl restart kestrel-myNewApp

E verifica lo stato con il comando sudo systemctl status kestrel-myNewApp. Potrebbe volerci circa un minuto prima che il servizio si sia effettivamente attivato.

Completato

Adesso il tuo server apache su debian 11 sta ospitando un sito web asp.net

Consiglio questa ottima guida su Youtube: https://youtu.be/mBhT_MRwGYE. Si tratta di un video vecchio, del 2019, alcune cose sono cambiate e per questo le ho corrette in questo tutorial aggiornato al 2023. Ma la base rimane valida.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *