.NetCore Linux Web App - studio congiunto

Ciao a tutti, considerando la disponibilità di .net core 6.0 per Foundation e la quantità di applicazioni ad oggi sviluppate con .net 4.0 vorrei provare a convertire delle app esistenti e avviarle in ambiente linux .net core.
Gli obiettivi che mi sono prefissato sono progressivi ovvero:
1- permettere ad una app .net core ( che funziona in ambito windows) di funzionare in ambiente linux
2- trovare un modo per poter deployare gli aggiornamenti in maniera facile e sicura ( ad oggi idmanager non esiste per linux / net core)
3- portare quanto fatto su ambiente docker
4- verificarne la portabilità su cloud (AWS) dockerizzato e managed
5- automatizzare la creazione di nuove istanze con script di creazione della soluzione (app + db)

Abbiamo appena cominciato con gli esperimenti ma mi piacerebbe (se a qualcuno di voi interessa) fare delle sessioni di r&d su questo tema assieme per poter condividere le problematiche e possibili soluzioni.
A qualcuno interessa ?

1 Mi Piace

@martino.vedana mi sembra un’ottima iniziativa e penso che anche a @f.faleschini possa interessare questa cosa, che ne dici Francesco?

Chiedo scusa per il ritardo della risposta ma sono stato molto impegnato ultimamente.

Noi facciamo deployment su linux usando java, il meccanismo di deployment è assolutamente custom e nasce dall’esperienza di upgrade distribuiti che abbiamo sviluppato per un prodotto di edge cloud che contribuiamo a sviluppare (https://nodeweaver.eu/), al momento siamo riusciti a pubblicare anche le app fatte con foundation 22.0, ovvero con tomcat 10 e JDK 17, siccome alla fine della fiera quello ceh si fa è copiare dei file credo che anche net core potrebbe essere facilmente integrato nel nostro sistema di deployment.

Io spero che nell’evento di ottobre risucirò a raccogliere informazioni in più rispetto a quelle che so su .net core.

Al momento noi ci troviamo bene con Tomcat, mi piacerebbe capire quali sono i vantaggi di .NetCore rispetto a Java, un vantaggio che mi viene in mente è che se devo scrivere qualcosa a mano lo posso fare in .Net e funzionerebbe anche su Linux, mentre ora dovrei farlo in .net e java.

Quali sono gli altri vantaggi?

Ciao a tutti,
anche io sto cercando di utilizzare NET6 su linux, ma la mia attuale difficoltà sta nel capire dove appoggiare il contenuto della cartella csharp.
In sostanza se paragono la cartella inetpub di IIS, quale sarebbe il corrispondente in linux?
e come renderla pubblica per l’accesso web.

Seguo…

1 Mi Piace

Ciao,
anche a me interesserebbe.

Seguo…

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 ?

3 Mi Piace