ASP.Core Web API mit Ubuntu Server 18.10 veröffentlichen

asp-core-web-api-mit-ubuntu-server-18-10-veroeffentlichen

Eine ASP.Core Web API oder ASP.Core Website auf einem Ubuntu Server zu veröffentlichen kann für Entwickler, welche aus der Windows Ecke kommen eine kleine Hürde darstellen. Die meisten ASP-Entwickler kommen von etablierten ASP.MVC und haben nicht immer Erfahrung mit Linux und Apache Webservern oder Relay-Proxys. In diesem Artikel werde ich ausführlich darauf eingehen, wie man eine ASP.Core Web API auf einem Ubuntu Server 18.10 und dem Apache Webserver veröffentlicht.

Werbung

Warum nicht einfach Docker?

Docker ist auf jeden Fall die einfachste Methode um eine ASP.Core Web API zu veröffentlichen und würde ich auch für jeden empfehlen, der bereits Erfahrungen mit Docker hat. Aber auch in den Docker Repositorys ändert sich oft die Vorgehensweise, wie eine Webapplikation veröffentlicht wird. Ebenso haben Sie nicht direkt Einfluss darauf, welche Webserver Einstellungen vorgenommen wurden. Wie sehen die CORS Einstellungen aus? Wie sind die Verzeichnisrechte eingestellt usw. Es ist durchaus ratsam selbst einmal eine Web API „manuell“ auf einem Ubuntu Server zu veröffentlichen, bevor man auf „Vorgefertigte Lösungen“ zurückgreift.

Die Umgebung

Als Server wird Ubuntu Server 18.10 verwendet (Die aktuelle Ubuntu Version). Ebenso verwenden wir als Webserver den Apache welcher alle Anfragen an den Kestral Webserver weiterreicht. Alternativ gibt es auch im Internet Beispiele wie man eine .Net Core Webapplikation mit Nginx veröffentlicht.

Was deckt dieser Artikel nicht ab?

Ein mit Grundeinstellungen installierten Ubuntu Server 18.10 sollten Sie bereits installiert. In diesem Artikel werden wir uns nicht um die Server Installation kümmern. Ebenso werden wir in diesem Artikel keine eigene Web API Programmieren. Sofern Sie keine ASP.Core Web API haben, können Sie ein Neues ASP.Core Projekt als Web API erstellen. Darin befindet sich bereits ein Grundgerüst welches genug, um dieses Tutorial mitzumachen.

Teil 1: Die WebAPI „kompilieren“.

Springen Sie mit der Kommandozeile in das Projektverzeichnis und verwenden Sie den „dotnet“ Befehl um Ihre Webapplikation / Web API zu kompilieren.

cd MeinProjekt
dotnet publish --configuration Release

Transferieren Sie die DLL Dateien der Applikation auf das Linux System in ein Verzeichnis Ihrer Wahl. In diesem Beispiel wird als Verzeichnis das Standard Apache Verzeichnis /var/www/html verwendet. Danach installieren wir Dotnet Core auf dem System.

Dotnet Core auf Ubuntu Server installieren

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

Apache Webserver installieren

Apache wird alle Anfragen über Port 80 bzw. später 443 an den Kestral Server von Net.Core weiterleiten und die Website / Webapp / Web API ausliefern. Wie folgt, wird der Apache unter Ubuntu Server 18.10 installiert. Ebenso installieren wir mod_rewrite

sudo apt install apache2
sudo systemctl status apache2

sudo a2enmod rewrite

Apache Konfigurieren

Erstellen Sie unter /etc/apache2/sites-enabled eine Konfigurationsdatei für einen Virtuellen Host. In diesem Beispiel geben wir auch direkt an welche HTTP Methoden erlaubt sein werden. Passen Sie hier die Konfiguration an, sofern Sie z. B. keine DELETE Requests erlauben möchten. Passen Sie ebenso den Access-Control-Allow-Origin an. Falls Sie von jeder Quelle den Zugriff zulassen möchten, können Sie „*“ angeben. Achten Sie darauf das Sie unter den Access-Conntrol-Allow-Headers „Authorization“ mit angeben, sofern Ihre Web API eine Json Web Token (JWT) Authentifizierung benötigt. Folgender Inhalt sollte in die Config Datei 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 Config Datei reicht alle Anfragen auf Port 80 über den Apache an den Kestral Server von der .Net Core DLL weiter (localhost:5000). Wir legen einen Dienst an damit dotnet Core automatisch beim Systemstart den Kestral Webserver 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

Sofern Ihre Webapp oder Web API eine Datenbank Verbindung benötigt, sollten Sie noch in der appsettings.json den Connection String angeben.

Jetzt noch SSL bitte!

Die Web API sollte natürlich über SSL Veröffentlicht sein, sofern Sie die API nicht nur intern im eigenen Netzwerk verwenden. Dies ist mit dem Certbot sehr einfach umzusetzen. Sie müssen den Namen der Domain angeben, worüber die API erreichbar sein soll.

sudo add-apt-repository ppa:certbot/certbot
sudo apt install python-certbot-apache
sudo certbot --apache -d example.com -d www.example.com

Hilfe benötigt?

Sie haben aktuell ein Web-API Projekt und brauchen Unterstützung? Schreiben Sie mir gerne ein Nachricht über mein Kontaktformular. Zusammen finden wir eine passende Lösung für Sie. Die Erstberatung ist unverbindlich und kostenlos.

Kommentar verfassen