So richten Sie Shiny Server unter Ubuntu ein 16.04

Einführung

Während sich viele Leute in erster Linie für statistische und grafische Anwendungen an die Programmiersprache open-source R wenden, ist dies Shiny ein R package, mit dem Sie Ihren R-Code in interaktiven Code umwandeln können Webseiten. In Kombination mit Shiny Server - verfügbar in einem kostenlosen Open-Source- und einem kostenpflichtigen, professionellen Format - können Sie Shiny auch hosten und verwalten Anwendungen und interaktive R-Markdown-Dokumente.

In diesem Tutorial installieren und konfigurieren Sie Shiny und die Open-Source-Version von Shiny Server auf einem Server mit Ubuntu 16.04, sichern die Verbindung zum Shiny-Server mit einem SSL-Zertifikat von Let’s Encrypt und installieren dann ein zusätzliches Paket, um es interaktiv auszuführen R Abschriftenbelege.

Voraussetzungen

Um dieses Lernprogramm abzuschließen, benötigen Sie Folgendes:

Sobald alle Voraussetzungen erfüllt sind, installieren wir Shiny auf dem Server.

Schritt 1 - Shiny installieren

Vor der Installation von Shiny Server müssen Sie das Shiny R-Paket installieren, das das Framework bereitstellt, auf dem Shiny-Webanwendungen ausgeführt werden.

Wenn Sie mit R vertraut sind, könnten Sie versucht sein, Pakete direkt von R anstatt von der Befehlszeile aus zu installieren. Die Verwendung des folgenden Befehls ist jedoch die sicherste Methode, um sicherzustellen, dass das Paket für alle Benutzer und nicht nur für den Benutzer installiert wird, der gerade R ausführt.

Das "+ su - " führt den folgenden Befehl wie in der eigenen Umgebung des Benutzers aus, und die Option " -c +" gibt den auszuführenden Befehl an. Dieser Befehl folgt in diesem Fall in doppelten Anführungszeichen.

Das + install.packages + ist der R-Befehl, der zum Installieren von R-Paketen verwendet wird. In diesem Befehl wird also speziell das Paket "+ shiny +" aus dem angegebenen Repository installiert.

sudo su - -c "R -e \"install.packages('shiny', repos='http://cran.rstudio.com/')\""

Wenn der Vorgang abgeschlossen ist, teilt R Ihnen mit, dass die Installation "+ DONE +" ist und wo die heruntergeladenen Quellpakete abgelegt werden:

Output...
* DONE (shiny)

The downloaded source packages are in
   ‘/tmp//downloaded_packages’

Mit Shiny können Sie jetzt Shiny Server installieren und den Standard-Begrüßungsbildschirm in Ihrem Browser aufrufen.

Schritt 2 - Shiny Server installieren

In diesem Schritt installieren Sie den Shiny-Server und optimieren die Firewall, um Datenverkehr über den Port zuzulassen, den Shiny Server überwacht.

Gemäß den offiziellen Installationsanweisungen von Shiny Server verwenden wir "+ wget +", um eine vorgefertigte Binärdatei für die 64-Bit-Architektur herunterzuladen. Da sich Shiny Server in der aktiven Entwicklung befindet, sollten Sie die offizielle Shiny Server-Downloadseite konsultieren, um die URL für die neueste 64-Bit-Binärdatei zu erhalten passend zu Ihrem Betriebssystem. Sobald Sie die Adresse haben, ändern Sie die URL im folgenden Befehl entsprechend.

wget https://download3.rstudio.org/ubuntu-12.04/x86_64/shiny-server--amd64.deb

Überprüfen Sie nach dem Herunterladen der Datei ihre Integrität, indem Sie die Ausgabe des folgenden Befehls mit der MD5-Prüfsumme vergleichen, die auf der Download-Seite von RStudio Shiny Server unter aufgeführt ist die Spitze der 64-Bit, vorgefertigten Anweisungen zum Herunterladen von Binärdateien.

md5sum shiny-server--amd64.deb

Wenn die Prüfsummen nicht übereinstimmen, laden Sie die Datei erneut herunter und überprüfen Sie die Integrität erneut, bevor Sie fortfahren.

Da Shiny Server für seine Installation von GDebi abhängt - einem Tool, das lokale Deb-Pakete installiert und gleichzeitig zusätzliche Abhängigkeiten auflöst und installiert - müssen Sie Ihre Paketliste aktualisieren und anschließend das Paket "+ gdebi-core +" installieren.

sudo apt-get update
sudo apt-get install gdebi-core

Sie können jetzt Shiny Server installieren.

sudo gdebi shiny-server--amd64.deb

Geben Sie "+ y +" ein, wenn Sie von GDebi aufgefordert werden, die Installation des Pakets zu bestätigen.

[Secondary_label Output]
Shiny Server
Shiny Server is a server program from RStudio, Inc. that makes Shiny applications available over the web. Shiny is a web application framework for the R statistical computation language.
Do you want to install the software package? [y/N]:

