Hello World, Blazor im Container auf Raspberry PI


Das liegt schon etwas her, dass ich damit anfangen wollte ein Blog Eintrag über das Thema Docker zu schreiben.

Die Ursprungsidee ist, dass auf dem Raspberry PI die Webseite gehostet wird und darüber der Text eingegeben wird und später über eine Desktop Anwendung auf dem Raspberry PI wieder gegeben wird auf dem Bildschirm. Doch zunächst muss die Webseite in einem Container gestartet werden mit einem ARM System.

 

Benötigt wird:

  • Raspberry PI 2 oder aktueller
  • RaspbianOS
  • Installation .NET 7 auf RaspbianOS
  • Docker installtion auf Raspbian

 

Beispiel Webseite

Auf dem Raspberry PI soll eine Blazor Web Anwendung gehostet über einen Docker Container gehostet werden.

 

Vorbereitung

Für den Zugriff auf den Raspbian verwende ich Putty und die SSH Verbindung.

 

Docker installieren

Ein Befehl reicht, um die aktuelle Version von Docker zu installieren auf dem Raspberry PI

 sudo curl -fsSL https://get.docker.com | sh  

 

Nach installation kann die Docker version abgefragt werden.

 docker --version   




.NET installieren und prüfen

Mit dem folgenden Befehl wird das .NET installiert auf RaspbianOS und kann einige Minuten dauern. In meinem Fall habe ich .NET 7 installiert und musste die Version nicht direkt eingeben.

 curl -sSL https://dot.net/v1/dotnet-install.sh | bash /dev/stdin --channel STS 

War die Installation erfolgreich, dann sollte das wie im folgenden Bild aussehen.


Damit der befehlt von das Abfragen der Versionsnummer funktioniert, sollte die Pfadauflösung geändert werden.

 echo 'export DOTNET_ROOT=$HOME/.dotnet' >> ~/.bashrc  
 echo 'export PATH=$PATH:$HOME/.dotnet' >> ~/.bashrc  
 source ~/.bashrc  

Die Versionsnummer abfrage sollte ohne "sudo" eingabe funktionieren.

 dotnet --version  

 



Blazor Projekt erstellen

Zum testen kann direkt auf dem Raspberry PI ein Blazor Projekt erstellt werden. Natürlich macht das mehr sinn, sein Projekt auf dem System zu erstellen, wo man selbst auch Programmiert.

 

Da auf dem RaspbianOS kein Visual Studio 2022 habe, kann ich mit Hilfe von .NET das Projekt direkt per Befehl erzeugen. Aber zunächst muss ein Ordner erstellt werden, in der später auch die Dockerfile Datei hinzugefügt wird.

 

Dann anschließend in das Verzeichnis wechseln: cd ExampleBlazorApp


Mit dem erstellen der Blazor WebAssembly Standalone Anwendung, wird wiederum ein Verzeichnis erstellt. 

 dotnet new blazorwasm -o ExampleBlazorProject  

Das erstellen dauert ca. eine halbe Minute. Wurde das erstellen zum ersten mal verwendet, werden am Ende deutlich Mehr Informationen angezeigt als im folgenden Bild.

 

Jetzt noch die Dockerfile erstellen im selben Verzeichnis mit dem Editor 'nano':

 nano Dockerfile 



Inhalt der Dockerfile. Hier ist darauf zu achten, dass die Dockerfile im selben Ordner steckt wie der Projekt Ordner selbst:

 # Build stage  
 FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build  
 WORKDIR /src  
 # Copy the .csproj file and restore the dependencies  
 COPY ["ExampleBlazorProject/ExampleBlazorProject.csproj", "ExampleWebAssembly/"]  
 RUN dotnet restore "ExampleBlazorProject/ExampleBlazorProject.csproj"  
 # Copy the rest of the application code  
 COPY . .  
 WORKDIR "/src/ExampleBlazorProject"  
 RUN dotnet build "ExampleBlazorProject.csproj" -c Release -o /app/build  
 RUN dotnet publish "ExampleBlazorProject.csproj" -c Release -o /app/publish  
 # Final stage  
 FROM nginx:alpine AS final  
 COPY --from=build /app/publish/wwwroot /usr/share/nginx/html  
 EXPOSE 80  
 CMD ["nginx", "-g", "daemon off;"]  

 


Mit STRG + X kann die Anwendung dann beendet werden. Bevor jedoch die Anwendung 'Nano' geschlossen wird, wird abgefragt, ob die Änderung gespeichert werden soll.


Mit Y oder J Taste drücken…



… und anschließend Enter-Taste drücken. Fertig.

 

Nun sollte im Verzeichnis die Datei 'Dockerfile' vorhanden sein.


 

Nun sollte sich das Beispiel Projekt als Docker Container erstellen lassen. Der Name des Container muss komplett klein geschrieben sein.

 sudo docker build -t exampleblazorcontainer .  

Die Ausführung dauert eine weile (5 bis 6 Minuten), da einige Dinge Extrahiert werden und Inhalte geladen werden.



Nun der letzte Schritt, der Zeigt, dass man eine Blazor Anwendung komplett auf Linux erstellen kann.

 sudo docker run -d -p 8081:80 --name myblazorapp exampleblazorcontainer

Wenn alles geklappt hat, sollte über die Docker abfrage dann sichtbar sein, dass der Container läuft.




Schlusssatz

Ich hatte ganz vergessen, dass man seit .NET Core, eine Web Anwendung komplett in Linux aufstellen kann. Und so wie das jetzt ist, finde ich die Lösung mit Blazor sehr gelungen. Der Weg ist selbst nicht intuitiv und musste daher schon einiges Ausprobieren und recherchieren. Hilfreich war natürlich auch ChatGpt, welches sich wieder als sehr gutes Werkzeug macht und Zeit erspart, unzählige veraltete Forum Einträge durch zu lesen.

Eigentlich wollte ich das mit .NET 8. Doch zu diesen Zeitpunkt (20.05.2024) hatte ich noch Probleme mit der Version und hatte mich auch nicht länger beschäftigt.

 

Resourcen

Bereitstellen von .NET-Apps auf ARM-Single-Board-Computern - .NET | Microsoft Learn

ChatGpt

Kommentare

Beliebte Posts aus diesem Blog

Arduino Control (Teil 5) - PWM Signal einlesen

Angular auf dem Raspberry Pi

RC Fahrtenregler für Lego Kettenfahrzeug