Ubuntu 16.04でShiny Serverをセットアップする方法

前書き

多くの人は主にhttps://www.r-project.org/about.html [オープンソースプログラミング言語R]を統計およびグラフィックアプリケーションに使用しますが、http://shiny.rstudio.com/ [Shiny]はRコードをインタラクティブに変換できるhttps://www.digitalocean.com/community/tutorials/how-to-install-r-packages-using-devtools-on-ubuntu-16-04[Rパッケージ]ウェブページ。 また、https://www.rstudio.com/products/shiny/shiny-server/ [Shiny Server]と組み合わせると、無料のオープンソースと有料のプロフェッショナル形式の両方で利用可能になり、Shinyをホストおよび管理することもできます。アプリケーションおよびhttp://rmarkdown.rstudio.com/ [インタラクティブRマークダウンドキュメント]。

このチュートリアルでは、Ubuntu 16.04を実行しているサーバーにShinyとオープンソースバージョンのShiny Serverをインストールして構成し、Let’s Encrypt SSL証明書を使用してShinyサーバーへの接続を保護し、追加パッケージをインストールして対話型を実行しますR Markdownドキュメント。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [このUbuntu 16.04初期サーバー]によって設定された*最小1GBのRAM *を持つ1つのUbuntu 16.04サーバーセットアップチュートリアル]、sudo非ルートユーザーとファイアウォールを含む。

  • このUbuntu 16.04にRをインストールするチュートリアル ]。

  • Ubuntu 16.04にNginxをインストールする方法に従って、ポートへのアクセスを許可することによりインストールされたNginxコマンド+ sudo ufw allow 'Nginx Full' + を使用して、ステップ2で + 80 + および + 443 + `を実行します。

  • 完全に登録されたドメイン名。 このチュートリアルでは、全体で `+ example.com +`を使用します。 https://namecheap.com [Namecheap]でドメイン名を購入するか、http://www.freenom.com/en/index.html [Freenom]で無料で入手するか、選択したドメインレジストラを使用できます。 。

  • 次の両方のDNSレコードがサーバーに設定されています。 追加方法の詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean [このホスト名チュートリアル]を参照してください。

  • サーバーのパブリックIPアドレスを指す「++」を持つAレコード。

  • サーバーのパブリックIPアドレスを指す「+ www。+」を持つAレコード。

  • このLet’s Encrypt Certbotチュートリアル

すべての前提条件が整ったら、サーバーにShinyをインストールすることから始めます。

ステップ1-Shinyのインストール

Shiny Serverをインストールする前に、Shiny Webアプリケーションを実行するフレームワークを提供するShiny Rパッケージをインストールする必要があります。

Rに精通している場合は、コマンドラインではなくRから直接パッケージをインストールしたくなるかもしれません。 ただし、次のコマンドを使用することが、現在Rを実行しているユーザーだけでなく、すべてのユーザーに対してパッケージを確実にインストールするための最も安全な方法です。

`+ su-`は、ユーザー自身の環境であるかのように次のコマンドを実行し、 ` -c +`オプションは実行するコマンドを指定します。 この場合、そのコマンドは二重引用符で囲まれています。

`+ install.packages `は、Rパッケージのインストールに使用されるRコマンドです。 したがって、このコマンドでは、具体的には、指定されたリポジトリから ` shiny +`パッケージがインストールされます。

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

完了すると、Rはインストールが「+ DONE +」であり、ダウンロードしたソースパッケージをどこに置くかを通知します。

Output...
* DONE (shiny)

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

Shinyを配置したら、Shiny Serverをインストールして、ブラウザにデフォルトのようこそ画面を表示する準備ができました。

ステップ2-Shiny Serverのインストール

この手順では、Shinyサーバーをインストールし、ファイアウォールを調整して、Shinyサーバーがリッスンするポートを介したトラフィックを許可します。

Shiny Serverの公式インストール手順に従って、 `+ wget`を使用して、64ビットアーキテクチャ用のビルド済みバイナリをダウンロードします。 Shiny Serverは活発に開発されているため、公式のhttps://www.rstudio.com/products/shiny/download-server/[Shiny Serverダウンロードページ]を参照して、最新の64ビットのビルド済みバイナリのURLを取得する必要があります。オペレーティングシステムに一致します。 アドレスを取得したら、次のコマンドでURLを適宜変更します。

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

ファイルがダウンロードされたら、次のコマンドの出力をhttps://www.rstudio.com/products/shiny/download-server/[RStudio Shiny Serverダウンロードページ]にリストされているMD5チェックサムと比較して、整合性を確認します。 64ビットのビルド済みバイナリダウンロード手順のトップ。

md5sum shiny-server--amd64.deb

チェックサムが一致しない場合は、先に進む前にファイルを再度ダウンロードし、整合性を再度確認してください。

Shiny Serverは、ローカルdebパッケージをインストールすると同時に追加の依存関係を解決およびインストールするツールであるGDebiに依存しているため、インストールのためにパッケージリストを更新してから、次に `+ gdebi-core +`パッケージをインストールする必要があります。

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

これで、Shiny Serverをインストールする準備が整いました。

sudo gdebi shiny-server--amd64.deb

GDebiがパッケージのインストールの確認を求めてきたら、「+ y +」と入力します。

[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]:

この時点で、出力は + ShinyServer +`という名前のサービスがインストールされており、 `+ active + Systemdサービスの両方であることを示しているはずです。 出力に問題があることが示されている場合は、続行する前に以前の手順を再度トレースします。

[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
...

次に、Shiny Serverが実際にポート「3838」でリッスンしていることを確認します。

sudo netstat -plunt | grep -i shiny

成功した場合、出力には次の行が含まれます。

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

出力がこのようになっていない場合は、端末で追加の警告とエラーメッセージを再確認してください。

次に、ファイアウォールを変更して、トラフィックがShiny Serverを通過できるようにします。

sudo ufw allow 3838

最後に、ブラウザで `+ http://:3838 +`を指定してデフォルトのShiny Serverホームページを表示し、Shiny Serverを歓迎してインストールを祝福します。

