開発者ドキュメント

Ubuntu16.04でShinyServerをセットアップする方法

この記事の古いバージョンは、 DeanAttaliによって作成されました。

序章

多くの人が主に統計およびグラフィックアプリケーションにオープンソースプログラミング言語Rを使用していますが、 ShinyRパッケージであり、Rコードを変換できます。インタラクティブなウェブページに。 また、 Shiny Server (無料のオープンソース形式と有料のプロフェッショナル形式の両方で利用可能)と組み合わせると、ShinyアプリケーションとインタラクティブRマークダウンドキュメントをホストおよび管理することもできます。

このチュートリアルでは、Ubuntu 16.04を実行しているサーバーにShinyとオープンソースバージョンのShinyServerをインストールして構成し、Let’s Encrypt SSL証明書を使用してShinyサーバーへの接続を保護してから、追加のパッケージをインストールしてインタラクティブに実行します。 Rマークダウンドキュメント。

前提条件

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

警告:サーバー上のRAMが1 GB未満の場合、ShinyServerまたはそれに関連するRパッケージのインストールが失敗する可能性があります。

すべての前提条件が整ったら、まずサーバーにShinyをインストールします。

ステップ1—Shinyをインストールする

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

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

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

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

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

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

  1. Output
    ...
  2. * DONE (shiny)
  3. The downloaded source packages are in
  4. ‘/tmp/Rtmp2GcWv4/downloaded_packages’

これでShinyが配置され、Shiny Serverをインストールして、ブラウザにデフォルトのウェルカム画面を表示する準備が整いました。

ステップ2—ShinyServerをインストールする

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

Shiny Serverの公式インストール手順に従って、wgetを使用して、64ビットアーキテクチャ用のビルド済みバイナリをダウンロードします。 Shiny Serverは活発に開発されているため、公式の Shiny Serverダウンロードページを参照して、オペレーティングシステムに一致する最新の64ビットのビルド済みバイナリのURLを取得する必要があります。 アドレスを取得したら、それに応じて次のコマンドでURLを変更します。

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

ファイルがダウンロードされたら、次のコマンドの出力を、64ビットのビルド済みバイナリダウンロード手順の上部にある RStudioShinyServerダウンロードページにリストされているMD5チェックサムと比較して整合性を確認します。

  1. md5sum shiny-server-1.5.5.872-amd64.deb

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

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

  1. sudo apt-get update
  2. sudo apt-get install gdebi-core

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

  1. sudo gdebi shiny-server-1.5.5.872-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]:y

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

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

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

  1. sudo netstat -plunt | grep -i shiny

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

Output
tcp 0 0 0.0.0.0:3838 0.0.0.0:* LISTEN 18749/shiny-server

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

次に、ファイアウォールを変更して、ShinyServerへのトラフィックを許可します。

  1. sudo ufw allow 3838

最後に、ブラウザでhttp://www.example.com:3838を指定して、デフォルトのShiny Serverホームページを表示し、ShinyServerにようこそ。インストールを祝福します。

注:画面の右側に、エラーが発生しましたというメッセージが表示された小さなボックスが表示される場合があります。 手順4でrmarkdownをインストールすると、エラーメッセージはインタラクティブなShinyDocに置き換えられます。

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

ステップ3—リバースプロキシとSSL証明書を使用してShinyServerを保護する

このステップでは、Webサーバーとクライアント間のメッセージングのプロトコルである WebSocket を介して、着信要求をShinyServerに転送するようにNginxを構成します。

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

  1. sudo nano /etc/nginx/nginx.conf

Nginxのマップモジュールを使用して、次のディレクティブをhttpブロックにコピーすることにより、WebSocketが必要とする値の変数を作成します。

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

mapディレクティブは、$http_upgrade(クライアントの Upgrade ヘッダーの値)を中括弧内の条件と比較します。 値が''の場合、map$connection_upgrade変数を作成し、closeに設定します。 それ以外の場合、map$connection_upgrade変数を作成し、それをデフォルト値upgradeに設定します。

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

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

  1. sudo nano /etc/nginx/sites-available/example.com

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

/etc/nginx/sites-available/<^>example.com <^>
server {
   listen 80 default_server;
   listen [::]:80 default_server ipv6only=on;
   server_name example.com www.example.com;
   return 301 https://$server_name$request_uri;
}
server {
   listen 443 ssl;
   server_name example.com www.example.com;
   ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/example.com/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://your_server_ip:3838;
       proxy_redirect http://your_server_ip: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を使用するようにリダイレクトされることです。

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

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

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

  1. sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com

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

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

次に、変更をアクティブ化する前に、新しい構成をテストします。

  1. sudo nginx -t

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

構文に問題がなく、テストが成功したら、Nginxをリロードしてすべての変更をアクティブ化する準備が整います。

  1. sudo systemctl restart nginx

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

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

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

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

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

この時点で、ShinyアプリケーションをホストできるShinyサーバーが機能していますが、rmarkdown Rパッケージがインストールされていないため、インタラクティブなRMarkdownドキュメントをまだホストできません。

そのため、Shinyパッケージをインストールするためのステップ1 のようなコマンドを使用して、rmarkdownをインストールします。

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

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

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

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

結論

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

現在の設定に基づいて構築するには、次のことができます。

モバイルバージョンを終了