Teil 2.1 – Erstellen und Konfigurieren von ASP.NET Core-Anwendungen unter Linux

Gilt für:   .NET Core 2.1, .NET Core 3.1, .NET 5

In diesem Artikel wird das Erstellen und Konfigurieren von ASP.NET Core-Anwendungen unter Linux erläutert.

Voraussetzungen

Um den Übungen in diesem Teil folgen zu können, muss ein .NET Core SDK installiert sein. Informationen zum Installieren des SDK finden Sie bei Bedarf in den Installationsanweisungen in Teil 1.

Ziel dieses Teils

Sie erfahren, wie Sie eine ASP.NET Core Webanwendung mithilfe der BEFEHLSZEILEnschnittstelle (CLI) von .NET Core in Linux erstellen und die Anwendung im Verzeichnis "/var" veröffentlichen. Während Sie diese Konzepte erlernen, üben Sie einige grundlegende Aufgaben wie das Arbeiten mit Dateien und Ordnern und das Ausführen von Befehlen als privilegierter Benutzer. Sie erfahren auch, wie Sie Dateien mithilfe des Vi-Text-Editors in Linux bearbeiten.

.NET CLI

Gemäß dieser .NET CLI-Dokumentation ist die .NET CLI eine plattformübergreifende Toolkette zum Entwickeln, Erstellen, Ausführen und Veröffentlichen von .NET-Anwendungen. Die .NET CLI wird zusammen mit dem .NET SDK installiert.

Diese Schulungen verwenden den dotnet Befehl häufig. Dieser Befehl ist leistungsstark und hat zwei Hauptfunktionen:

  • Es stellt Befehle für die Arbeit an .NET-Projekten bereit. Erstellt z. dotnet build B. ein Projekt. Jeder Befehl definiert seine eigenen Optionen und Argumente. Alle Befehle unterstützen die --help Option zum Drucken kurzer Erläuterungen zur Verwendung des Befehls.
  • Es werden .NET-Anwendungen ausgeführt.

Sie verwenden den dotnet new Befehl, um Ihr erstes ASP.NET Core Projekt unter Linux zu erstellen. Dieser Befehl ruft den Typ des Projekts als Argument ab. Die Projekttypen werden in diesem Dokument erläutert. Sie können auch eine Liste von Typen anzeigen, indem Sie ohne Parameter ausführen dotnet new . Webbezogene Projekttypen sind im folgenden Screenshot gelb hervorgehoben.

Screenshot des Befehls "dotnet new".

Erstellen einer .NET Core-Webanwendung mithilfe des SDK

Sie verwenden die .NET CLI, um Ihre erste Webanwendung mithilfe des folgenden Befehls zu erstellen:

dotnet new <template_type> -n <project_name> -o <output_directory>

Diese Regeln gelten, wenn Sie Folgendes verwenden dotnet new:

  • Der Befehl erstellt die Projektdateien im Ausgabeverzeichnis. Wenn Sie das -o <output_directory> Segment weglassen, wird das Projekt im aktuellen Verzeichnis erstellt. Sie können den -o Schalter jederzeit verwenden.
  • Wenn der Ordner nicht vorhanden ist, wird er mit dem Befehl erstellt.
  • Wenn Sie das -n <project_name> Segment weglassen, entspricht der Projektname dem Verzeichnisnamen.

Sie können kreative Namen für das Verzeichnis und projekt selbst finden. Beachten Sie jedoch, dass bei Linux die Groß-/Kleinschreibung beachtet wird. Verwenden Sie für diese Übung den konservativeren AspNetCoreDemo Namen als Projektnamen, und erstellen Sie ihn im firstwebapp Verzeichnis.

Führen Sie zum Erstellen des Projekts den folgenden Befehl aus:

dotnet new webapp -n AspNetCoreDemo -o firstwebapp 

Überprüfen Sie die Ausgabe, um die Verzeichnis- und Projektnamen anzuzeigen. Im folgenden Screenshot wird auch der Inhalt des Ausgabeverzeichnisses aufgelistet. Sie sollten mit der Verzeichnisstruktur vertraut sein, wenn Sie zuvor eine ASP.NET Core-Webanwendung unter Windows erstellt haben.

