序章

多くの人が統計およびグラフィックアプリケーションにオープンソースのプログラミング言語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 80443. 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アドレスも指します。
  • ドメインの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パッケージをインストールして、すべてのユーザーが利用できるようにするには、次のコマンドを使用します。

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

su -、コマンドをrootとして実行します。 The c フラグは、によって参照されるユーザーにコマンドを渡します su -. この場合、引用符で囲まれたコマンドはsudoに渡されます。

完了すると、出力にインストールが完了したことが示され、ダウンロードされたソースパッケージの場所が特定されます。

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

Shinyを配置すると、Shiny Serverをインストールして、ブラウザにデフォルトのウェルカム画面を表示できます。

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

この手順では、Shiny Serverをインストールし、ShinyServerがリッスンするポートを通過するトラフィックを許可するようにファイアウォールを調整します。

執筆時点で入手可能なUbuntuの最新バージョンは、 Shiny Server1.5.18.987です。 次のコマンドを使用して、64ビットアーキテクチャ用のビルド済みバイナリをダウンロードします。

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

次に、次のコマンドを使用して、 RStudioShinyServerダウンロードページにリストされているSha256チェックサムを使用してダウンロードしたファイルの整合性を確認します。

  1. sha256sum shiny-server-1.5.18.987-amd64.deb

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

シャイニーサーバーのインストールはGDebiに依存しています。 GDebiはローカルにインストールするツールです deb パッケージを同時に解決し、追加の依存関係をインストールします。

パッケージリストを更新してから、 gdebi-core パッケージ:

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

次に、ShinyServerを次のようにインストールします gdebi 指図:

  1. sudo gdebi shiny-server-1.5.17.973-amd64.deb

インストールの確認を求めるメッセージが表示されます。

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

タイプ 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:

  1. sudo ss -plut | grep -i shiny

The -plut フラグはどこを調査します shiny-server 聞いています:

  • pprocessesの略で、socketを使用するプロセスを示しています。
  • l listening の略で、リスニングソケットを表示します。
  • 該当する場合、 u UDPソケットが表示されます。
  • 該当する場合、 t TCPソケットが表示されます。

出力には次の行が表示されます。

Output
tcp LISTEN 0 511 *:3838 *:* users:(("shiny-server",pid=51306,fd=18))

あなたがそれを確認したとき shiny-server ポートでリッスンしています 3838、ファイアウォールを変更して、ShinyServerへのトラフィックを許可します。

  1. 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、編集用:

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

このファイルでは、使用するNginxサーバーブロックの構成変数を作成できます。

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

/etc/nginx/nginx.conf
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.

終了したら、ファイルを保存して閉じます。

次に、ドメインのサーバーブロックを開きます。

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

検索して編集する location 次のディレクティブのみを含むブロック:

/etc/nginx/sites-available/example.com
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、ファイルのエラーをテストします。

  1. sudo nginx -t

エラーがない場合は、次のコマンドを実行して、デフォルトのNginxウェルカムページが読み込まれないようにします。

  1. sudo unlink /etc/nginx/sites-enabled/default

次に、次のコマンドを実行して変更をアクティブにします。

  1. 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:

  1. 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、そのポートへのパブリックアクセスを提供する必要はありません。 このステップでは、そのファイアウォールルールを削除します。

開始するには、次のコマンドを使用して既存のすべてのルールを確認します。

  1. sudo ufw status numbered

出力は次のようになります。

  1. Output
    Status: active
  2. To Action From
  3. -- ------ ----
  4. [ 1] OpenSSH ALLOW IN Anywhere
  5. [ 2] Nginx Full ALLOW IN Anywhere
  6. [ 3] 3838 ALLOW IN Anywhere
  7. [ 4] OpenSSH (v6) ALLOW IN Anywhere (v6)
  8. [ 5] Nginx Full (v6) ALLOW IN Anywhere (v6)
  9. [ 6] 3838 (v6) ALLOW IN Anywhere (v6)

シャイニーサーバーのファイアウォールに関連するルールにはラベルが付けられています 3838 (上記の出力のルール3および6)。 最初のルールを削除します(上記の出力では、ルール3)。

  1. sudo ufw delete 3

リストから1つのルールを削除すると、ルール番号が変更されます(この場合、ルール6はルール5になります)。 次のコマンドでルール番号を確認します。

  1. sudo ufw status numbered

出力は前のものと同様になります。

  1. Output
    Status: active
  2. To Action From
  3. -- ------ ----
  4. [ 1] OpenSSH ALLOW IN Anywhere
  5. [ 2] Nginx Full ALLOW IN Anywhere
  6. [ 3] OpenSSH (v6) ALLOW IN Anywhere (v6)
  7. [ 4] Nginx Full (v6) ALLOW IN Anywhere (v6)
  8. [ 5] 3838 (v6) ALLOW IN Anywhere (v6)

他を削除します 3838 ルール(上記の出力のルール5):

  1. sudo ufw delete 5

変更を適用するには、ファイアウォールをリロードします。

  1. 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.comRマークダウンページをご覧ください。