この記事の古いバージョンは、 DeanAttaliによって作成されました。
序章
多くの人が主に統計およびグラフィックアプリケーションにオープンソースプログラミング言語Rを使用していますが、 ShinyはRパッケージであり、Rコードを変換できます。インタラクティブなウェブページに。 また、 Shiny Server (無料のオープンソース形式と有料のプロフェッショナル形式の両方で利用可能)と組み合わせると、ShinyアプリケーションとインタラクティブRマークダウンドキュメントをホストおよび管理することもできます。
このチュートリアルでは、Ubuntu 16.04を実行しているサーバーにShinyとオープンソースバージョンのShinyServerをインストールして構成し、Let’s Encrypt SSL証明書を使用してShinyサーバーへの接続を保護してから、追加のパッケージをインストールしてインタラクティブに実行します。 Rマークダウンドキュメント。
前提条件
このチュートリアルを完了するには、次のものが必要です。
- 最低1GBのRAMを備えた1台のUbuntu16.04サーバーは、このUbuntu 16.04初期サーバーセットアップチュートリアルに従ってセットアップされます。これには、sudo非rootユーザーとファイアウォールが含まれます。
警告:サーバー上のRAMが1 GB未満の場合、ShinyServerまたはそれに関連するRパッケージのインストールが失敗する可能性があります。
-
このUbuntu16.04チュートリアルへのRのインストールのステップ1に従ってインストールされたRの最新バージョン。
-
このUbuntu16.04チュートリアルにNginxをインストールする方法(ポートへのアクセスの許可を含む)に従ってインストールされたNginx
80
と443
手順2で次のコマンドを使用しますsudo ufw allow 'Nginx Full'
. -
完全に登録されたドメイン名。 このチュートリアルでは、
example.com
全体を通して。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。 -
次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、このホスト名チュートリアルに従うことができます。
- とのAレコード
example.com
サーバーのパブリックIPアドレスを指します。 - とのAレコード
www.example.com
サーバーのパブリックIPアドレスを指します。
- とのAレコード
-
このLet’sEncryptCertbotチュートリアルに従ってインストールされたドメインのSSL証明書を暗号化しましょう。
すべての前提条件が整ったら、まずサーバーにShinyをインストールします。
ステップ1—Shinyをインストールする
Shiny Serverをインストールする前に、ShinyWebアプリケーションが実行されるフレームワークを提供するShinyRパッケージをインストールする必要があります。
Rに精通している場合は、コマンドラインからではなくRから直接パッケージをインストールしたくなるかもしれません。 ただし、次のコマンドを使用するのが、現在Rを実行しているユーザーだけでなく、すべてのユーザーに対してパッケージがインストールされるようにするための最も安全な方法です。
The su -
ユーザー自身の環境であるかのように次のコマンドを実行し、 -c
オプションは、実行されるコマンドを指定します。 この場合、そのコマンドは二重引用符で囲まれたものです。
The 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/Rtmp2GcWv4/downloaded_packages’
これでShinyが配置され、Shiny Serverをインストールして、ブラウザにデフォルトのウェルカム画面を表示する準備が整いました。
ステップ2—ShinyServerをインストールする
このステップでは、Shinyサーバーをインストールし、ファイアウォールを微調整して、Shinyサーバーがリッスンするポートを通過するトラフィックを許可します。
シャイニーサーバーの公式インストール手順に従って、 wget
64ビットアーキテクチャ用のビルド済みバイナリをダウンロードします。 Shiny Serverは活発に開発されているため、公式の Shiny Serverダウンロードページを参照して、オペレーティングシステムに一致する最新の64ビットのビルド済みバイナリのURLを取得する必要があります。 アドレスを取得したら、それに応じて次のコマンドでURLを変更します。
- wget https://download3.rstudio.org/ubuntu-12.04/x86_64/shiny-server-1.5.5.872-amd64.deb
ファイルがダウンロードされたら、次のコマンドの出力を、64ビットのビルド済みバイナリダウンロード手順の上部にある RStudioShinyServerダウンロードページにリストされているMD5チェックサムと比較して整合性を確認します。
- md5sum shiny-server-1.5.5.872-amd64.deb
チェックサムが一致しない場合は、先に進む前に、ファイルを再ダウンロードして、その整合性を再度確認してください。
Shiny ServerはGDebi(ローカルのdebパッケージをインストールすると同時に、追加の依存関係を解決してインストールするツール)に依存しているため、パッケージリストを更新してから、 gdebi-core
次のパッケージ。
- sudo apt-get update
- sudo apt-get install gdebi-core
これで、ShinyServerをインストールする準備が整いました。
- sudo gdebi shiny-server-1.5.5.872-amd64.deb
タイプ y
GDebiがパッケージをインストールすることを確認するように求めたとき。
[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
インストールされており、 active
Systemdサービス。 出力に問題があることが示されている場合は、続行する前に前の手順を再トレースしてください。
[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
.
- sudo netstat -plunt | grep -i shiny
成功した場合、出力には次の行が含まれます。
Outputtcp 0 0 0.0.0.0:3838 0.0.0.0:* LISTEN 18749/shiny-server
出力がこのように表示されない場合は、追加の警告やエラーメッセージがないか端末を再確認してください。
次に、ファイアウォールを変更して、ShinyServerへのトラフィックを許可します。
- sudo ufw allow 3838
最後に、ブラウザで http://www.example.com:3838
デフォルトのShinyServerホームページを表示し、Shiny Serverにようこそ、インストールを祝福します。
注:画面の右側に、エラーが発生しましたというメッセージが表示された小さなボックスが表示される場合があります。 インストールしたら rmarkdown
手順4で、エラーメッセージはインタラクティブなShinyDocに置き換えられます。
これで、ShinyとShiny Serverの両方がインストールおよびテストされたので、リバースプロキシとして機能し、すべてのトラフィックをHTTPS経由でルーティングするようにNginxを構成して、セットアップを保護しましょう。
ステップ3—リバースプロキシとSSL証明書を使用してShinyServerを保護する
このステップでは、Webサーバーとクライアント間のメッセージングのプロトコルである WebSocket を介して、着信要求をShinyServerに転送するようにNginxを構成します。
すべてのNginxサーバーブロックが使用できる構成変数を作成するため、メインのNginx構成ファイルを開きます。 nginx.conf
、編集用。
- sudo nano /etc/nginx/nginx.conf
Nginxのマップモジュールを使用して、次のディレクティブをにコピーすることにより、WebSocketが必要とする値の変数を作成します。 http
ブロック:
http {
...
# Map proxy settings for RStudio
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
}
The map
ディレクティブは比較します $http_upgrade
—クライアントの Upgrade ヘッダーの値—中括弧内の条件に。 値が ''
, map
を作成します $connection_upgrade
変数に設定します close
. さもないと、 map
を作成します $connection_upgrade
変数をデフォルト値に設定し、 upgrade
.
作業内容を保存し、ファイルを閉じて続行します。
次に、完全に新しいNginxサーバーブロックを作成します。これにより、後で問題が発生した場合に元に戻すことができるデフォルトの構成ファイルを引き続き使用できます。
- sudo nano /etc/nginx/sites-available/example.com
以下をコピーして新しいファイルに貼り付けることにより、ShinyServerの新しいディレクティブのセットを作成します。
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
ポートでHTTPSを使用するようにリダイレクトされます 443
.
この構成のより複雑な側面の概要は次のとおりです。
-
return :プレーンHTTPからHTTPSとして着信するリクエストの永続的なリダイレクトを作成します。
-
proxy_pass :Webサーバーアプリケーションのルートで着信するリクエストを、ポートでリッスンしているサーバーのIPアドレスに転送するようにNginxに指示します
3838
. -
proxy_redirect :着信文字列を書き換えます。
http://your_server_ip:3838/
、リクエストを処理するサーバー上の同等のHTTPSに。 The$host
変数は、Nginxが実行されているサーバーのホスト名に評価されます。 -
proxy_set_header :プロキシサーバーに渡されるリクエストヘッダーにフィールドを再定義または追加します。
-
proxy_read_timeout :2つの連続する読み取り操作の間にプロキシサーバーからの応答を読み取るためのタイムアウトを設定します。
ファイルを保存して閉じ、続行します。
次に、新しいサーバーブロックのシンボリックリンクを作成して、新しいサーバーブロックを有効にします。 /etc/nginx/sites-enabled
ディレクトリ。
- sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
そして、新しいサーバーブロックがポート上のすべてのリクエストを処理するようになったため 80
、デフォルトのブロックへのシンボリックリンクを削除することにより、デフォルトのブロックを無効にすることができます。 sites-enabled
ディレクトリ。
- sudo rm -f /etc/nginx/sites-enabled/default
次に、変更をアクティブ化する前に、新しい構成をテストします。
- sudo nginx -t
問題が発生した場合は、出力の指示に従って問題を解決してください。
構文に問題がなく、テストが成功したら、Nginxをリロードしてすべての変更をアクティブ化する準備が整います。
- sudo systemctl restart nginx
Nginxが再起動したら、ブラウザで次の位置にアクセスして、ShinyサーバーがHTTPS経由でリクエストを処理していることを確認します。 https://example.com
. 手順2の最後に表示されたものと同じデフォルトのShinyServerホームページが表示されます。
次に、次のように入力して、着信HTTPリクエストがHTTPSにリダイレクトされることを確認します http://example.com
ブラウザのアドレスバーに入力します。 正しく機能している場合は、自動的ににリダイレクトされます https://example.com
.
これで、Shiny ServerはリバースプロキシとSSL証明書で保護されるため、インタラクティブなRMarkdownドキュメントのセットアップを構成する準備が整いました。
ステップ4—インタラクティブRドキュメントのホスティング
Shiny Serverは、Shinyアプリケーションをホストするだけでなく、インタラクティブなRMarkdownドキュメントをホストする場合にも役立ちます。
この時点で、ShinyアプリケーションをホストできるShinyサーバーが機能していますが、インタラクティブなRMarkdownドキュメントをホストすることはできません。 rmarkdown
Rパッケージがインストールされていません。
したがって、Shinyパッケージをインストールするためのステップ1のoneのように機能するコマンドを使用して、 rmarkdown
.
- 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サーバーをセットアップして保護しました。
現在の設定に基づいて構築するには、次のことができます。
-
Shiny Server管理者ガイドを使用して、正確なニーズに合わせてサーバーを管理およびカスタマイズする方法を学びます。
-
rstudio.com のチュートリアルを使用して、Shinyアプリケーションの作成について詳しく学んでください。
-
rstudio.com のRマークダウンページをチェックして、インタラクティブなRマークダウンドキュメントの作成について詳しく学んでください。