Letztens mal wieder zur Demo ein ASP.NET core Projekt deployed. Weil es so leicht geht schnell nach Azure. Monat später 30€ auf der Rechnung für nichts. Um dagegen auf den Hauseigenen IIS 10 zu deployen ist nichts mit klick klick. Eine kurze Anleitung wie man auf den IIS eine Website verteilen kann.
Bisher nutzten wir intern immer FTP für die Aktualisierung von Websites. Allerdings hat Visual Studio schön länger Bugs und vor allem kann man eine Blazor oder ASP.NET Core Anwendung nicht mehr direkt per push rüberschieben, weil die benötigten DLLs exklusiv im Ram hängen und nicht einfach ausgetauscht werden können. Dazu gleich mehr.
Web Server Microsoft Web Deploy
Im ersten Schritt muss WebDeploy installiert auf dem Windows Server nachinstalliert werden. Neben der Version 3.6 gibt es reichlich versteckt zum Download eine Version 4. Die Basistechnologie stammt aus ca 2013 und die 4er Version ist nur ein Update für .NET 4.
In meinem Fall war dann der Deployment Handler nicht installiert. Visual Studio versucht auf Port 8172 msdeploy.axd aufzurufen. Dieser Handler muss eben installiert sein. Dazu in der Systemsteuerung –Programme die Einstellungen von Webdeploy ändern.
Ein guter Webserver lässt nichts durch außer Port 80 und 443 oder eben nun auch 8172. Also die Firewall checken ob der Port frei gegeben ist und ggf ergänzen.
Auf der Website im der IIS Management Console – rechtsklick –Bereitstellen- Web Deploy. Ich musste den Server von Web auf den FQDN ändern.
Nach dem Bestätigen des Setup Buttons kann man sich die Konfigurationsdatei runterladen und später in Visual Studio importieren. Spart ungefähr 10 Sekunden Zeit.
Veröffentlichen für "WEB\Administrator" aktiviert
"WEB\Administrator" wurde Vollzugriff für "c:\inetpub\content_ppedv_de" gewährt.
Einstellungsdatei "C:\Users\Administrator\Desktop\WEB_Administrator_studios.ppedv.de.PublishSettings" wurde erfolgreich erstellt.
Das Visual Studio ASP.NET Core Projekt
In einem beliebigen Projekt wird die Option veröffentlichen gewählt. Nicht der 2 Klick Azure Weg
Webserver IIS entspricht der Web Deploy Methode oder man importiert die Settings mit der letzten Option.
Bevor sie speichern wählen sie die Option bearbeiten um die Verbindung zu prüfen und das Passwort dauerhaft zu speichern
Die Web Deploy Einstellungen sehen dann im Visual Studio Dialog dann bei mir so aus
Wenns klappt könnt ihr dann auf Veröffentlichen drücken
Ich bin mir aber sicher Web Deploy (oder auch die FTP Variante) werfen in Visual Studio beim Upload einen Fehler 550 das irgendwas der Website nicht hinzugefügt werden kann.
Wie vorhin erwähnt sind die DLLs im exklusiven Lock des IIS Web Prozesses. Man könnte den App-Pool stoppen oder eine Datei app_offline.htm im Web Root platzieren. Diese Option hat der IIS unglaublich aber wahr, seit fast 20 Jahren. Nun sollte Visual Studio so nett sein und zuerst diese app_offline Datei erstellen und am Ende des Deployment Projekte zu löschen. Da haben wir aber die Rechnung ohne die Redmonder Azure Jünger gemacht, Bei FTP gibt es diese Option meines Wissens nach gar nicht (mehr) und bei Webdeploy muss man sie auf XML Ebene aktivieren.
Die Settings werden im Projektverzeichnis Properties angelegt.
Öffnen Sie die Datei pubxml.und ergänzen den XML Code.
<EnableMSDeployAppOffline>true</EnableMSDeployAppOffline>
Nehmen Sie das Azure.