AWS Cloud9 と ConoHa VPS を連携して Rails の開発環境を構築

##概要
[Ruby on Rails チュートリアル](https://railstutorial.jp/)でRailsを学ぶための開発環境を作成しました。
開発環境のCloud9は無料で使えるようですが、チュートリアル通りにEC2を選択すると時間等により課金されてしまうため（通常は無料枠内ですが）、精神的に安心な月額固定のVPSを選択してみました。

VPSの選択はとにかく安めで、クラウド的な使い方のできる（っていうかクラウド？）[ConoHa](https://www.conoha.jp/)を選択しました。
また、OSはCentOSやUbuntuも検討しましたが、ラズベリーパイで慣れているDebianを選択しました。

##ConoHa VPS の設定

こんな感じでサーバを追加しました。
![001.JPG](https://qiita-image-store.s3.amazonaws.com/0/247920/962c7a41-6544-63ae-e1ef-0af2ea726118.jpeg)


##OS（Debian）の設定

rootアカウントでログインして、ロケールとタームゾーンの設定、および、お約束のアップデートを実施します。

```:
# dpkg-reconfigure locales
# dpkg-reconfigure tzdata
# apt -y update
# apt -y upgrade
# apt -y dist-upgrade
```

ユーザーを作成します。今回は例として「pi」ユーザーを作成します。

```:
# useradd -G sudo -m -s /bin/bash pi
# passwd pi
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
# su - pi
$ exit
# vi /etc/sudoers.d/010_pi-nopasswd
pi ALL=(ALL) NOPASSWD: ALL
# vi /etc/ssh/sshd_config
変更
PermitRootLogin yes
↓
PermitRootLogin no
```

hostsを編集し再起動します。

```:
# vi /etc/hosts
127.0.0.1       localhost
127.0.1.1       DEBIAN
127.0.1.1       xx-xx-xx-xx    #ホスト名を追加
# reboot
```

piユーザーでログインして設定を継続します。

```Bash:ufwのインストールと設定
$ sudo apt install -y ufw
$ sudo systemctl enable ufw
$ sudo systemctl restart ufw
$ sudo ufw logging on
$ sudo ufw allow 22/tcp
$ sudo ufw allow 80/tcp
$ sudo ufw allow 443/tcp
$ sudo ufw allow 3000/tcp
$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
22/tcp                     ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443/tcp                    ALLOW       Anywhere
3000/tcp                   ALLOW       Anywhere
22/tcp (v6)                ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443/tcp (v6)               ALLOW       Anywhere (v6)
3000/tcp (v6)              ALLOW       Anywhere (v6)

$ sudo tail /var/log/ufw.log
```

```Bash:node.jsのインストール
$ sudo apt install -y curl
$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
$ sudo apt install -y nodejs
$ sudo apt install -y build-essential
$ node -v
v10.2.1
```

```Bash:dockerのインストール
$ sudo vi /etc/apt/sources.list
追記
deb http://ftp.jp.debian.org/debian/ sid main
deb-src http://ftp.jp.debian.org/debian/ sid main
$ sudo apt -y update
$ sudo apt install -y docker docker.io
$ sudo gpasswd -a ${USER} docker
$ docker -v
Docker version 1.13.1, build 092cba3
```

参考サイト：[Raspberry Pi3にRails5環境を構築して遊んでみる](https://qiita.com/takeru56/items/ab09e239dc38e4da5ea1)

```Bash:Rubyのインストール
$ sudo apt install -y rbenv ruby-build
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ rbenv rehash
$ rbenv install --list
$ MAKE_OPTS="-j 4" rbenv install 2.4.0
$ rbenv global 2.4.0
$ rbenv rehash
$ ruby --version
ruby 2.4.0p0 (2016-12-24 revision 57164) [x86_64-linux]
```

```Bash:SQLliteのインストール
$ apt install -y libsqlite3-dev
```

```Bash:gitのインストール
$ sudo apt install -y git
```

```Bash:HEROKUのインストール
$ source <(curl -sL https://cdn.learnenough.com/heroku_install)
```

```Bash:再起動
$ sudo reboot
```

##AWS Cloud9 の設定

大事なところだけです。
「Connect and run in remote server(SSH)」を選択、「User」「Host」「Port」を入力します。
![002.JPG](https://qiita-image-store.s3.amazonaws.com/0/247920/6c92b361-4c76-8ef4-2bf6-8f822e0d38c6.jpeg)

次に「Copy key to clipboard」をクリックして公開鍵をクリップボードに保存します。
公開鍵をVPSに設定します。

```Bash:公開鍵の設定
$ ssh-keygen -t rsa
Enter file in which to save the key (/home/pi/.ssh/id_rsa):
Created directory '/home/pi/.ssh'.
Enter passphrase (empty for no passphrase):

$ vi ~/.ssh/authorized_keys
#公開鍵（クリップボードの内容）をペースト
$ chmod 600 ~/.ssh/authorized_keys
```

「Next step」をクリックし、指示通り進めば、開発環境の出来上がりです。

```Bash:Railsのインストール
$ gem install bundler
$ gem install rails
$ rails -v
Rails 5.2.0
```

```Bash:Railsアプリの作成
$ rails new testapp
$ cd testapp
$ rails server -b 0.0.0.0 -p 3000
```

ブラウザを起動し以下のURLにアクセスして「Yay! You’re on Rails!」が表示されれば成功です。
http://VPSのIPアドレス:3000