Shiny ServerとShiny Serverの両方をインストールしてテストしたので、リバースプロキシとして機能し、すべてのトラフィックをHTTPS経由でルーティングするようにNginxを構成して、セットアップを保護しましょう。

手順3-リバースプロキシとSSL証明書を使用してShiny Serverを保護する

この手順では、http://nginx.org/en/docs/http/websocket.html [WebSocket]を介して受信リクエストをShiny Serverに転送するようにNginxを設定します。これは、Webサーバーとクライアント間のメッセージングのプロトコルです。

Nginxサーバーブロックが使用できる構成変数を作成するため、編集のためにメインのNginx構成ファイル `+ nginx.conf +`を開きます。

sudo nano /etc/nginx/nginx.conf

Nginxのhttps://www.digitalocean.com/community/tutorials/how-to-use-nginx-s-map-module-on-ubuntu-16-04 [マップモジュール]を使用して、WebSocketに必要な値の変数を作成します次のディレクティブを `+ http +`ブロックにコピーします:

/etc/nginx/nginx.conf

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

+ map +`ディレクティブは、クライアントの* Upgrade *ヘッダーの値である `+ $ http_upgrade +`を中括弧内の条件と比較します。 値が「+」+の場合、「+ map +」は「+ $ connection_upgrade」変数を作成し、「+ close」に設定します。 そうでない場合、 `+ map +`は `+ $ connection_upgrade`変数を作成し、デフォルト値の + upgrade`に設定します。

作業を保存し、ファイルを閉じて続行します。

次に、完全に新しいNginxサーバーブロックを作成します。これにより、後で問題が発生した場合に戻すためのデフォルトの構成ファイルを保持できます。

sudo nano /etc/nginx/sites-available/

以下をコピーして新しいファイルに貼り付けることにより、Shiny Server用の新しいディレクティブセットを作成します。

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;
  }
}

この設定の最終的な効果は、ポート「80」および「3838」のサーバーへのすべての着信要求が、ポート「443」でHTTPSを使用するようにリダイレクトされることです。