Zu diesem Zeitpunkt sollte die Ausgabe anzeigen, dass ein Dienst mit dem Namen "+ ShinyServer " installiert ist und ein " active +" Systemd-Dienst. Wenn die Ausgabe anzeigt, dass ein Problem vorliegt, verfolgen Sie die vorherigen Schritte erneut, bevor Sie fortfahren.

[Secondary_label Output]
...
● shiny-server.service - ShinyServer
  Loaded: loaded (/etc/systemd/system/shiny-server.service; enabled; vendor preset: enabled)
  Active:  since Fri 2017-10-13 14:24:28 UTC; 2 days ago
...

Vergewissern Sie sich als nächstes, dass Shiny Server tatsächlich den Port "+ 3838 +" abhört.

sudo netstat -plunt | grep -i shiny

Bei Erfolg enthält die Ausgabe die folgende Zeile:

Outputtcp        0      0 0.0.0.0:3838            0.0.0.0:*               LISTEN      18749/shiny-server

Wenn Ihre Ausgabe nicht so aussieht, überprüfen Sie Ihr Terminal noch einmal auf zusätzliche Warnungen und Fehlermeldungen.

Ändern Sie nun die Firewall, damit der Datenverkehr zu Shiny Server weitergeleitet werden kann.

sudo ufw allow 3838

Zeigen Sie mit Ihrem Browser auf "+ http: //: 3838 +", um die standardmäßige Shiny Server-Startseite aufzurufen. Sie werden von Shiny Server begrüßt und zu Ihrer Installation beglückwünscht.

Sie haben jetzt sowohl Shiny als auch Shiny Server installiert und getestet. Lassen Sie uns das Setup sichern, indem Sie Nginx so konfigurieren, dass es als Reverse-Proxy dient und den gesamten Datenverkehr über HTTPS weiterleitet.

Schritt 3 - Sichern von Shiny Server mit einem Reverse Proxy und einem SSL-Zertifikat

In diesem Schritt konfigurieren Sie Nginx so, dass eingehende Anforderungen über WebSocket, ein Protokoll für den Nachrichtenaustausch zwischen Webservern und Clients, an Shiny Server weitergeleitet werden.

Da wir Konfigurationsvariablen erstellen möchten, die jeder Nginx-Serverblock verwenden kann, öffnen Sie die Nginx-Hauptkonfigurationsdatei + nginx.conf + zum Bearbeiten.

sudo nano /etc/nginx/nginx.conf

Erstellen Sie mit dem map module von Nginx Variablen für die Werte, die WebSocket benötigt indem Sie die folgende Direktive in den + http + Block kopieren:

/etc/nginx/nginx.conf

http {
   ...
   # Map proxy settings for RStudio
   map $http_upgrade $connection_upgrade {
       default upgrade;
       '' close;
   }
}

Die Direktive + map + vergleicht + $ http_upgrade + - den Wert des * Upgrade * -Headers des Clients - mit den Bedingungen in geschweiften Klammern. Wenn der Wert "" + "ist, erstellt" + map + "die Variable" + $ connection_upgrade "und setzt sie auf" + close ". Andernfalls erstellt " map " die Variable " $ connection_upgrade" und setzt sie auf den Standardwert "+ upgrade".

Speichern Sie Ihre Arbeit und schließen Sie die Datei, um fortzufahren.

Erstellen Sie als Nächstes einen vollständig neuen Nginx-Serverblock, damit Sie immer noch die Standardkonfigurationsdatei haben, auf die Sie zurückgreifen können, wenn Sie später auf ein Problem stoßen.

sudo nano /etc/nginx/sites-available/

Erstellen Sie einen neuen Satz von Anweisungen für Shiny Server, indem Sie Folgendes kopieren und in die neue Datei einfügen:

example.com ’> / etc / nginx / sites-available /

server {
  listen 80 default_server;
  listen [::]:80 default_server ipv6only=on;
  server_name ;
  return 301 https://$server_name$request_uri;
}
server {
  listen 443 ssl;
  server_name ;
  ssl_certificate /etc/letsencrypt/live//fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live//privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_prefer_server_ciphers on;
  ssl_ciphers AES256+EECDH:AES256+EDH:!aNULL;

  location / {
      proxy_pass http://:3838;
      proxy_redirect http://:3838/ https://$host/;
      proxy_http_version 1.1;
      proxy_set_header Upgrade $http_upgrade;
      proxy_set_header Connection $connection_upgrade;
      proxy_read_timeout 20d;
  }
}

Die Nettowirkung dieser Konfiguration ist, dass alle an den Ports "+ 80 " und " 3838 " ankommenden Anforderungen an den Server umgeleitet werden, um HTTPS an Port " 443 +" zu verwenden.

