Montag, 13 Mai 2019 10:17

Wie Sie eine ASP.Core-Web-API mit Ubuntu Server 18.10 veröffentlichen

Artikel bewerten
(0 Stimmen)

Das Veröffentlichen einer ASP.Core-Web-API oder einer ASP.Core-Website auf einem Ubuntu-Server kann eine kleine Hürde für Entwickler sein, die aus der Windows-Ecke kommen. Die meisten ASP-Entwickler stammen von etablierten ASP.MVC und haben nicht immer Erfahrung mit Linux- und Apache-Webservern oder Relay-Proxys. In diesem Artikel werde ich detailliert darauf eingehen, wie eine ASP.Core-Web-API auf einem Ubuntu Server 18.10 und dem Apache-Webserver veröffentlicht wird.

Warum nicht einfach Docker?

Docker ist definitiv der einfachste Weg, eine ASP.Core-Web-API zu veröffentlichen, und ich würde sie auch jedem empfehlen, der bereits Erfahrung mit Docker hat. Das Verfahren zum Veröffentlichen einer Webanwendung ändert sich jedoch häufig auch in den Docker-Repositorys. Sie haben auch keinen direkten Einfluss darauf, welche Webservereinstellungen vorgenommen wurden. Wie sehen die CORS-Einstellungen aus? Wie werden die Verzeichnisrechte usw. festgelegt? Es wird empfohlen, eine Web-API "manuell" auf einem Ubuntu-Server zu veröffentlichen, bevor Sie "vorgefertigte Lösungen" verwenden.

Die Umgebung

Als Server wird Ubuntu Server 18.10 verwendet (die aktuelle Ubuntu-Version). Wir verwenden auch Apache als Webserver, der alle Anfragen an den Kestral-Webserver weiterleitet. Alternativ gibt es im Internet auch Beispiele für die Veröffentlichung einer .Net Core-Webanwendung mit Nginx.

Was behandelt dieser Artikel nicht?

Ein Ubuntu Server 18.10 mit Grundeinstellungen sollte bereits installiert sein. In diesem Artikel werden wir uns nicht mit der Serverinstallation befassen. Ebenso werden wir in diesem Artikel keine eigene Web-API programmieren. Wenn Sie keine ASP.Core-Web-API haben, können Sie ein neues ASP.Core-Projekt als Web-API erstellen. Es gibt bereits ein grundlegendes Framework, das ausreicht, um an diesem Tutorial teilzunehmen.

Teil 1: "Kompilieren" der WebAPI.

Wechseln Sie mit der Befehlszeile zum Projektverzeichnis und verwenden Sie den Befehl "dotnet", um Ihre Webanwendung / Web-API zu kompilieren.

cd MyProject
dotnet publish --configuration Release

Übertragen Sie die DLL-Dateien der Anwendung in einem Verzeichnis Ihrer Wahl auf das Linux-System. In diesem Beispiel wird das Standard-Apache-Verzeichnis / var / www / html als Verzeichnis verwendet. Dann installieren wir Dotnet Core auf dem System.

Installieren Sie Dotnet Core auf Ubuntu Server

wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb

sudo dpkg -i packages-microsoft-prod.deb

sudo add-apt-repository universe
sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install dotnet-sdk-2.2

dotnet --version

Installieren Sie den Apache-Webserver

Apache leitet alle Anfragen über Port 80 oder höher 443 an den Kestral-Server von Net.Core weiter und stellt die Website / Webapp / Web-API bereit. Apache wird wie folgt auf Ubuntu Server 18.10 installiert. Wir installieren auch mod_rewrite

sudo apt install apache2
sudo systemctl status apache2
sudo a2enmod rewrite

Apache Konfiguration

Erstellen Sie eine Konfigurationsdatei für einen virtuellen Host unter /etc/apache2/sites-enabled. In diesem Beispiel geben wir auch direkt an, welche HTTP-Methoden zulässig sind. Passen Sie die Konfiguration hier an, wenn Sie z. B. keine DELETE-Anfragen zulassen wollen. Passen Sie auch die Zugriffskontrolle Zulassen des Ursprungs an. Wenn Sie den Zugriff von einer beliebigen Quelle aus zulassen möchten, können Sie "*" angeben. Stellen Sie sicher, dass Sie unter "Access Conntrol Allow Headers" auch "Authorization" eingeben, wenn Ihre Web-API eine Json Web Token (JWT) -Authentifizierung erfordert. Der folgende Inhalt sollte in die Konfigurationsdatei geschrieben werden:

    RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME}

    ProxyPreserveHost On
    ProxyPass / http://localhost:5000/
    ProxyPassReverse / http://localhost:5000/
    ErrorLog apigateway-error.log
    CustomLog apigateway-access.log common
    Header set Access-Control-Allow-Origin "https://api.example.de"
    Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT",
    Header set Access-Control-Allow-Headers "Accept,Accept-Charset,Accept-Encoding,Accept-Language,Connection,Content-Type,Cookie,DNT,Host,Keep-Alive,Origin,Referer,User-Agent,X-CSRF-Token,X-Requested-With,Authorization"
    Header set Access-Control-Allow-Credentials true

    Order deny,allow
    Allow from all

Diese Konfigurationsdatei leitet alle Anforderungen an Port 80 über Apache von der .Net Core-DLL (localhost: 5000) an den Kestral-Server weiter. Wir erstellen einen Dienst, damit dotnet Core den Kestral-Webserver beim Systemstart automatisch startet:

sudo nano /etc/systemd/system/apigateway.service
[Unit]
Description=API Gateway
After=network.target

[Service]
WorkingDirectory=/var/www/html
ExecStart=/usr/bin/dotnet /var/www/html/apiGateway.dll 5000
Restart=on-failure
RestartSec=10
KillSignal=SIGINT
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false
SyslogIdentifier=dotnet-example
User=www-data

[Install]
WantedBy=multi-user.target
sudo systemctl enable apigateway.service

Datenbankverbindung herstellen

Wenn für Ihre Webanwendung oder Web-API eine Datenbankverbindung erforderlich ist, sollten Sie die Verbindungszeichenfolge auch in appsettings.json angeben.

Jetzt bitte noch SSL!

Die Web-API sollte natürlich über SSL veröffentlicht werden, es sei denn, Sie verwenden die API nur intern in Ihrem eigenen Netzwerk. Dies ist mit dem Certbot sehr einfach zu implementieren. Sie müssen den Namen der Domäne eingeben, über die auf die API zugegriffen werden soll.

sudo add-apt-repository ppa:certbot/certbot
sudo apt install python-certbot-apache
sudo certbot --apache -d example.com -d www.example.com
Gelesen 59 mal Letzte Änderung am Dienstag, 22 Dezember 2020 12:36

Schreibe einen Kommentar

Bitte achten Sie darauf, alle Felder mit einem Stern (*) auszufüllen. HTML-Code ist nicht erlaubt.