Screenshot des neuen Dotnet-Befehls für die erste Webapp.

Sie haben Ihre erste Anwendung erstellt. Die nächste Aufgabe wird sein, sie auszuführen. Ändern Sie das Verzeichnis in den Projektordner, und führen Sie dotnet runaus.

Screenshot des Befehls &quot;dotnet run&quot;.

Hinweis

Die folgenden Elemente in diesem Screenshot:

  • Ihre Webanwendung lauscht auf Port 5001 auf HTTPS-Anforderungen und überwacht Port 5000 auf HTTP-Anforderungen.
  • Der Inhaltsstamm befindet sich unter dem Startverzeichnis.

Es wird empfohlen, die Anwendung nicht unter Ihrem Startverzeichnis auszuführen. Sie veröffentlichen es später in einem anderen Verzeichnis, sollten es aber testen, bevor Sie es veröffentlichen. Sie können STRG+C drücken, um die Anwendung zu beenden. Aber vorerst läuft es weiter, und öffnen Sie eine neue Terminalsitzung, indem Sie Ihre bevorzugte Methode verwenden, um eine Verbindung mit Ihrem virtuellen Linux-Computer herzustellen. In diesem Beispiel verwenden Sie PowerShell erneut.

Testen der Website von einem anderen Terminal aus

Vergewissern Sie sich in Ihrer neuen Terminalsitzung, dass Ihre Anwendung die Ports 5000 und 5001 abhört. Linux hat den gleichen netstat Befehl wie Windows. Führen Sie netstat die Ausführung zusammen mit dem -tlp Switch aus. Sie können sich mit den netstat Optionen in diesem Artikel vertraut machen, oder Sie können sich die Hilfedatei ansehen, indem Sie die Datei ausführen man netstat oder info netstat.

Dies ist die Ausgabe des netstat -tlp Befehls aus der zweiten Terminalsitzung. Es zeigt, dass der AspNetCoreDemo-Prozess mithilfe von PID 781 ausgeführt wird und die Ports 5000 und 5001 sowohl für IPv4 als auch für IPv6 lauscht.

Screenshot des Befehls &quot;info netstat&quot;.

Sie können curl und wget verwenden, um Ihre Website zu testen. Beide Befehle führen einen HTTP-Aufruf an die Zielseite durch, verhalten sich jedoch anders:

  • Curl ist einfach ein Befehlszeilenbrowsertool. Es sendet eine HTTP-Anforderung an das angegebene Ziel und zeigt nur die einfache Ausgabe der HTTP-Antwort an. Beispielsweise wird das HTML-Quellmarkup für eine Webanwendung angezeigt.
  • Wget ist ein HTTP-Downloader. Es stellt eine HTTP-Anforderung und lädt die angegebene Ressource herunter. Beispielsweise lädt wget http://server/file.zip file.zip herunter http://server und speichert es im aktuellen Verzeichnis.

Der wget Befehl zeigt uns auch einige weitere Details, z. B. die Umleitung und alle Fehlermeldungen, die Sie möglicherweise erhalten. Daher können Sie es als primitive Version eines HTTP-Ablaufverfolgungstools verwenden, wann immer Sie dies benötigen.

Weitere Informationen zum Unterschied zwischen curl und wgetfinden Sie auf der StackExchange-Webseite.

In dieser Schulungsreihe haben wget Sie zuvor die DEB-Paket-Manager-Datei von Microsoft-Servern heruntergeladen, bevor Sie .NET Core installiert haben.

Wenn Sie ausführen curl http://localhost, geschieht nichts. Dies bedeutet höchstwahrscheinlich, dass keine HTTP-Antwort vorhanden ist. Sie können dann ausführen wget http://localhost , um zu überprüfen, ob weitere Informationen angezeigt werden, wenn Sie versuchen, auf die Website zuzugreifen.

Screenshot des Befehls &quot;curl localhost&quot;.

