Umgebung
Meine lokale Entwicklungsumgebung ist ein Windows 10-PC, der Visual Studio 2017 verwendet.
HINWEIS: Im Moment kann ich nur über cpanel auf meinen Webserver zugreifen. Wenn der Hosting-Anbieter jedoch keine angemessene Unterstützung für eine ASP.NET Core 2.0-App bereitstellen kann, werde ich auf einen dedizierten Server wechseln, auf dem ich vollen Zugriff auf den Server und IIS habe.
Meine Anforderung / Projekt
Ich habe eine ASP.NET-Webanwendung entwickelt, die auf das Framework .NET Core 2.0 abzielt, und die App funktioniert gut mit localhost und IIS express.
Jetzt, da die App fertiggestellt ist, muss ich bereitstellen und hosten, was sich wie eine entmutigende Aufgabe anfühlt, die meinem Alter innerhalb von Tagen und Wochen Jahre hinzufügt.
Ich habe über Benutzer gelesen, die durch eine Vielzahl von Artikeln, Blogs, MS-Dokumenten, Stackoverflow usw. gewatet sind und versuchen (oft erfolglos), sowohl im Intranet als auch im Internet zu agieren. Jetzt habe ich das Gefühl, dass das Publizieren und Deployment mit .net core wie eine totale Verwirrung aussieht.
Meine aktuelle Website wurde von einer externen Partei entwickelt - eine Wordpress-Seite mit PHP. Ich möchte diese Site durch meine ASP.NET Core2.0-Webanwendung ersetzen.
Die Wurzel meiner aktuellen Site ist "httpdocs", wo ich einige Unterordner mit Bilddateien habe, die ich aus anderen Apps referenzieren muss. Ich bin mir nicht sicher, ob diese beibehalten werden können oder ob ich sie in einen neuen Ordner migrieren muss, in dem sich die ASP.NET-Webanwendung befindet. Ich habe keinen Zugriff auf den Server direkt, ich kann nur über cpanel zugreifen.
Die App benötigt https, und unten habe ich meine Dateien Startup.cs und Program.cs aufgenommen.
Ich habe die Schritte und Überlegungen beschrieben, die meiner Meinung nach an der Bereitstellung und dem Hosting beteiligt sind. Kann jemand, der vorher Erfahrung damit hatte, bitte mit meinen Fragen helfen, oder mir Ratschläge geben von allem, was ich vermisse oder andere Dinge, die ich ansprechen sollte?
Startup.cs
%Vor%Programm.cs
%Vor%UseIISIntegration () teilt ASP.NET mit, dass IIS als Reverse-Proxy vor Kestrel arbeiten wird. Dies legt auch einige Einstellungen fest, um welchen Port Kestrel zuhören soll, Weiterleitungen und andere Details. UseKestrel () registriert die IServer-Schnittstelle für Kestrel als den Server, der zum Hosten der Anwendung verwendet wird.
Ich bin mir sicher, wenn ich hier etwas ändern muss, oder benutze einfach die Optionen für Gehörlosigkeit.
Ich habe gelesen: Microsoft empfiehlt, IIS mit jeder öffentlichen Seite für ASP.NET-Core-Hosting zu verwenden. IIS bietet zusätzliche Konfigurationsmöglichkeiten, Verwaltung, Sicherheit, Protokollierung und viele andere Dinge. Einer der großen Vorteile bei der Verwendung von IIS ist das Prozessmanagement. IIS startet Ihre App automatisch und startet sie möglicherweise neu, wenn ein Absturz auftritt. Wenn Sie Ihre ASP.NET Core-App als Windows-Dienst oder als Konsolenanwendung ausführen, verfügen Sie nicht über das Sicherheitsnetz, um den Prozess für Sie zu starten und zu überwachen.
launchSettings.json
Muss ich vor dem Veröffentlichen den Inhalt dieser Datei ändern? Oder wird das automatisch geändert, wenn die App in einem Ordner veröffentlicht wird? Muss ich zum Beispiel die Umgebung zu "Produktion" oder die Anwendungs-URL zu meiner Website-Domain ändern?
%Vor%web.config (für ASP.NET Core)
Die Datei web.config sollte definieren, wie IIS meinen ASP.NET Core-Prozess startet. Zum Beispiel möchte ich die Ausgabeprotokollierung aktivieren, indem ich stdoutLogEnabled = true festlege, und ich möchte möglicherweise auch den Speicherort der Protokollausgabe ändern, wie in stdoutLogFile konfiguriert.
Die IIS-Konfiguration wird durch den Abschnitt von web.config für die IIS-Funktionen beeinflusst, die für eine Reverse-Proxy-Konfiguration gelten.
In meinem ASP.NET Core2-Projekt gibt es derzeit keine Datei "web.config". Wird diese Datei angezeigt, wenn ich meine App veröffentliche?
In einem Ordner veröffentlichen
Beim Bereitstellen aus Visual Studio wird der Schritt zum Veröffentlichen von dotnet automatisch ausgeführt, bevor die Dateien in das Bereitstellungsziel kopiert werden.
Der Veröffentlichungsordner enthält EXE- und DLL-Dateien für die App, ihre Abhängigkeiten und optional die .NET-Laufzeitumgebung. Der Veröffentlichungsordner für eine ASP.NET Core-App enthält neben EXE- und DLL-Dateien in der Regel Konfigurationsdateien, statische Assets und MVC-Ansichten.
Eine .NET Core App kann als eigenständige oder Framework-abhängige App veröffentlicht werden. Wenn die App eigenständig ist, sind die DLL-Dateien, die die .NET-Laufzeit enthalten, im Veröffentlichungsordner enthalten. Wenn die Anwendung Framework-abhängig ist, sind die .NET-Laufzeitdateien nicht enthalten, da die Anwendung einen Verweis auf eine .NET-Version enthält, die auf dem Server installiert ist.
Da ich für IIS auf Windows-Server installiere, sollte ich das Standardbereitstellungsmodell verwenden, das Framework-abhängig ist.
Prozessmanager
Eine ASP.NET Core-App ist eine Konsolenanwendung, die gestartet werden muss, wenn ein Server gestartet und neu gestartet wird, wenn er abstürzt.Um Starts und Neustarts zu automatisieren, ist ein Prozessmanager erforderlich. Ich weiß, ich könnte Apache unter Linux verwenden, aber in diesem Fall muss ich IIS verwenden, da meine aktuelle Site ein Windows-Server ist.
Einrichten eines Reverse-Proxys
Ein Szenario, das einen Reverse-Proxy erfordert, ist, wenn mehrere Anwendungen dieselbe IP-Adresse und denselben Port verwenden, die auf einem einzelnen Server ausgeführt werden. Das funktioniert nicht direkt mit Kestrel, da Kestrel die gemeinsame Nutzung der gleichen IP und des gleichen Ports zwischen mehreren Prozessen nicht unterstützt. Wenn Sie Kestrel so konfigurieren, dass es auf einen Port wartet, verarbeitet es den gesamten Datenverkehr für diesen Port unabhängig von der Host-Kopfzeile. Ein Reverse-Proxy, der Ports teilen kann, muss dann an Kestrel eine eindeutige IP und Port weiterleiten.
Laut MS gibt es andere Gründe für die Verwendung eines Reverse-Proxy-Servers. Zum Beispiel vereinfacht es Load-Balancing und SSL-Setup. Nur Ihr Reverse-Proxy-Server benötigt ein SSL-Zertifikat, und dieser Server kann mit Ihren Anwendungsservern im internen Netzwerk unter Verwendung von HTTP kommunizieren.
Installieren Sie das .NET Core Windows Server-Hostingpaket
Ich habe gelesen, dass ich vor der Bereitstellung meiner Anwendung das .NET Core-Hosting-Paket für IIS auf dem Host-Computer installieren muss. Dadurch werden die .NET Core-Laufzeit, Bibliotheken und das ASP.NET Core-Modul für IIS installiert. Nach der Installation müssen Sie möglicherweise einen "net stop was / y" und "net start w3svc" ausführen, um sicherzustellen, dass alle Änderungen für IIS übernommen werden.
Ich kann nur über cpanel auf meinen Webserver zugreifen, also denke ich, dass mein Hosting-Provider dies tun muss.
SSL-Zertifikat
Da ich https verwende, glaube ich, dass ich ein SSL-Zertifikat kaufen und es in IIS installieren muss.
IIS Setup - Erstellen Sie eine Anwendung in IIS
Ich kann nur über cpanel auf meinen Webserver zugreifen, also denke ich, dass dies auch von meinem Hosting-Provider erledigt werden muss.
Ich habe mir Nginx angesehen, konnte aber nicht die Unterstützung bekommen, die ich brauchte, und ich habe keine Erfahrung mit Linux.
Endlich habe ich mein Hosting auf einen neuen Provider umgestellt (Shared Hosting auf einem VPS), aber es war immer noch ein Albtraum, gute Unterstützung zu bekommen.
Wie sich herausstellte, musste ich an der Datei launchSettings.json keine Änderungen vornehmen.
Meine web.config -Datei endete folgendermaßen:
%Vor%Meine .csproj -Datei lautet wie folgt:
%Vor%Tags und Links asp.net-mvc .net c# asp.net iis