Ciao, il mio scopo è quello di avere un ecosistema su docker ma come primo passaggio posso passarvi le istruzioni per arrivare su linux Ubuntu con una app compilate con netcore. Sarebbe poi interessante procedere a qualche test per un deploy su docker.
Su questo punto ho avuto modo di parlare con Mattero Sirri la scorsa settimana e gli ho richiesto di poter avere idmanager compilato in netcore per poter utilizzare a pieno questa piattaforma. Attendo novità su questo punto visto che ha detto che arriverà. A mio parere questo è un passaggio fondamentale (Almeno per le mie esigenze).
Raccolgo comunque di seguito quanto fatto per poter pubblicare manualmente su ubuntu 20.04.
Prima di tutto rispondo a @studiometis: La directory può essere una qualsiasi ( con i dovuti permessi). Ad esempio io ho pubblicato in /var/www/test.
1. Compilazione app
Prima di tutto l’applicazione generata da In.De. deve essere compilata con netcore ma specificando che il target è Linux a 64bit. Ci si posiziona nella directory del compilato e si lancia il comando (applicazione Test):
dotnet publish --os linux -c Release -o pub .\Test.csproj
Questo comando produce nella sottocartella pub
2. Configurazione app
Nella directory è presente un file appsettings.json che determina la porta di ascolto dell’app ed alcune altre impostazioni. Ho dovuto modificare il file impostando un generico http://localhost:1308 rimuovendo l’ip fisso che il compilatore inserice ( che corrisponde all’ip della macchina compilatrice ma che non corrisponde all’ip della macchina server dove rilasceremo l’app). Il contenuto del file risulta essere quindi:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Urls": "http://localhost:1308"
}
3. Copia dei file su server
Il contenuto della cartella pub va copiata sul server attraverso il vostro strumento preferito (winscp, scp, …) nella cartella del web server (esempio: /var/www/test)
4. Esecuzione web server
Ora dalla console bash del web server si può eseguire l’applicazione (nel mio esempio in maniera manuale) portandosi nella cartella dell’applicazione ed eseguendo:
dotnet Test.dll
L’output se tutto ha funzionato bene sarà:
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:1308
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: /var/www/test
Alcune considerazioni finali :
Nella configurazione mostrata il web server risponderà solo sulla porta 1308 dalla macchina server e non a chiamate esterne. Questa configurazione può essere cambiata agendo sul file appsettings.json scrivendo
"Urls": "http://*:1308"
al posto di
"Urls": "http://localhost:1308"
Questa configurazione (rispondere solo in localhost) va bene se davanti all’applicazione netcore si mette un webserver in reverse proxy come ad esempio Nginx.
Nel caso si voglia usare nginx può essere installato tramite apt-get e configurato attraverso il file /etc/nginx/sites-available/default
inserendo
server {
listen 80;
server_name example.com *.example.com;
location / {
proxy_pass http://localhost:1308;
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;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Questa è una configurazione manuale su istanza Ubuntu 20.04 ma come dicevo nel mio primo messaggio mi piacerebbe automatizzare il rilascio (con idmanager) ed una configurazione di base dockerizzata.
Vi va di organizzare una chiacchierata per approfondire il tema e provare a sviluppare degli script / procedure per automatizzare queste procedure ?