さくらの VPS を借りて RStudio のサーバー版を動かす


![rstudio.png](https://qiita-image-store.s3.amazonaws.com/0/29618/3427b418-6d33-b874-ed80-98d4ef568fe2.png "rstudio.png")

今回、[さくらの VPS](http://vps.sakura.ad.jp/) を借りて RStudio のサーバー版を動かしたので、その顛末を記します。さくらの VPS のサーバーは標準で CentOS 6.4 でした。

## 1.サーバー導入から公開鍵認証方式での ssh 接続まで

### 主な流れ

1. サーバーを申し込む
    - 一番安いコースで初回は 2 ヶ月分で 3000 円弱。V プリカ使用可能
- 送られてきた仮登録メールに載った ip アドレスと root パスワードをメモ
- [VPS コンソール](https://secure.sakura.ad.jp/vpscontrol/) に先ほどの組み合わせでログイン (参考画像 1 参照)
- コンソールからサーバーを起動させる (参考画像 2 参照)
- ssh でログイン
- ユーザー作成
- yum をアップデート
- sudo の設定をする

(参考画像 1)
![sakura01.png](https://qiita-image-store.s3.amazonaws.com/0/29618/b59d4928-b5c3-18a8-b204-810afadd8f2a.png "sakura01.png")

(参考画像 2)
![sakura02.png](https://qiita-image-store.s3.amazonaws.com/0/29618/df3cfcdf-651c-715b-cf86-3983f6adbcc2.png "sakura02.png")



リモートコンソールを利用して以下の操作を行う。
なお、今回利用する vi は ``i`` で編集可能な状態となり、 ``ESC`` でコマンドが使える状態になる。コマンドモードで ``:w`` をすると上書き、``:q`` で編集終了となる。

**ユーザー作成**

```console
useradd ユーザー名 -G wheel # wheel グループで sudo 権限の管理をする
passwd ユーザー名 # パスワード設定
```

**yum をアップデート**

```console
sudo yum update
```

**sudo の設定をする**

```console
sudo vi /etc/pam.d/su
```

下の方法は一般ユーザーでも su できなくなるので use_uid オプションではなく、root_only オプションを使う方法がある。
http://www.pistolfly.jp/weblog/2008/06/suroot.html

```txt:/etc/pam.d/su
---
以下をアンコメント
---
# auth required pam_wheel.so use_uid
↓
auth required pam_wheel.so use_uid
```

```console
sudo vi /etc/login.defs
```

```txt:/etc/login.defs
---
最終行に以下を追加
---
SU_WHEEL_ONLY yes
```

```console
sudo visudo
```

```txt:visudo
---
以下をアンコメント
---
# %wheel ALL=(ALL) ALL
↓
%wheel ALL=(ALL) ALL
```

**root でのログインを禁止する & Port 変更**

```console
sudo vi /etc/ssh/sshd_config
```

```txt:sshd_config
---
以下をアンコメントし no に
---
# PermitRootLogin yes
↓
PermitRootLogin no
---
同上
---
# PasswordAuthentication yes
↓
PasswordAuthentication no
---
Port を変更する
---
Port ${49152 - 65535 の間の任意の整数}
```

**ホームディレクトリ直下に .ssh ディレクトリを作成**

```console
su - 作成したユーザー名
mkdir ~/.ssh
chmod 700 ~/.ssh
```
ここまで行ったら一旦リモートコンソールから離れます。


**公開鍵、秘密鍵の作成 (Windows)**

Windows では putty と WinSCP を利用する方法を採用する。
公開鍵は [puttygen を利用して作る方法](http://javatechnology.net/tool/windows-ssh-publickey-privatekey/) を参考に作成する。
WinSCP で作成した公開鍵を ``/home/ユーザー名/.ssh/authorized_keys`` に移動しておく。

**公開鍵、秘密鍵の作成 (Mac)**

Mac では標準のターミナルから接続する方法を採用する。

```console
mkdir ~/.ssh # ホームディレクトリ直下に .ssh ディレクトリを作成する
cd ~/.ssh
ssh-keygen -t rsa
scp 公開鍵のファイルまでのパス root@xxx.xxx.xxx.xxx:/home/作成したユーザー名/.ssh/authorized_keys
```

**公開鍵、秘密鍵の名称について**

一般的に ``id_rsa.pub.${ドメイン名}``  ``id_rsa.${ドメイン名}`` のフォーマットで命名されるらしい。たとえば google.com であれば、``id_rsa.pub.google.com`` ``id_rsa.google.com`` といったセットとなる。

**sshd のリスタートなど**

再びリモートコンソールに戻ります。

```console
vi ~/.ssh/authorized_keys # 先ほど生成した公開鍵をはりつける
sudo chown ユーザー名:ユーザー名 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
sudo /etc/init.d/sshd restart # 先ほど編集した sshd_config がやっと反映
```

これでリモートコンソールからの操作は終了です。

**ssh での接続 (Windows)**

putty で秘密鍵を利用して接続します。

**ssh での接続 (Mac)**

簡単に接続するため、まず config を作成する。

```console
vi ~/.ssh/config
```

```txt:config
Host    任意の名前
        HostName    IPアドレス
        Port    ポート
        User    作成したユーザー名
        IdentifyFile    秘密鍵へのパス
```

作成した config を使って ssh 接続します。

```console
ssh 設定した名前
```

**ここまでの参考サイト**
[さくらVPS 1GB に CentOS6.4 を入れて、 環境構築1 - ssh など - Qiita](http://qiita.com/mugyuu/items/533f591cf5d79b81a3aa)
[さくらVPS/Cent OS 6.4 初期状態から鍵認証SSHでの接続まで[Railsサーバへの道] - 酒と泪とRubyとRailsと](http://morizyun.github.io/blog/sakura-vps-centos63-ssh-setup/)

## 2. 各種セットアップ

**主な流れ**

1. iptables (ファイアウォール) 設定
- MeCab インストール
- R インストール
- R Studio インストール

**iptables 設定**

まず iptables6 を無効化

```console
sudo vi /etc/modprobe.d/disable-ipv6.conf
```

```txt:disable-ipv6.conf
---
以下を追加
---
options ipv6 disable=1
```

reboot 後も起動しないように設定

```console
sudo /etc/init.d/ip6tables stop
sudo chkconfig ip6tables off
```

確認

```console
chkconfig --list | grep ip6tables
```

すべて off になっていれば OK
次に postfix の設定

```console
sudo vi /etc/postfix/main.cf
```

```main.cf
---
inet_protocols を all から ipv4 へ変更
なお、``IPv4`` と大文字を使って書くとエラーとなるので注意
---
inet_protocols = all
↓
inet_protocols = ipv4
```
iptables の設定

```console
sudo vi /etc/sysconfig/iptables
```

```txt:iptables
---
基本的に以下をコピペで貼り付けるが、
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 自分の ssh ポート -j ACCEPT
を一行追加する
---
*filter
:INPUT   ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT  ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]

-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH, HTTP, HTTPS, MySQL
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 433 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 25 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306  -j ACCEPT

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

COMMIT
```

空白行に半角スペースがあるなどするとエラーが発生するので注意。

iptables 再起動

```console
sudo /etc/init.d/iptables restart
chkconfig iptables on
chkconfig --list | grep '3:on' # iptables があれば OK
```

**ここまでの参考サイト**

[さくらのVPSへのiptablesの設定 - 9ensanのLifeHack](http://9ensan.com/blog/server/sakura-vps-iptables/)

## Mecab のインストール

https://mecab.googlecode.com/ を見る

```console
sudo yum install glibc glibc.i686 gcc* # gcc のインストール
mkdir ~/tmp
cd ~/tmp
wget https://mecab.googlecode.com/files/mecab-0.996.tar.gz
tar zxvf mecab-0.996.tar.gz
cd mecab-0.996
./configure
make
sudo make install
```

mecab 辞書のインストール

```console
cd ~/tmp
wget http://downloads.sourceforge.net/mecab/mecab-ipadic-2.7.0-20070801.tar.gz
tar zxvf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
./configure --with-charset=utf8
make
sudo make install
mecab # テスト
sudo vi /etc/ld.so.conf
```

```txt
---
最終行に以下を追加
---
/usr/local/lib
```
```console
sudo ldconfig # 共有ライブラリを認識させる
```

## R 関係のインストール

R のインストール

```console
sudo yum install R
```

R Studio のインストール準備 (最新版は 0.98)

```console
sudo yum install openssl098e compat-libgfortran-41
cd ~/tmp
wget http://download2.rstudio.org/rstudio-server-0.97.551-x86_64.rpm
sudo yum install --nogpgcheck rstudio-server-0.97.551-x86_64.rpm
sudo rstudio-server verify-installation # install check
sudo rstudio-server start # RStudio Server 起動
sudo chkconfig rstudio-server on # chkconfig に登録
```

iptables 関係

```console
sudo vi /etc/sysconfig/iptables
```

```txt:iptables
---
以下を追加
---
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8787 -j ACCEPT
```

```console
sudo /etc/init.d/iptables restart
```

これで http://xxx.xxx.xxx.xxx:8787 (xxx.xxx.xxx.xxx は IP アドレス) にアクセスすることで、
ネット環境さえあればいつでも RStudio が利用可能に。

![rstudio.png](https://qiita-image-store.s3.amazonaws.com/0/29618/3427b418-6d33-b874-ed80-98d4ef568fe2.png "rstudio.png")

また、R で MeCab を利用するには RStudio で以下を実行すれば良い。

```R
install.packages ("RMeCab", repos = "http://rmecab.jp/R")
```

![rstudio02.png](https://qiita-image-store.s3.amazonaws.com/0/29618/5c6f5b99-6e64-79f3-61fa-a15a5cc10065.png "rstudio02.png")