Conoha VPSにRstudio serverを置いてみた

Conoha VPSにRstudio serverを置いてみます。

## 何故VPSに置いたか

今回はconohaの2CPU/RAM1GBプランのサーバーにRstudio serverを置いてみましたが、コンパイルが走るpackageのインストールなどではかなり時間が掛かってしまいます。今回は勉強会で公開する為に変な使われ方をしても平気なようにVPSを選択しましたが、重い計算を走らせるつもりならAWS EC2などで使うときだけゴツいインスタンスを立てるなどした方が良さそうです。VPSだとサーバーを削除しない限り課金は止まりませんので、普通の使い方だとVPSで立てるというやり方はイマイチかも知れません。

ちなみに2CPU/RAM1GBだと、以下のようにpackageをまとめてインストールしようとすると軽く1時間ぐらい待たされます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277233/51c37ca4-dd53-59f6-0877-ab37b5001bb8.png)

本エントリではポート変更やrootログインの無効化などを行っていませんが、そのままだと総当たり攻撃を受けまくりますので対処してください。
https://qiita.com/studio_haneya/items/455b6a5acf8095c08f1a


## 試行環境
手元環境: Windows10＋tera term
VPS環境: conoha VPS 2CPU/RAM1GB ubuntu18.04


## VPSサービスを契約してサーバーを立ち上げる
まず、Conohaアカウントを作ってサーバーを立ち上げます。
https://www.conoha.jp/

2CPU 1GBのサーバーを作ってみました。Conohaはサーバーのスペックを増減するときも日割りで計算されるので適当に選んで足りなかったら後でいつでも変更できるのが良いですね。

ネームタグをクリックするとそのサーバーの詳細画面に入れます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277233/dff539ec-a23d-c3b8-2198-9a0fb6129e43.png)
conohaのサーバーの設定方法やターミナルからのログイン方法は公式サイトに詳しいインストラクションがありますので、こちらも参考にしましょう。
https://support.conoha.jp/v/study-03/

## ターミナルでログインしてsudoユーザーを作る

conohaのインストラクション通りtera termを使いたいと思います。最新バージョンをダウンロードしてインストールします。
https://ja.osdn.net/projects/ttssh2/releases/
<img src="https://qiita-image-store.s3.amazonaws.com/0/277233/3298bf7e-c749-1673-7270-e16501798471.png">
インストール出来たらtera termを起動します。これからアクセスするVPSのグローバルIPとID、パスワードを入力すればVPSにアクセス出来ます。IPはconohaサイトのコントロールパネルに書いてありますので、これを使います。下の画像だとIPが111.11.11.111であるサーバーにアクセスしようとしています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277233/46707ed5-bf23-d883-4d76-774d158728cd.png)
IDはroot、パスワード（パスフレーズ）はconohaでサーバーを立てるときに入力したものです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277233/114df89a-5458-a024-6abb-5f819d6be0e4.png)

続いて一般ユーザーアカウントを作ります。いまはroot権限でログインしていますが、rootは何でも出来て危険なので権限を制限した一般ユーザーから実行するようにしなきゃいけないそうです。ここではhogeというユーザーを作っていきたいと思います。実際にはhogeではなくなんかそれっぽいアカウント名を決めてくださいね。

```
adduser hoge
```
なお、間違って作成したアカウントhogeをadduserで作成したフォルダごと消去するには以下を実行します。

```
sudo userdel -r hoge
```
adduserで一般ユーザーが作れましたが追加したばかりのユーザーはsudoが実行できません。sudoが実行できないとRstudio serverをインストールできませんから、上記で作ったユーザーhogeに権限を付与します。sudoが実行できるかどうかは/etc/sudoersに書かれているので、このファイルの書き換える専用コマンドであるvisudoを実行します。

```
visudo
```
開いた/etc/sudoersには既に%adminグループと%sudoグループがあります。新たに追加しなくても%sudoグループにユーザーを追加してsudo権限を付与したいと思います。

```
# User privilege specification
root    ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo   ALL=(ALL:ALL) ALL
```
hogeというユーザーを%sudoグループに追加します。

```
sudo usermod -aG sudo hoge
```
グループに追加できたか確認しておきます。最後に.27(sudo)とあるので追加できているようです。

```
# id hoge
uid=1000(hoge) gid=1004(hoge) groups=1004(hoge).27(sudo)
```
これでsudoが使えるようになった筈ですので、一旦ログアウトします。以下を実行するとtera termが閉じますので、再度tera termを実行して次は作成したアカウントhogeでログインします。

```ruby:terminal
exit
```

## Rstudio serverのインストール

ubuntuでRをインストールすると古いのが入っちゃいます。古いRだと大抵のパッケージが動かなくて地獄なので、最新のが入るようにaptのソースリストにダウンロード元のURLを指定しておきます。ダウンロード元URLはubuntuのバージョンによって違うので、使っているubuntuの開発コードを確認しましょう。

```ruby:terminal
cat /etc/lsb-release

DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.2 LTS"
```
開発コードはbionicのようです。ubuntu16.04はtrustyなので同じubuntuでもバージョンが違うと開発コードも違うという事のようです。各開発コードごとのダウンロードURLは以下で公式情報が確認できます。
https://cran.r-project.org/bin/linux/ubuntu/README.html

