Shiny Serverの構築（Win+VirtualBox+Ubuntu）


##1. はじめに 
　Rで作ったShinyアプリを、社内など、同一LAN内で共有する方法について書いておきます。今回は、以下の手順でWindows PC（64bit）上にShiny Serverを準備します。他にも、AWS上に構築する、Dockerを利用するなどの方法があるようです。

- Virtual Boxのインストール
- Vitural BoxにUbuntuをインストール
- UbuntuにShiny Server をインストール
- 設定、アプリの設置など

##2. VirtualBoxのインストール
###2-1. VirtualBoxのダウンロード
OracleのサイトからVirtualBoxをダウンロードします。（今回はWindows版）
http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html?ssSourceSiteId=otnjp

###2-2. VirtualBoxのインストール
手順に従ってインストールします。※1

- タイプ：Linux 
- バージョン：Ubuntu(64-bit)
- メモリーサイズ：1024 MB
- ハードディスクのファイルタイプ：VDI(VirtualBox Disk Image)
- 物理ハードディスクにあるストレージ：可変サイズ
- ファイルの場所とサイズ：10 GB

##3. Ubuntuのインストール
###3-1. Ubuntuのダウンロード
 続いて、Ubuntuをダウンロードします。（今回は16.04.2 LTS ※最新版は、17.04）
https://www.ubuntu.com/download/desktop

###3-2. ドライブへのマウント
VBの設定 ＞ ストレージ ＞ 光学ドライブで、DLしたisoファイルを選択

###3-3. インストール
- 仮想マシンを起動して「Install Ubuntu」を選択（日本語を選択できます）
- 「Ubuntuのインストール中にアップデーをダウンロードする」にチェック
- 「ディスクを削除してUbuntuをインストール」にチェック
-  どこに住んでいますか？: Tokyo
-  キーボードレイアウト: 日本語/日本語

##4. Ubuntuとのフォルダ共有設定
　ホスト（Windows）とゲスト（Ubuntu）の間でファイルをやり取りするために、フォルダを共有しておきます。※2

###4-1. 共有設定（Windows側）

- 共有したいフォルダを右クリックして、プロパティ→共有タブを選択
- 詳細な共有 ＞ 「このフォルダを共有する」にチェック
- 「フルコントロール」、「変更」、「読み取り」にチェック

###4-2. 共有設定（VirtualBox側）

- 仮想マシンは停止しておく
- VirtualBoxの設定 ＞ 共有フォルダーからフォルダを追加
- 自動マウントにチェック

###4-3. 共有設定（Ubuntu側）

- Ubuntuを起動
- 「Ctl + Alt + T」で端末（ターミナル）を起動<br>※左側のメニュー上の端末のアイコンを右クリック ＞ Launcherに登録しておくと便利です。
- `sudo apt-get install virtualbox-guest-dkms` でGuest Additionsを追加 ※3
- `sudo gpasswd -a ユーザ名 vboxsf` と入力し、権限を与える
- Ubuntuを再起動
- /media下の、"sf_フォルダ名"で共有される


##5. ネットワーク設定
　ゲスト（Ubuntu側）のネットワークは、ホスト（Windows側）のネットワークとは別に割り当てられるようなので、例えばゲストOSをサーバにしてホストOS側のネットワークから確認する場合には、設定を追加する必要があります。※4
###5-1. ポートフォワーディングの設定

- 設定 ＞ ネットワーク ＞ 高度 ＞ ポートフォワーディング
- 新規ポートフォワーディングルールを追加
- ホストポート「例） 8080」、ゲストポート「例）3838」を記入<br>※マイナーなポートにしてください。<br>※ホストポートは、Shinyアプリにアクセスする際に使います。<http://localhost:8080/app_name/> <br>
※また、ゲストポートは、後で Shiny-server の設定の方で指定しますので覚えておいてください。


##6. R のインストール
　UbuntuにRをインストールします。基本的に、Rstudioのサイトの手順通りに進めます。※5

###6-1. R のインストール

- ゲストOS（Ubuntu）で、「Ctl + Alt + T」でターミナルを起動
- `sudo apt-get install r-base` と記入して、Rをインストール

###6-2. Shiny パッケージのインストール
続いて、Shinyのパッケージも入れておきます。

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

##7. Shiny-server のインストール
同様に、端末からShiny-serverをインストールします。

- `sudo apt-get install gdebi-core`
- `wget https://download3.rstudio.org/ubuntu-12.04/x86_64/shiny-server-1.5.3.838-amd64.deb`
- `sudo gdebi shiny-server-1.5.3.838-amd64.deb`
- 起動の確認 <br>ゲストOS側 http://localhost:3838 <br>ホストOS側 http://localhost:8080　<br>LAN内の他の端末からのアクセスは、http://（ホスト端末のIPアドレス）:8080<br>※「Welcome to Shiny Server!」 が見えていれば成功です。


##8. Shiny-server のスタート、ストップ
　インストールに成功すると、自動でスタートしている様ですが、ここではマニュアルでのShinyサーバーのスタートとストップのコマンドを書いておきます。（詳細は※6）

- スタート： `sudo systemctl start shiny-server`
- ストップ： `sudo systemctl stop shiny-server`


##9. Shiny-server の設定
 　基本的に設定を変更する必要はありませんが、ポートの変更に関してのみ、メモしておきます。※7

- /etc/shiny-server/shiny-server.conf を開いて、listen 3838 の数字を変更<br> ※「5. ネットワーク設定」で指定したゲストポートと同じ数値を指定します。

##10. アプリの設置
　ホスト（Windows側）で作成したアプリを、ゲスト（Ubuntu側）のShiny-serverへ設置をします。

- ホスト側で、「4. Ubuntuとのフォルダ共有設定」で指定したフォルダにアプリをコピー
- ゲスト側で、アプリをコピーし、/srv/shiny-server/ にペースト
- /srv/shiny-server/test/　にアプリを設置した場合のアクセス先は、以下の通り<br>ゲストOS側 http://localhost:3838/test/ <br>ホストOS側 http://localhost:8080/test/ <br>※アクセスできない場合は、権限を与えてみて下さい。<br> ex.) `chmod 777 hoge.txt` 

##11. マルチプロセス化
　運用上、同時に複数のアクセスができないと困るので、マルチプロセス化をしておきます。※8（有償であれば、マルチプロセスに対応しています。Dockerを利用した場合、マルチプロセスに対応しているイメージもあるみたいですね。）


##参考
1. 「VirtualBoxにUbuntu16.04をインストール」<br>http://qiita.com/ykawakami/items/4bae371932110b2e25e3
2. 「WindowsでVirtualBoxを使用してLinux（Ubuntu）を動作させる手順と設定」<br> http://itmemo.net-luck.com/virtualbox-ubuntu/
3. 「VirtualBoxを使おう - Hint & Tips」<br> http://www.linuxmania.jp/virtualbox_02.html
4. 「VirtualBox上のゲストOSにホストOSからNATでアクセスする」<br>http://www.karakaram.com/virtualbox-port-fowarding
5. 「Installing Shiny Server Open Source」<br>https://www.rstudio.com/products/shiny/download-server/
6. 「Shiny Server Professional v1.5.1 Administrator's Guide 1 Getting Started」<br> http://docs.rstudio.com/shiny-server/#stopping-and-starting
7. 「Shiny Server Professional v1.5.1 Administrator's Guide 2 Server Management」<br> http://docs.rstudio.com/shiny-server/#default-configuration
8. 「Shiny Serverあれこれ」<br>https://www.slideshare.net/wdkz/japanr2013-wdkz