Dies geschieht jetzt:

  • Sie stellen eine HTTP-Anforderung an http://localhost:5000und stellen eine erfolgreiche Verbindung her. Dies bedeutet, dass die Anwendung die Verbindungen an Port 5000 akzeptiert.
  • Sie erhalten eine HTTP 307 Temporary Redirect-Antwort von der Anwendung, die auf einen sicheren HTTPS-Speicherort verweist: https://locahost:5001.
  • Wget ist intelligent genug, um dieser Umleitung zu folgen und eine neue Anforderung an zu https://localhost:5001stellen.
  • Sie stellen erneut eine erfolgreiche Verbindung her. wget Das SSL-Zertifikat wird jedoch nicht als vertrauenswürdig bezeichnet. Daher schlägt die Verbindung fehl.

Der wget Befehl empfiehlt, dieses Problem zu umgehen, indem Sie die --no-check-certificate Option verwenden, um eine unsichere Verbindung herzustellen. Dieser Ansatz umfasst jedoch SSL-Zertifikateinstellungen, die für diese Schulung außerhalb des Gültigkeitsbereichs liegen. Stattdessen können Sie Ihre ASP.NET Core-Anwendung so konfigurieren, dass die HTTP-Anforderungen nicht an HTTPS umgeleitet werden. Wenn Sie mit ASP.NET Core Anwendungsentwicklung (oder nur der Konfiguration) vertraut sind, wissen Sie möglicherweise bereits, wie Sie dies tun: Bearbeiten Sie die Datei "Startup.cs", um die Umleitungskonfiguration zu entfernen.

Bearbeiten von Dateien mithilfe von vi

Sie können den vi-Text-Editor für Linux-Distributionen verwenden, um alle Arten von Nur-Text-Dateien zu bearbeiten. Sie verwenden es in dieser Schulung, um Ihre Anwendung neu zu konfigurieren.

Sie müssen Ihre Anwendung schließen, bevor Sie sie bearbeiten können. Schließen Sie zuerst die geöffnete Terminalsitzung. Drücken Sie dann STRG+C , um die Anwendung zu beenden.

Führen Sie zum Bearbeiten der Datei "Startup.cs " den folgenden Befehl aus:

vi ~/firstwebapp/Startup.cs

Hinweis

Dieser Befehl startet den vi-Editor und lädt dann die Datei. Die ~-Verknüpfung (Tilde) bezieht sich auf Ihr Startverzeichnis, in dem Sie Ihr Projekt erstellt haben. Das heißt, der Befehl verweist auf "/home/<YourName>/firstwebapp/Startup.cs".

Drücken Sie die I-Taste (Einfügen), um den Bearbeitungsmodus zu aktivieren. Am unteren Rand der Befehlszeile sollte nun "-- INSERT " angezeigt werden. Verwenden Sie die Pfeiltasten, um in der Datei zu navigieren. Kommentieren Sie die app.UseHsTs()Zeilen ; und app.UseHttpsRedirection(); aus, indem Sie // sie am Anfang hinzufügen, wie im folgenden Screenshot gezeigt.

Screenshot des Kommentars im Code.

Drücken Sie ESC , um den Bearbeitungsmodus zu beenden, geben Sie :wq! ein, und drücken Sie dann die EINGABETASTE. Beachten Sie, dass das Doppelpunktzeichen (:) bedeutet, dass Sie einen Befehl eingeben, w schreiben, q beenden bedeutet und ! das Schreiben erzwingt.

Screenshot von wq-Text im Code.

Nachdem Sie die EINGABETASTE gedrückt haben, sollten die Änderungen gespeichert werden. Sie können die Änderungen überprüfen, indem Sie .cat ~/firstwebapp/Startup.cs Mit diesem Befehl wird der Inhalt der Datei "Startup.cs " angezeigt.

Starten Sie die Anwendung neu. Ändern Sie dazu das aktuelle Verzeichnis in das ~/firstwebapp Verzeichnis, und führen Sie dotnet erneut aus. Öffnen Sie dann eine weitere Terminalsitzung auf dem Server, und führen Sie den curl http://localhost:5000 Befehl erneut aus. Dieses Mal sollte der Befehl den HTML-Inhalt der Startseite zurückgeben.

Screenshot von curl localhost bei 5000 Portbefehl.