2019年3月時点でのbionic用URLは「https://cran.rstudio.com/bin/linux/ubuntu bionic-cran35/」です。ソースリストである/etc/apt/sources.list/に上記を指定する行を追加します。

```ruby:terminal
sudo vim /etc/apt/sources.list
```

```ruby:追加する行
deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/
```
ダウンロード元の公開鍵を登録します

```ruby:terminal
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E298A3A825C0D65DFD57CBB651716619E084DAB9
```
これで準備が整ったので、Rをインストールします。

```ruby:terminal
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install r-base-dev
```
RStudioServerをインストールします。公式サイトのインストール手順をそのままやってますがversionごとにURLが違うようなので、公式の最新コードを実行するようにしてください。

```ruby:terminal
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
```
これでインストールを完了しましたのでアクセスしてみましょう。グローバルIPはVPSの管理画面から見られる筈です。例えばConohaならサーバー情報ページのネットワーク情報のところを開くとIPアドレスと書かれた右側に表示されています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277233/76addf4a-45c2-f6e1-5197-073ce74e0c31.png)
Rstudio serverのポートはデフォルトで8787ですので、もしIPが「111.11.11.111」である場合はブラウザのURL欄に「111.11.11.111:8787」と記入してアクセスするとRstudio serverのログイン画面が表示される筈です。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277233/5ef2eaae-bfa3-47f1-c880-310a81afeb20.png)

## Rが上手く入らないとき
僕の環境では最新のRが上手く入りませんでした。その場合は最新バージョンをインストールするのではなく、アップデートすると上手くいくようです。
https://askubuntu.com/questions/1046289/unable-to-install-r-3-5-0-in-ubuntu-bionic-beaver-18-04

１. まず/etc/apt/sources.listから追加した行を消去します
２. 要らないのを消します

```ruby:terminal
sudo apt-get autoremove
sudo apt-get update
sudo apt-get upgrade
```
３. 古いバージョンのRを入れます

```ruby:terminal
sudo apt-get install r-base
```
４. /etc/apt/sources.listにダウンロード元のURLを追加します

```ruby:追加する行
deb https://cloud.r-project.org/bin/linux/ubuntu bionic-cran35/
```
５. パッケージのupgradeを実行します

```ruby:terminal
sudo apt-get update
sudo apt-get dist-upgrade
```

## Rstudio用のポートを変更しておく
Rstudio serverの設定については以下が詳しいので見ておきましょう。
http://memorandum2015.sakura.ne.jp/docs/server/configuration.html

とりあえずポートだけ変更しておきます。まず、デフォルトでは存在しない設定ファイルである/etc/rstudio/rserver.confをtouchコマンドで作ってから、vimで書き換えます。このファイルはsudoじゃないと書き換えられません。

```ruby:terminal
sudo touch /etc/rstudio/rserver.conf
sudo vim /etc/rstudio/rserver.conf
```
ポート指定の１行を追加して保存します。以下だと1111ポートに指定します。

```ruby:terminal
www-port=1111
```
書いた内容に問題ないか確認しておきます。何も返事がなければ正常に書き換えが出来てます。

```ruby:terminal
sudo rstudio-server test-config
```
問題ないようなら再起動します。

```ruby:terminal
sudo reboot
```
ブラウザでアクセスして確認しておきましょう。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/277233/5ef2eaae-bfa3-47f1-c880-310a81afeb20.png)

## パッケージのインストールに必要なライブラリのインストール
Rのパッケージをインストールする際に必要なライブラリをインストールしておきます。入ってなくてもRstudio自体は動きますが、install.packages()するときにエラーが出てしまいますので入れておいた方が良いと思います。

httr, RCurlに必要なlibcurl4-openssl-devをインストール

```ruby:terminal
# sudo apt-get install libcurl4-openssl-dev
```
RMySQLに必要なlibdbd-mysql libmysqlclient-devをインストール

```ruby:terminal
# sudo apt-get install libdbd-mysql libmysqlclient-dev
```
maptoolsに必要なlibgeos-devをインストール

```ruby:terminal
# sudo apt-get install libgeos-dev
```
XMLに必要なlibxml2-devをインストール

```ruby:terminal
# sudo apt-get install libxml2-dev
```

## Rstudio server用ユーザーを追加する
linuxユーザーのIDとパスワードがそのままRstudio serverのユーザーIDとパスワードとして使われるようです。sudoersにする必要はありませんので、単にユーザーを作ります。

```ruby:terminal
sudo adduser huga
```
ここで設定したIDとパスワードでRstudio serverにログインできるようになります。

## グラフに日本語を表示できるようにする
Ubuntu18.04のXウィンドウ版は標準で日本語フォントが入っているようですが、コマンドラインにはインストールされないようで、RStudioServerのグラフに日本語を使おうとすると豆腐になっちゃいます。
![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3237373233332f34643032353032322d643964302d323638372d323664382d3131383036653364356162642e706e67.png](https://qiita-image-store.s3.amazonaws.com/0/277233/0cb1386f-b616-524e-d465-1acec4e95fcc.png)
インストールされてるフォントの一覧を確認します。

```ruby:terminal
$ 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
```
インストールできたか確認しておきます。

```
$ 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)

というわけでVPS上にRstudio serverが作れました。
やったね！