Ubuntu20.04でShinyServerをセットアップする方法
序章
多くの人が統計およびグラフィックアプリケーションにオープンソースのプログラミング言語Rを利用していますが、 ShinyはRコードをインタラクティブなWebページに変換できるRパッケージです。 Shinyを使用すると、 Shiny Server (無料のオープンソース形式と有料のプロフェッショナル形式の両方で利用可能)を使用して、ShinyアプリケーションとインタラクティブRマークダウンドキュメントをホストおよび管理できます。
このチュートリアルでは、Ubuntu20.04を実行しているサーバーにShinyとオープンソースバージョンのShinyServerをインストールして構成します。 また、インタラクティブなRMarkdownドキュメントを実行するための追加パッケージをインストールします。
前提条件
このチュートリアルを完了するには、次のものが必要です。
-
sudo非rootユーザーとファイアウォールを備えたUbuntu20.04サーバー。これは、Ubuntu20.04初期サーバーセットアップガイドに従ってセットアップできます。
-
Ubuntu20.04にRをインストールする方法のステップ1でインストールできる最新バージョンのR。
-
ポートにアクセスできるようにインストールされたNginx
80
と443
. Ubuntu 20.04にNginxをインストールする方法に従って、Nginxをインストールします。 ステップ2で、コマンドを使用しますsudo ufw allow 'Nginx Full'
代わりにポート80とポート443の両方を開くsudo ufw allow 'Nginx HTTP'
、ポート80のみを開きます。 -
登録されたドメイン名。 このチュートリアルでは、
example.com
全体を通して。 Namecheap でドメイン名を購入するか、 Freenom で無料でドメイン名を取得するか、選択したドメイン登録事業者を使用できます。 -
次の両方のDNSレコードがサーバー用に設定されています。 追加方法の詳細については、DNSクイックスタートに従ってください。
- とのAレコード
example.com
サーバーのパブリックIPアドレスを指します。 - とのAレコード
www.example.com
サーバーのパブリックIPアドレスも指します。
- とのAレコード
-
ドメインのSSL証明書を暗号化しましょう。これは、Certbotスタンドアロンモードを使用してSSL証明書を取得する方法に従ってインストールできます。 手順2で、コマンドを使用してSSL証明書を取得します
sudo certbot --nginx -d example.com -d www.example.com
の代わりにcertbot certonly
その記事で与えられたコマンド。
ステップ1—Shinyをインストールする
Shiny Serverをインストールする前に、ShinyWebアプリケーションを実行するためのフレームワークを提供するShinyRパッケージをインストールする必要があります。 Rまたはコマンドラインから直接Rパッケージをインストールできますが、現在Rを実行しているユーザーだけでなく、すべてのユーザーにパッケージがインストールされるようにするには、後者の方法をお勧めします。
公式リポジトリからShinyRパッケージをインストールして、すべてのユーザーが利用できるようにするには、次のコマンドを使用します。
- sudo su - -c "R -e \"install.packages('shiny', repos='http://cran.rstudio.com/')\""
と su -
、コマンドをrootとして実行します。 The c
フラグは、によって参照されるユーザーにコマンドを渡します su -
. この場合、引用符で囲まれたコマンドはsudoに渡されます。
完了すると、出力にインストールが完了したことが示され、ダウンロードされたソースパッケージの場所が特定されます。
- Output...
- * DONE (shiny)
-
- The downloaded source packages are in
- ‘/tmp/RtmpPCeOoz/downloaded_packages’
Shinyを配置すると、Shiny Serverをインストールして、ブラウザにデフォルトのウェルカム画面を表示できます。
ステップ2—ShinyServerをインストールする
この手順では、Shiny Serverをインストールし、ShinyServerがリッスンするポートを通過するトラフィックを許可するようにファイアウォールを調整します。
執筆時点で入手可能なUbuntuの最新バージョンは、 Shiny Server1.5.18.987です。 次のコマンドを使用して、64ビットアーキテクチャ用のビルド済みバイナリをダウンロードします。
- wget https://download3.rstudio.org/ubuntu-18.04/x86_64/shiny-server-1.5.18.987-amd64.deb
次に、次のコマンドを使用して、 RStudioShinyServerダウンロードページにリストされているSha256チェックサムを使用してダウンロードしたファイルの整合性を確認します。
- sha256sum shiny-server-1.5.18.987-amd64.deb
チェックサムが一致しない場合は、ファイルを再ダウンロードして、その整合性を確認してください。
シャイニーサーバーのインストールはGDebiに依存しています。 GDebiはローカルにインストールするツールです deb
パッケージを同時に解決し、追加の依存関係をインストールします。
パッケージリストを更新してから、 gdebi-core
パッケージ:
- sudo apt update
- sudo apt install gdebi-core
次に、ShinyServerを次のようにインストールします gdebi
指図:
- sudo gdebi shiny-server-1.5.17.973-amd64.deb
インストールの確認を求めるメッセージが表示されます。
OutputShiny 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
タイプ y
パッケージをインストールすることを確認します。
コマンドの出力の最後に、次の名前のサービスが表示されます。 shiny-server
アクティブで実行中:
Output● shiny-server.service - ShinyServer
Loaded: loaded (/etc/systemd/system/shiny-server.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2022-02-06 01:37:23 UTC; 14ms ago
Main PID: 51306 (shiny-server)
...
使用 ss
それを確認するコマンド shiny-server
ポートでリッスンしています 3838
:
- sudo ss -plut | grep -i shiny
The -plut
フラグはどこを調査します shiny-server
聞いています:
p
はprocessesの略で、socketを使用するプロセスを示しています。l
listening の略で、リスニングソケットを表示します。- 該当する場合、
u
UDPソケットが表示されます。 - 該当する場合、
t
TCPソケットが表示されます。
出力には次の行が表示されます。
Outputtcp LISTEN 0 511 *:3838 *:* users:(("shiny-server",pid=51306,fd=18))
あなたがそれを確認したとき shiny-server
ポートでリッスンしています 3838
、ファイアウォールを変更して、ShinyServerへのトラフィックを許可します。
- sudo ufw allow 3838
訪問 http://your_server_ip:3838
WebブラウザでデフォルトのShinyServerホームページを表示します。これにより、Shiny Serverが表示され、インストールが完了しました。 画面の右側に、エラーが発生しましたというメッセージが表示された小さなボックスが表示されます。 インストールするとき rmarkdown
手順4で、エラーメッセージはインタラクティブなShinyDocに置き換えられます。
注:ポート3838を通過するトラフィックを許可するファイアウォールルールは一時的なものです。 手順3のタスクを完了する前に、ブラウザで https://your_server_ip:3838
何もロードできません。 手順3のタスクを完了すると、そのポートを介してShinyServerにアクセスする必要がなくなります。 手順5でファイアウォールルールを削除します。
これで、ShinyとShiny Serverの両方がインストールされ、ポートでリッスンしています。 3838
.
次のステップでは、Nginxを使用してリバースプロキシを設定し、ドメインにSSL証明書をインストールします。これにより、ポートで安全にShinyServerにアクセスできるようになります。 443
.
ステップ3—リバースプロキシとSSL証明書を使用してShinyServerを保護する
このステップでは、Webサーバーとクライアント間のメッセージングのプロトコルであるWebSocketを介して着信要求をShinyServerに転送するようにNginxを構成します。
メインのNginx構成ファイルを開き、 nginx.conf
、編集用:
- sudo nano /etc/nginx/nginx.conf
このファイルでは、使用するNginxサーバーブロックの構成変数を作成できます。
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
.
終了したら、ファイルを保存して閉じます。
次に、ドメインのサーバーブロックを開きます。
- sudo nano /etc/nginx/sites-available/example.com
検索して編集する location
次のディレクティブのみを含むブロック:
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;
}
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-available/example.com
、ファイルのエラーをテストします。
- sudo nginx -t
エラーがない場合は、次のコマンドを実行して、デフォルトのNginxウェルカムページが読み込まれないようにします。
- sudo unlink /etc/nginx/sites-enabled/default
次に、次のコマンドを実行して変更をアクティブにします。
- sudo systemctl restart nginx
これで、リバースプロキシとSSL証明書を使用してShinyServerを保護できました。 ロードしてみてください https://example.com
(IPアドレスとポート番号を指定せずに)セットアップが機能することを確認します。
次に、インタラクティブなRMarkdownドキュメントのセットアップを構成します。
ステップ4—インタラクティブなRマークダウンドキュメントをホストする
Shiny Serverは、Shinyアプリケーションをホストするだけでなく、インタラクティブなRMarkdownドキュメントをホストするのにも役立ちます。 動作中のShinyサーバーはShinyアプリケーションをホストできますが、インタラクティブなRMarkdownドキュメントをホストすることはできません。 rmarkdown
Rパッケージ。 あなたはインストールすることができます rmarkdown
インストールに使用したのと同じ方法でRパッケージ shiny
手順1のパッケージ。
次のコマンドを使用してインストールします rmarkdown
:
- sudo su - -c "R -e \"install.packages('rmarkdown', repos='http://cran.rstudio.com/')\""
インストールを確認するには、に移動します https://example.com
. 手順2で発生したエラーは、対話型プロットに置き換える必要があります。 または、 https://example.com/sample-apps/rmd/
完全なプロットを単独で表示します。
ステップ5—ShinyServerのポート番号へのパブリックアクセスを拒否する
手順2では、ポート番号を介したShinyServerへのアクセスを許可するファイアウォールルールを作成しました。 これで、 https://example.com
、そのポートへのパブリックアクセスを提供する必要はありません。 このステップでは、そのファイアウォールルールを削除します。
開始するには、次のコマンドを使用して既存のすべてのルールを確認します。
- sudo ufw status numbered
出力は次のようになります。
- OutputStatus: active
-
- To Action From
- -- ------ ----
- [ 1] OpenSSH ALLOW IN Anywhere
- [ 2] Nginx Full ALLOW IN Anywhere
- [ 3] 3838 ALLOW IN Anywhere
- [ 4] OpenSSH (v6) ALLOW IN Anywhere (v6)
- [ 5] Nginx Full (v6) ALLOW IN Anywhere (v6)
- [ 6] 3838 (v6) ALLOW IN Anywhere (v6)
シャイニーサーバーのファイアウォールに関連するルールにはラベルが付けられています 3838
(上記の出力のルール3および6)。 最初のルールを削除します(上記の出力では、ルール3)。
- sudo ufw delete 3
リストから1つのルールを削除すると、ルール番号が変更されます(この場合、ルール6はルール5になります)。 次のコマンドでルール番号を確認します。
- sudo ufw status numbered
出力は前のものと同様になります。
- OutputStatus: active
-
- To Action From
- -- ------ ----
- [ 1] OpenSSH ALLOW IN Anywhere
- [ 2] Nginx Full ALLOW IN Anywhere
- [ 3] OpenSSH (v6) ALLOW IN Anywhere (v6)
- [ 4] Nginx Full (v6) ALLOW IN Anywhere (v6)
- [ 5] 3838 (v6) ALLOW IN Anywhere (v6)
他を削除します 3838
ルール(上記の出力のルール5):
- sudo ufw delete 5
変更を適用するには、ファイアウォールをリロードします。
- sudo ufw reload
シャイニーサーバーは引き続きアクティブですが、ポート番号を介してパブリックにアクセスできなくなります。
結論
これで、ShinyアプリケーションとインタラクティブなRMarkdownドキュメントをホストできる完全に機能するShinyサーバーができました。
展開を開始する準備ができたら、ShinyServerの構成ファイルを次の場所に見つけることができます。 /etc/shiny-server/shiny-server.conf
. デフォルトでは、アプリケーションを提供するように設定されています /srv/shiny-server/
ディレクトリ。これは、Shinyアプリケーションが /srv/shiny-server/app_name
で一般に公開されます https://example.com/app_name/
.
正確なニーズに合わせてShinyServerをカスタマイズする方法の詳細については、 Shiny Server管理者ガイドにアクセスするか、rstudio.comのチュートリアルをお読みください。 インタラクティブなRマークダウンドキュメントの作成について詳しくは、rstudio.comのRマークダウンページをご覧ください。