Ein Überblick über einige der komplexeren Aspekte dieser Konfiguration umfasst:

  • * return *: Erstellt eine permanente Umleitung für Anfragen, die als normales HTTP an HTTPS gesendet werden.

  • * proxy_pass *: Weist Nginx an, Anfragen, die im Stammverzeichnis der Webserveranwendung eingehen, an die IP-Adresse des Servers weiterzuleiten, der den Port "+ 3838 +" überwacht.

  • * proxy_redirect *: Schreibt die eingehende Zeichenfolge "+ http: //: 3838 / " auf die HTTPS-Entsprechung auf dem Server um, der die Anforderung verarbeitet. Die Variable " $ host +" ergibt den Hostnamen des Servers, auf dem Nginx ausgeführt wird.

  • * proxy_set_header *: Definiert Felder neu oder hängt sie an den Anforderungsheader an, der an den Proxy-Server übergeben wird.

  • * proxy_read_timeout *: Legt ein Zeitlimit für das Lesen einer Antwort vom Proxy-Server zwischen zwei aufeinander folgenden Lesevorgängen fest.

Speichern und schließen Sie die Datei, um fortzufahren.

Aktivieren Sie als Nächstes den neuen Serverblock, indem Sie eine symbolische Verknüpfung für ihn im Verzeichnis "+ / etc / nginx / sites-enabled +" erstellen.

sudo ln -s /etc/nginx/sites-available/ /etc/nginx/sites-enabled/

Und da unser neuer Serverblock jetzt alle Anforderungen an Port "+ 80 " verarbeitet, können Sie den Standardblock deaktivieren, indem Sie den symbolischen Link dazu im Verzeichnis " sites-enabled +" löschen.

sudo rm -f /etc/nginx/sites-enabled/default

Testen Sie nun Ihre neue Konfiguration, bevor Sie die Änderungen aktivieren.

sudo nginx -t

Wenn Probleme auftreten, befolgen Sie die Anweisungen in der Ausgabe, um sie zu beheben.

Sobald Ihre Syntax in Ordnung und Ihr Test erfolgreich ist, können Sie alle Änderungen durch erneutes Laden von Nginx aktivieren.

sudo systemctl restart nginx

Stellen Sie nach dem Neustart von Nginx sicher, dass Ihr Shiny Server Anfragen über HTTPS bearbeitet, indem Sie Ihren Browser auf "+ https: // +" zeigen. Sie sollten dieselbe Standard-Shiny Server-Homepage sehen, die Sie am Ende von Schritt 2 gesehen haben.

Stellen Sie dann sicher, dass eingehende HTTP-Anforderungen an HTTPS umgeleitet werden, indem Sie in die Adressleiste Ihres Browsers "+ http: // " eingeben. Wenn es richtig funktioniert, sollten Sie automatisch zu " https: // +" umgeleitet werden.

Shiny Server ist jetzt mit einem Reverse-Proxy und einem SSL-Zertifikat gesichert, sodass Sie Ihr Setup für interaktive R Markdown-Dokumente konfigurieren können.

Schritt 4 - Hosten interaktiver R-Dokumente

Shiny Server eignet sich nicht nur zum Hosten von Shiny-Anwendungen, sondern auch zum Hosten interaktiver R Markdown-Dokumente.

Zu diesem Zeitpunkt verfügen Sie über einen funktionierenden Shiny-Server, der Shiny-Anwendungen hosten kann, jedoch noch keine interaktiven R-Markdown-Dokumente hosten kann, da das Paket + rmarkdown + R nicht installiert ist.

Verwenden Sie also einen Befehl, der wie der folgende funktioniert: # step-1-% E2% 80% 94-installation-shiny [einer aus Schritt 1] zum Installieren des Shiny-Pakets, installieren Sie + rmarkdown +.

sudo su - -c "R -e \"install.packages('rmarkdown', repos='http://cran.rstudio.com/')\""

Überprüfen Sie anschließend die Installation, indem Sie zu "+ https: /// sample-apps / rmd / " wechseln. In Ihrem Browser sollte ein interaktives R Markdown-Dokument angezeigt werden. Wenn Sie zu " https: // +" zurückkehren, sollte die Fehlermeldung, die Sie zuvor erhalten haben, jetzt durch dynamischen Inhalt ersetzt werden.

Wenn eine Fehlermeldung angezeigt wird, befolgen Sie die Anweisungen auf dem Bildschirm und überprüfen Sie die Ausgabe Ihres Terminals, um weitere Informationen zu erhalten.

Ihr Shiny Server-Setup ist vollständig, gesichert und kann sowohl für Shiny-Anwendungen als auch für Interactive R Markdown-Dokumente verwendet werden.

Fazit

In diesem Lernprogramm richten Sie einen voll funktionsfähigen Shiny-Server ein und sichern ihn, der Shiny-Anwendungen und interaktive R Markdown-Dokumente hosten kann.

Um auf Ihrem aktuellen Setup aufzubauen, können Sie:

  • Informationen zum Verwalten und Anpassen des Servers für Ihre genauen Anforderungen finden Sie im Shiny Server-Administratorhandbuch.

  • Weitere Informationen zum Schreiben von Shiny-Anwendungen finden Sie unter tutorials auf rstudio.com.

  • Weitere Informationen zum Schreiben interaktiver R-Markdown-Dokumente finden Sie auf der R-Markdown-Seite unter rstudio.com.