Rstudio serverをWindows10で動かします。勉強会参加者に自宅マシン上のRstudio serverを開放して使ってもらう為、複数のユーザーアカウントを設定して、インターネットからアクセスできるようにしてみました。
参考:
https://qiita.com/kazutan/items/6048fa8d46683dcad788
動機
統計の勉強会をRを使ってやりはじめたところ、英語版WindowsユーザーやMacユーザーかつPCリテラシー低くて文字コード問題を自力で解決できない参加者が続出しました。ほんとはそれぞれの環境でちゃんと動くようにサポートしつつ頑張ってもらうのが良いんだと思うんですが、エンジニアじゃない参加者が多い為か勉強会がぜんぜん進まなくなっちゃった為、とりあえず進めるためにR studio serverでひと通り動く環境を用意しておいて全員が動かして確認できるようにしちゃう事にしました。
やったこと
- MSYS2をインストール
- MSYS2環境をアップデート
- VirtualBoxをインストール
- Vagrantをインストール
- 仮想マシンを起動
- 仮想マシンにRをインストール
- Vagrantfileを書き換え
- ローカルネットワークからアクセスしてみる
- 複数ユーザー用にIDとパスワードを追加
- インターネットからアクセスしてみる
- 追記: 日本語フォントをインストールする
試した環境
windows10 64bit
cpu: Ryzen7 1700X
MB: ROG STRIX X370-F GAMING
msys2-x86_64-20180531
VirtualBox-5.2.22-126460-Win
vagrant_2.2.1_x86_64
手順
ざっくり説明
1. MSYS2をインストール
MSYS2インストーラーを以下からダウンロードします。
https://sourceforge.net/projects/msys2/
2. MSYS2環境をアップデート
MSYS2を実行します。僕の環境は64bitなので64bit版を使います。
アップデートしておきます
$ update-core
#終わったら一度MSYS2シェルを閉じて再度開きます
$ pacman -S bash
$ pacman -Syu
$ pacman -Sl
.bash_profileにMinGWのPATHを加えます
$ echo 'export PATH=/mingw64/bin:$PATH' > $HOME/.bash_profile
3. VirtualBoxをインストール
以下からVirtualBoxのインストーラーをダウンロードします。
https://www.virtualbox.org/
4. Vagrantをインストール
以下からVagrantをダウンロードします。
https://www.vagrantup.com/
5. 仮想マシンを起動
まずvagrantのイメージファイルや設定を保存するフォルダを作成します。ここにvagrant環境のあれこれが全部保存されます。
> mkdir c:\Users\自分のアカウント名\Vagrant\ubuntu\
> cd c:\Users\自分のアカウント名\Vagrant\ubuntu\
続いて、vagrantで使う仮想マシンのBOXデータをどこからダウンロードしてくるか指定します。今回はbentoにあるubuntu-18.04 boxを使いました。vagrant initで設定ファイルであるVagrantfileがカレントフォルダに作成しますが、ここにどこからダウンロードしてくるかも記載されているようです。
> vagrant init bento/ubuntu-18.04
Vagrantfile作ったぞいとか言ってるので上手くいったっぽいです。
A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.
vagrant upで仮想マシンを立ち上げます。BOXファイルがダウンロード済みならローカルに保存されているものを使用しますが、今回は初回なので指定のものがダウンロードされます。
> vagrant up
これで仮想マシンが起動した筈です。ちゃんと起動したか確認しましょう。GUI版のvertual boxで確認すると分かりやすいのでwindowsのスタートメニューから起動してみます。
こういう感じのwindowsが開きます。ubuntu1804が「実行中」となってれば起動成功です。こうなってないようならダウンロードに失敗したか、仮想環境の起動に失敗したかのどちらかだと思います。
僕の環境では以下の2つの問題が発生しました。
まず、ウィルス対策ソフトが原因でBOXのダウンロードが失敗しました。僕の環境ではKasperskyがブロックしてしまってダウンロードできませんでしたので除外リストに追加してダウンロードしました。エラーメッセージにもダウンロードが失敗したぞい的なのが出るし、ウィルス対策ソフトが何か言ってくると思いますので確認してください。
上記を修正してvagrant upしたところ、今度は仮想環境サポートが無効である事により起動に失敗しました。仮想環境サポートというのはCPUの機能のようで、オンオフの設定はマザーボードがやっているようです。仮想環境を使ったことがない人は大抵無効になってるようです。virtual box のGUIに下の画像のようなメッセージが出てるときは仮想環境サポートが無効な為に仮想環境の起動に失敗しています。仮想環境サポートはBIOSメニューで設定できますので、PCを再起動してBIOSへ行きましょう。
AMDのCPUだとSVM (support virtual machineかな?) が仮想環境サポート機能であるようです。Intelは別の機能名になってるようです。SVM Mode を Enabled にしたら設定を保存して起動します。
仮想環境の起動に成功したらvagrant sshでSSH接続します。鍵の受け渡しはやっといてくれるみたいですね。
vagrant ssh
Welcome to Ubuntu 18.04.1 LTS (GNU/Linux 4.15.0-29-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
System information as of Tue Nov 27 14:30:12 UTC 2018
System load: 0.0 Processes: 88
Usage of /: 4.0% of 61.80GB Users logged in: 0
Memory usage: 6% IP address for eth0: 10.0.2.15
Swap usage: 0%
* MicroK8s is Kubernetes in a snap. Made by devs for devs. One quick
install on a workstation, VM, or appliance.
- http://bit.ly/microk8s
3 packages can be updated.
0 updates are security updates.
Last login: Tue Nov 27 08:55:40 2018 from 10.0.2.2
vagrant@vagrant:~$
プロンプトがvagrant@vagrant:~$に変わりました。ubuntu仮想マシンにssh接続できたようです。
6. 仮想マシンにRをインストール
ubuntuでRをインストールすると古いのが入っちゃうことがあるようなので、最新のが入るようにaptのソースリストに書き加えます。
$ echo "deb https://cran.rstudio.com/bin/linux/ubuntu trusty/" | \
sudo tee -a /etc/apt/sources.list.d/cran.list
次にgpg鍵を登録します。
$ gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys E084DAB9
$ gpg -a --export E084DAB9 | sudo apt-key add -
新しいマシンなのでアップデートしておきます。
$ sudo apt-get update
$ sudo apt-get upgrade
Rをインストールします。
$ sudo apt-get install r-base-dev
RStudioServerをインストールします。公式サイトのインストール手順をそのままやってますがversionごとにURLが違うようなので、公式の最新コードを実行するようにしてください。
$ sudo apt-get install gdebi-core
$ wget https://download2.rstudio.org/rstudio-server-1.1.463-amd64.deb
$ sudo gdebi rstudio-server-1.1.463-amd64.deb
これでインストールを完了しました。
7. Vagrantfileを書き換え
インストールすると自動でRstudio serverが起動してくれます。標準でポート8787でrstudio serverがスタンバイしていますが、仮想マシンはホストマシンからルーターを介して繋がってるような状態になってるので、ポート転送を設定してやらないとポートにアクセスできません。一度ssh接続を解除してvagrantfileを書き換えます。
ssh接続の解除(仮想マシンは起動したままです)
$ exit
vagrantfileをメモ帳か何かで開いて書き換えてポート転送を設定します。以下だとホストの1111ポートが仮想マシンの8787ポート(rstudio-serverが待機してるポート)に転送されます。
# config.vm.network "forwarded_port", guest: 80, host: 8080
↓ 上の行を探して下のように書き換えます
config.vm.network "forwarded_port", guest: 8787, host: 1111
書き換えたらvagrantを再起動します。
vagrant reload
8. ローカルネットワークからアクセスしてみる
ブラウザからアクセスしてみましょう。仮想マシンのIPはvagrantを実行中のwindowsマシンのIPと同じですので、コマンドプロンプトからipconfigしてローカルネットワーク上でのIPを調べましょう。下の画像の場合は192.168.1.151ですね。
rstudio-serverはdefaultで8787ポートに待機しています。ブラウザのURL入力欄に以下のURLを入力してアクセスしてみましょう。
http://192.168.1.151:1111
アクセスできました。ID、パスワードとも'vagrant'でログインできます。
9. 複数ユーザー用にIDとパスワードを追加
rstudio serverは同一IDのユーザーがログインしてくると先にログインしてたブラウザからの接続は切断されちゃうようです。自分ひとりで使うならそのままで大丈夫なんですが、今回は複数人が同時にログインする想定なので人数分のIDを登録しておきます。sudo adduser hogeで追加できます。ID「user1」を追加したい場合はsudo adduser user1です。いくつか入力を要求されますが必須なのはパスワードだけです。今回はユーザー情報は空欄のままにしました。
$ sudo adduser user1
Adding user `user1' ...
Adding new group `user1' (1002) ...
Adding new user `user1' (1002) with group `user1' ...
Creating home directory `/home/user1' ...
Copying files from `/etc/skel' ...
Enter new UNIX password:
Retype new UNIX password:
Sorry, passwords do not match
passwd: Authentication token manipulation error
passwd: password unchanged
Try again? [y/N] y
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for user1
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
誤って作成したIDは以下のコマンドで「user1」を削除できます。
sudo deluser user1
10. インターネットからアクセスしてみる
ローカルネットワーク内からのアクセスは出来ましたが、今回は勉強会参加メンバーが自宅からアクセス出来るようにしたいのでインターネットからアクセス出来るようにしておきます。ローカルネットワークとの違いは2点、ローカルIPでなくグローバルIPにアクセスする事と、ルーターやファイヤーウォールで塞がってるポートを開放する必要があるかもって事ですね。
グローバルIPを教えてくれるサイトはあちこちにありますので適当なのを使って探します。今どきのご自宅ネットワーク環境だと動的にグローバルIPが変わっちゃう環境が多いと思いますが、今回は短期間だけ使えれば良いのでダイナミックDNSとかはやらずに、グローバルIPが変わる度に参加者に連絡することにしました。
https://www.cman.jp/network/support/go_access.cgi
rstudio serverが接続しているのとは別の回線で接続したマシンのブラウザに上記で調べたグローバルIPを入力してアクセスします。グローバルIPが222.222.222.222の場合は以下となります。
``
html://222.222.222.222:1111
ルーターとか使ってないようならすんなり繋がるかも。
![01v.jpg](https://qiita-image-store.s3.amazonaws.com/0/277233/f62dd710-c247-d1ad-b7d4-723be3078f54.jpeg)
ダメな場合は以下を確認)
僕の自宅マシンはwifiルーター経由でインターネット接続していますのでポート転送を設定しないと繋がりません。詳しくはお使いのルーター+ポート開放でググッてください。
BUFFALOで1111ポートを転送する設定はこんな感じです。
<img width="739" alt="101.PNG" src="https://qiita-image-store.s3.amazonaws.com/0/277233/a070430c-cb82-a1be-8a2d-9bccc57a8315.png">
また大抵のルーターがそうだと思うんですが外部からのアクセスを遮断する機能がありますので、その場合は一部機能を解除する必要があるかもしれません。同じくBUFFALOだとこんな感じの画面がファイアーウォールの設定ページ。僕の環境では全部有効にしたままで接続できました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277233/c1363686-179b-45e4-f45c-ab0e4d6d46c5.png)
また、今どきのウィルス対策ソフトはファイアーウォールを標準装備してますので、これもポートを開けてやらないと繋がらなかったりします。これもソフト名+ポート開放でググッてください。登録しなくても繋がる場合は別に弄らなくて良いと思います。
kasperskyだとこの辺にやり方が書いてあります。
https://support.kaspersky.com/12950#block1
というわけでrstudio serverがどこからでも使えるようになりました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277233/cdb0225e-41fd-21a0-7dd8-9727a4b1f16a.png)
やったね!
## 追記: グラフで日本語を使えるようにする
Ubuntu18.04のXウィンドウ版は標準で日本語フォントが入っているようですが、コマンドラインにはインストールされないようで、RStudioServerのグラフに日本語を使おうとすると豆腐になっちゃいます。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3237373233332f34643032353032322d643964302d323638372d323664382d3131383036653364356162642e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/277233/0cb1386f-b616-524e-d465-1acec4e95fcc.png)
これだと何かと都合が悪いので日本語フォントをインストールしました。まず、仮想マシンにssh接続します。
cd c:\Users\ユーザー名\Vagrantのあるフォルダ
vagrant up
vagrant ssh
仮想マシンにインストールされてるフォントの一覧を確認します。
$ fc-list
/usr/share/fonts/truetype/dejavu/DejaVuSerif-Bold.ttf: DejaVu Serif:style=Bold
/usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf: DejaVu Sans Mono:style=Book
/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf: DejaVu Sans:style=Book
/usr/share/fonts/truetype/dejavu/DejaVuSans-Bold.ttf: DejaVu Sans:style=Bold
/usr/share/fonts/truetype/dejavu/DejaVuSansMono-Bold.ttf: DejaVu Sans Mono:style=Bold
/usr/share/fonts/truetype/dejavu/DejaVuSerif.ttf: DejaVu Serif:style=Book
やはり日本語フォントがないようですのでインストールします。ubuntu18.04のXウィンドウ版で標準になっているgoogle notoフォントを使おうと思います。ちなみにnotoはno more tofuの略で、マルチバイト文字が表示できなくて豆腐になっちゃうのを防ごうという動機で作られたフォントなんだそうです。ありがたやですね。
sudo apt-get install fonts-noto-cjk
インストールできたか確認しておきます。
vagrant@vagrant:~$ fc-list : family
Noto Sans Mono CJK TC,Noto Sans Mono CJK TC Bold
Noto Sans Mono CJK TC,Noto Sans Mono CJK TC Regular
Noto Sans Mono CJK SC,Noto Sans Mono CJK SC Regular
DejaVu Sans Mono
Noto Serif CJK JP
Noto Serif CJK KR
Noto Sans CJK SC,Noto Sans CJK SC Regular
Noto Serif CJK SC
Noto Serif CJK TC
Noto Sans CJK TC,Noto Sans CJK TC Regular
Noto Sans CJK KR,Noto Sans CJK KR Bold
Noto Sans CJK JP,Noto Sans CJK JP Bold
Noto Sans CJK SC,Noto Sans CJK SC Bold
DejaVu Sans
Noto Sans CJK TC,Noto Sans CJK TC Bold
Noto Sans Mono CJK SC,Noto Sans Mono CJK SC Bold
Noto Sans Mono CJK JP,Noto Sans Mono CJK JP Regular
Noto Sans CJK JP,Noto Sans CJK JP Regular
Noto Sans Mono CJK KR,Noto Sans Mono CJK KR Regular
DejaVu Serif
Noto Sans CJK KR,Noto Sans CJK KR Regular
Noto Sans Mono CJK KR,Noto Sans Mono CJK KR Bold
Noto Sans Mono CJK JP,Noto Sans Mono CJK JP Bold
無事インストールできたようなので、RStudioServerで確認してみます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277233/b8430583-d05b-f375-7c0a-a7b9385a17d2.png)
やったね