本記事は、Shiny Advent Calendar 2017の22日目の記事です。
Shiny100本ノックの第22弾です!
これまで、下記記事などでShinyアプリケーションを「どうやって作るか?」ということを中心に行ってきました。
www.randpy.tokyo
www.randpy.tokyo
今回は、作ったアプリケーションを「公開する」というフェーズをやってみます。
一番シンプルな方法は、https://www.shinyapps.io/での公開です。
ですが、自身で管理しているサーバー上で公開したい、ということもあるかと思います。
ということで、今回はAWS(Amazon Web Service)上にShinyアプリケーションを置いて公開してみましょう。
AWSの準備
Shiny云々の前に、まずAWSにてインスタンスのセットアップを行う必要があります。もし、この辺りがよく分からない場合は、以前にセットアップ手順を紹介したので、そちらをご覧ください。
www.randpy.tokyo
こちらに従ってまずはAWSのインスタンスを立ち上げましょう。
インスタンスを立ち上げる手順はほとんど一緒ですが、Shinyアプリケーションを立ち上げるために、追加でShiny用のポートを設定する必要があります。
AWS上でR(ついでにR studioも)を使用する方法を世界一簡単に解説したでは、Rstudioを使うために、セキュリティグループの設定で、カスタムTCPを選択し「8787」のポートを設定しました。
それと同じように、カスタムTCPを選択し「3838」を追加してください。またソース(アクセスできる場所)は任意の場所としてください。そうしないと、全世界の人の公開されないので。
Shiny Server をインストール
インスタンスが立ち上がったらAWSにログインしましょう。ログイン方法も、AWS上でR(ついでにR studioも)を使用する方法を世界一簡単に解説したでWindowsユーザー・Macユーザー向けにそれぞれ紹介しています。参考にしながらログインしてください。
ログインできたら、早速R・Rstudioをインストールしていきましょう。
$ sudo yum update $ sudo yum install R $ wget https://download2.rstudio.org/rstudio-server-rhel-1.1.383-x86_64.rpm $ sudo yum install --nogpgcheck rstudio-server-rhel-1.1.383-x86_64.rpm
ただし、こちらの「https://download2.rstudio.org/rstudio-server-rhel-1.1.383-x86_64.rpm」のURL部分は、https://www.rstudio.com/products/rstudio/download-server/にある最新バージョンのRstudioに適宜置き換えてください。
RとRstudioが入ったら、Shiny Server・Shinyライブラリをインストールしましょう。
$ sudo su - -c "R -e \"install.packages('shiny', repos='https://cran.rstudio.com/')\"" $ wget https://download3.rstudio.org/centos5.9/x86_64/shiny-server-1.5.6.875-rh5-x86_64.rpm $ sudo yum install --nogpgcheck shiny-server-1.5.6.875-rh5-x86_64.rpm
先ほどと同様に、こちらの「https://download3.rstudio.org/centos5.9/x86_64/shiny-server-1.5.6.875-rh5-x86_64.rpm」のURL部分は、https://www.rstudio.com/products/shiny/download-server/にある最新バージョンに置き換えてください。
そうしましたら、インスタンスにアクセスできる各ユーザーがそれぞれShinyアプリケーションを作れるように、以下を実行してください。
$ sudo /opt/shiny-server/bin/deploy-example user-dirs $ mkdir ~/ShinyApps
Rstudioで作って公開まで
インストールが終わったらRstudioを立ち上げてみましょう。と、その前にパスワードを設定する必要があるので、以下コマンドで設定してください。$ sudo passwd ec2-user
その後、
$ sudo rstudio-server start
を実行するとRstudioが立ち上がります。実行後、「http://[IPv4 パブリック IP]:8787」にブラウザでアクセスしてください。RstudioがAWS上で立ち上がっていることが確認できます。
なお、「IPv4 パブリック IP」部分は、以下のようなインスタンス画面にて確認することができるので、それをコピペしましょう。
事前にShinyライブラリを入れているので、PC上で行っていたのと同じようにShinyアプリケーションを作ることができます。
恐らくRstudio立ち上げ時は、ホームディレクトリにいると思います。そこで、先ほど作った「ShinyApps」ディレクトリに移動してください。
ShinyAppsディレクトリに移動し、例えば以下のShinyアプリケーションを作ったとしましょう。
www.randpy.tokyo
アプリの名前を「clustering」とすると、
ー ShinyApps
ー clustering
ー server.R
ー ui.R
という構成になっていると思います。
この状態で「http://[IPv4 パブリック IP]:3838/ec2-user/clustering」にアクセスしてみてください。
Shinyアプリケーションが公開されていることが分かります。
意外や意外、結構簡単にAWS上で公開することができました!
なお、現在はec2-userというユーザー名でログインしていますが、もし別ユーザーでShinyアプリケーションを作った場合は
「http://[IPv4 パブリック IP]:3838/ユーザー名/アプリケーション名」という風にアクセス先のURLを変更すればOKです。
まとめ
今回は、AWS上でShinyアプリケーションを管理し、公開する方法まで紹介しました。なお、インスタンス作成時の設定で、3838のポートは「どこからでもアクセス可能」という風に設定にしていましたが、ここにIPアドレス制限をかければ社内だけで公開、ということもできます。
また、公開するにあたって
- パスワードを設定
- httpをhttps
なども対応が可能です。
この辺りは機会がありましたら、改めて紹介したいと思います。
皆様も、是非作ったShinyアプリケーションを、AWS等のサーバーを使って全世界に公開してみてください!
使わなくなったインスタンスは必ず停止しておいてください。そうしないとどんどん費用がかさんでしまいます…。