この構成のより複雑な側面の一部の概要は次のとおりです。

  • * return *:プレーンHTTPからHTTPSへのリクエストの永続的なリダイレクトを作成します。

  • * proxy_pass *:Nginxに、Webサーバーアプリケーションのルートで受信するリクエストを、ポート `+ 3838 +`でリッスンしているサーバーのIPアドレスに転送するよう指示します。

  • * proxy_redirect *:着信文字列 `+ http://:3838 / `を、リクエストを処理しているサーバー上のHTTPSに相当するものに書き換えます。 ` $ host +`変数は、Nginxが実行されているサーバーのホスト名に評価されます。

  • * proxy_set_header *:プロキシされるサーバーに渡されるリクエストヘッダーにフィールドを再定義または追加します。

  • * proxy_read_timeout *:2つの連続する読み取り操作の間に、プロキシされたサーバーからの応答を読み取るためのタイムアウトを設定します。

ファイルを保存して閉じ、続行します。

次に、 `+ / etc / nginx / sites-enabled +`ディレクトリにシンボリックリンクを作成して、新しいサーバーブロックを有効にします。

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

また、新しいサーバーブロックはポート `+ 80 `ですべてのリクエストを処理するようになったため、 ` sites-enabled +`ディレクトリでデフォルトのブロックへのシンボリックリンクを削除することで、デフォルトのブロックを無効にできます。

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

次に、変更を有効にする前に新しい構成をテストします。

sudo nginx -t

問題が発生した場合は、出力の指示に従って問題を解決してください。

構文に問題がなく、テストが成功したら、Nginxをリロードしてすべての変更を有効にする準備ができました。

sudo systemctl restart nginx

Nginxが再起動したら、ブラウザで「+ https:// +」を指定して、Shiny ServerがHTTPS経由でリクエストを処理していることを確認します。 手順2の最後で見たのと同じデフォルトのShiny Serverホームページが表示されるはずです。

次に、ブラウザのアドレスバーに「+ http:// 」と入力して、着信HTTPリクエストがHTTPSにリダイレクトされることを確認します。 正常に機能している場合は、自動的に ` https:// +`にリダイレクトされます。

Shiny ServerはリバースプロキシとSSL証明書で保護されているため、インタラクティブなR Markdownドキュメントのセットアップを構成する準備ができています。

ステップ4-インタラクティブRドキュメントのホスティング

Shiny Serverは、Shinyアプリケーションのホストだけでなく、インタラクティブなR Markdownドキュメントのホストにも役立ちます。

この時点で、Shinyアプリケーションをホストできる動作中のShiny Serverがありますが、 + rmarkdown + Rパッケージがインストールされていないため、インタラクティブなR Markdownドキュメントをまだホストできません。

したがって、link:#step-1-%E2%80%94-installing-shiny [ステップ1の1つ]のようなコマンドを使用してShinyパッケージをインストールし、 `+ rmarkdown +`をインストールします。

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

次に、 `+ https:/// sample-apps / rmd / `に移動してインストールを確認します。 ブラウザにインタラクティブなR Markdownドキュメントが表示されます。 さらに、 ` https:// +`に戻ると、以前受け取ったエラーメッセージは動的コンテンツに置き換えられるはずです。

エラーメッセージが表示された場合は、画面の指示に従って、端末の出力を確認してください。

Shiny Serverのセットアップは完了し、セキュリティで保護されており、ShinyアプリケーションとInteractive R Markdownドキュメントの両方を提供する準備ができています。

結論

このチュートリアルでは、ShinyアプリケーションとインタラクティブなR Markdownドキュメントをホストできる、完全に機能するShiny Serverをセットアップして保護しました。

現在のセットアップで構築するには、次のことができます。

  • Shiny Server管理者ガイドを使用して、正確なニーズに合わせてサーバーを管理およびカスタマイズする方法を学びます。

  • Shinyアプリケーションの作成の詳細については、http://shiny.rstudio.com/tutorial/ [rstudio.comのチュートリアル]を参照してください。

  • rstudio.comのR Markdownページをチェックして、インタラクティブなRマークダウンドキュメントの作成の詳細をご覧ください。