Ubuntu16.04でShinyServerをセットアップする方法
この記事の古いバージョンは、 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。コマンド
sudo ufw allow 'Nginx Full'
を使用してステップ2のポート80
および443
へのアクセスを許可します。 。 - 完全に登録されたドメイン名。 このチュートリアルでは、全体を通して
example.com
を使用します。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。 - 次の両方のDNSレコードがサーバー用に設定されています。 それらを追加する方法の詳細については、このホスト名チュートリアルに従うことができます。
- サーバーのパブリックIPアドレスを指す
example.com
のAレコード。 - サーバーのパブリックIPアドレスを指す
www.example.com
のAレコード。
- サーバーのパブリックIPアドレスを指す
- このLet'sEncryptCertbotチュートリアルに従ってインストールされたドメインのSSL証明書を暗号化しましょう。
すべての前提条件が整ったら、まずサーバーにShinyをインストールします。
ステップ1—Shinyをインストールする
Shiny Serverをインストールする前に、ShinyWebアプリケーションが実行されるフレームワークを提供するShinyRパッケージをインストールする必要があります。
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/Rtmp2GcWv4/downloaded_packages’
これでShinyが配置され、Shiny Serverをインストールして、ブラウザにデフォルトのウェルカム画面を表示する準備が整いました。
ステップ2—ShinyServerをインストールする
このステップでは、Shinyサーバーをインストールし、ファイアウォールを微調整して、Shinyサーバーがリッスンするポートを通過するトラフィックを許可します。
Shiny Serverの公式インストール手順に従って、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は、ローカルdebパッケージをインストールすると同時に追加の依存関係を解決してインストールするツールであるGDebiに依存しているため、パッケージリストを更新してから、次にgdebi-core
パッケージをインストールする必要があります。
sudo apt-get update sudo apt-get install gdebi-core
これで、ShinyServerをインストールする準備が整いました。
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
という名前のサービスがインストールされていることと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
を指定して、デフォルトのShiny Serverホームページを表示し、ShinyServerにようこそ。インストールを祝福します。
注:画面の右側に、エラーが発生しましたというメッセージが表示された小さなボックスが表示される場合があります。 手順4でrmarkdown
をインストールすると、エラーメッセージはインタラクティブなShinyDocに置き換えられます。
これで、ShinyとShiny Serverの両方がインストールおよびテストされたので、リバースプロキシとして機能し、すべてのトラフィックをHTTPS経由でルーティングするようにNginxを構成して、セットアップを保護しましょう。
ステップ3—リバースプロキシとSSL証明書を使用してShinyServerを保護する
このステップでは、Webサーバーとクライアント間のメッセージングのプロトコルである WebSocket を介して、着信要求をShinyServerに転送するようにNginxを構成します。
すべてのNginxサーバーブロックが使用できる構成変数を作成するため、メインのNginx構成ファイルnginx.conf
を開いて編集します。
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サーバーブロックを作成します。これにより、後で問題が発生した場合に元に戻すことができるデフォルトの構成ファイルを引き続き使用できます。
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を使用するようにリダイレクトされることです。
この構成のより複雑な側面の概要は次のとおりです。
- return :プレーンHTTPからHTTPSとして着信するリクエストの永続的なリダイレクトを作成します。
- proxy_pass :Webサーバーアプリケーションのルートで着信するリクエストを、ポート
3838
でリッスンしているサーバーのIPアドレスに転送するようにNginxに指示します。 - proxy_redirect :着信文字列
http://your_server_ip:3838/
を、リクエストを処理するサーバー上の同等のHTTPSに書き換えます。$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が再起動したら、ブラウザで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
をインストールします。
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マークダウンドキュメントの作成について詳しく学んでください。