Sie haben nun Ihre erste ASP.NET Core Web App unter Linux erfolgreich ausgeführt.

Bereitstellen der Anwendung im Verzeichnis /var

Das primäre Ziel dieser Übung besteht darin, Ihre Webanwendung hinter einem Reverseproxy zu hosten, sodass Verbindungsclients von einem anderen Computer aus nur mithilfe des Hostnamens ohne Portnummer auf die Anwendung zugreifen können. Dies ist es, was Sie in realen Szenarien erwarten würden. Sie arbeiten später mit Nginx zusammen, um diese Aufgabe abzuschließen. Aber bevor Sie dies tun, veröffentlichen Sie Ihre Anwendung im Verzeichnis /var . Dies liegt daran, dass wir empfehlen, die Anwendung nicht im Startverzeichnis eines Benutzers auszuführen.

Denken Sie daran, dass das Verzeichnis "/var " zum Speichern von Inhalten und Protokolldateien von verschiedenen Anwendungen wie Apache und Nginx verwendet wird. Sie folgen dieser Vorgehensweise hier, indem Sie die neu erstellte Webanwendung in /var veröffentlichen.

Wechseln Sie zum Projektordner, und führen Sie dotnet publish den Vorgang aus, um einen Veröffentlichungsordner zu erstellen. Kopieren Sie diesen Ordner in das Verzeichnis "/var".

Screenshot des Dotnet-Veröffentlichungsbefehls.

Der Screenshot zeigt, dass der dotnet publish Befehl Veröffentlichungsdateien im Ordner "~/firstwebapp/bin/Debug/net5.0/publish/" erstellt hat. Anschließend wurde der folgende Befehl verwendet, um alle Dateien in den Ordner "/var/firstwebapp/" zu kopieren:

sudo cp -a ~/firstwebapp/bin/Debug/net5.0/publish/ /var/firstwebapp/

Hinweis

Beachten Sie die Verwendung vor sudo dem Kopierbefehl. Sie verwenden dies, da Standardbenutzer nicht über Schreibberechtigungen für das Verzeichnis "/var " verfügen. Daher müssen Sie den Befehl als Superuser ausführen.

Führen Sie den folgenden Befehl aus, um Ihre Anwendung aus einem veröffentlichten Ordner auszuführen:

dotnet /var/firstwebapp/AspNetCoreDemo.dll

Wenn Sie möchten, können Sie diese Tests mit den gleichen curl Befehlen und wget Befehlen ausführen. Dies liegt daran, dass die Anwendung weiterhin auf Port 5000 auf HTTP-Anforderungen lauscht.

Lebensdauer des Prozesses und nächste Schritte

Wenn die Anwendung eine konstante Betriebszeit erfordert, ist die Ausführung der .NET Core-Anwendung innerhalb einer interaktiven Benutzersitzung aus den folgenden Gründen keine bewährte Methode:

  • Wenn Benutzer ihre Sitzungen beenden würden, z. B. puTTY oder den PowerShell SSH-Client schließen oder die Sitzung beenden würden, würde die Anwendung heruntergefahren.
  • Wenn der Prozess aus irgendeinem Grund beendet wird (z. B. stürzt der Prozess aufgrund einer unbehandelten Ausnahme ab), wird er nicht automatisch gestartet und muss manuell neu gestartet werden.
  • Wenn der Server neu gestartet wird, wird die Anwendung nicht automatisch gestartet.

Nächste Schritte

Teil 2.2 – Installieren von Nginx und Konfigurieren als Reverseproxyserver

Stellen Sie sicher, dass die Webanwendung automatisch gestartet wird. Installieren und konfigurieren Sie Nginx als Reverseproxy, um HTTP-Anforderungen weiterzuleiten, die stattdessen an Port 80 an die Dotnet-Anwendung gesendet werden (damit Clients eine Verbindung herstellen können, ohne die Portnummer angeben zu müssen).

Informationen zum Haftungsausschluss von Drittanbietern

Die in diesem Artikel genannten Drittanbieterprodukte stammen von Herstellern, die von Microsoft unabhängig sind. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.