さくらVPS契約後、最速でrails(MySQL+Apache)環境を構築する(CentOS6.2 - 2012年8月版)


##出来上がる開発環境リスト

- WEBサーバー(Apache)
- Database(MySQL,sqlite)
- Ruby(rbenvによるversion管理可)
- Ruby on rails(passengerによるApache連携あり)
- Node.js


##時間

早ければ1時間程度で可能(?)

##用語解説

- sh@さくらVPSリモートコンソール = さくらVPSのコントロール接続しているリモートコンソール画面での入力
- sh@リモート = sshで接続しているVPS側コンソール画面での入力
- sh@ローカル = ローカルマシンのコンソール画面での入力
- username = 任意のユーザーネーム
- IP = さくらVPSのIPアドレス(000.000.000.000)
- -> = 上記を下記に変更

想定：さくらVPSの契約直後、またはOS再インストール直後から、最速でrailsの実行環境を作る
注意：セキュリティ的にマズイ設定をしてたら突っ込んでください。VPSで初めてサーバー触って、歴1ヶ月。ググりまくって見よう見まねでやっているので、全然わからないのです。

##VPSの基本初期設定

```sh@さくらVPSリモートコンソール.console
passwd
#パスワードを二回入力(rootのパス設定)

useradd username
passwd username
#パスワードを二回入力(usernameのパス設定)

usermod -G wheel username
visudo
```

```visudo.
#105行目あたり
# %wheel ALL=(ALL) ALL
-> %wheel ALL=(ALL) ALL
```


```sh@さくらVPSリモートコンソール.console
chmod 755 /home/w7tree #作ったuserに読み取り権限
su w7tree
cd
mkdir .ssh
```


##ssh設定

sshの鍵が作られている前提で進みます。
作り方は下記など参照
[Mac＆ubuntu：パスワード無しでsshログインする](http://tukaikta.blog135.fc2.com/blog-entry-32.html)

```sh@ローカル.console
scp ~/.ssh/id_rsa.pub username@IP:~/.ssh/authorized_keys

#sshでVPSにログイン
ssh username@IP
```


```sh@リモート.console
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
sudo vim /etc/ssh/sshd_config
```

```/etc/ssh/sshd_config.
#42行目あたり
#PermitRootLogin yes
-> PermitRootLogin no

#48行目あたり(コメントの#を消す)
#PubkeyAuthentication yes
-> PubkeyAuthentication yes

#66行目あたり
PasswordAuthentication yes
-> PasswordAuthentication no
```

```sh@リモート.console
sudo service sshd restart
```


##必要なものを一括インストール

```sh@リモート.console
sudo yum install -y zlib-devel perl-ExtUtils-MakeMaker httpd httpd-devel openssl-devel libyaml-devel libxml2-devel libxslt-devel libffi-devel readline-devel pcre-devel iconv-devel sqlite-devel mysql mysql-server mysql-devel curl-devel nkf
#ruby-devel rdoc ruby
```

##[sqlite3](http://www.sqlite.org/download.html)のインストール

```sh@リモート.console
cd
wget http://www.sqlite.org/sqlite-autoconf-3071300.tar.gz
tar zxvf sqlite-autoconf-3071300.tar.gz 
cd sqlite-autoconf-3071300
./configure
make
sudo make install
make clean
```

##[node.js](http://nodejs.org/)のインストール(javascript runtime用)

```sh@リモート.console
cd
wget http://nodejs.org/dist/v0.8.5/node-v0.8.5.tar.gz
tar zxvf node-v0.8.5.tar.gz
cd node-v0.8.5
./configure
make
sudo make install
make clean
```

##rbenvによるRubyのインストール

```sh@リモート.console
#rbenvインスコ
cd
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin/:$HOME/.rbenv:$PATH"' >> ~/.bash_profile
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
exec $SHELL
mkdir -p ~/.rbenv/plugins
cd ~/.rbenv/plugins
git clone git://github.com/sstephenson/ruby-build.git

#rubyのインスコ
rbenv install 1.9.3-p125 #好きなバージョンでok
rbenv global 1.9.3-p125 #好きなバージョンでok
rbenv rehash
```

##rails & 必要gemインストール

```sh@リモート.console
gem install rails
gem install rake 
gem install passenger
source ~/.bash_profile
```


##passengerの設定

```sh@リモート.console
passenger-install-apache2-module
<Enter>
<Enter>
sudo vim /etc/httpd/conf.d/passenger.conf
```

```/etc/httpd/conf.d/passenger.conf
#先ほど画面に出てきた、下記のような三行の文字列をコピーして貼り付ける
#以下は例。人によって違うので、注意
LoadModule passenger_module /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.14/ext/apache2/mod_passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-1.9.3-p194/gems/passenger-3.0.14
PassengerRuby /usr/local/rvm/wrappers/ruby-1.9.3-p194/ruby
```

##Apache
```sh@リモート.console
sudo service httpd start #またはrestart
sudo /sbin/chkconfig httpd on
```

##mysql
```sh@リモート.console
sudo service mysqld start #初回の初期化処理
sudo mysqladmin -u root password pass(=passは任意のpassword※あとで使う)
sudo /sbin/chkconfig mysqld on
```

##railsの起動テスト(sqlite版)
```sh@リモート.console
cd
rails new app
cd app
rails g scaffold sample name:string
rake db:migrate
rails s

#ブラウザにて
#IP:3000へアクセス(表示されたら成功)
#IP:3000/samples(表示されたら成功)
#rails serverの終了コマンドは <Ctrl> + C

#Forbiddenが出るなら
sudo chmod 755 /home/username

#このappはいらないので削除しておく
cd
rm -rf app
```

##railsの起動テスト(mysql版)
```sh@リモート.console
#db作成
mysql -u root -p
#password入力(先のmysqlで作った任意のpassword)
mysql> CREATE DATABASE app_development;
mysql exit;

#app作成
cd
rails new app -d mysql
cd app
vi config/database.yml
```

```config/database.yml
#passwordを先のmysqlで設定したpasswordに
development
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: app_development
  pool: 5
  username: root
  password: #ここにpassword記入
  socket: /var/lib/mysql/mysql.sock
```

```sh@リモート.console
rails g scaffold sample name:string
rake db:migrate
rails s
#ブラウザにて
#IP:3000へアクセス(表示されたら成功)
#IP:3000/samples(表示されたら成功)

#Forbiddenが出るなら
sudo chmod 755 /home/w7tree

#その他、読み取り権限があるかをチェック
#ll -a を実行して、rがついているかどうか
```

##railsのApache連携

サンプルとして先ほどMySQLの連携テスト(railsの起動テスト(mysql版))で作成したappを利用する

```sh@リモート.console
sudo vim /etc/httpd/conf/httpd.conf
```

```/etc/httpd/conf/httpd.conf
#最終行付近(コメント#を外す)
#NameVirtualHost *:80
->NameVirtualHost *:80

#以下末尾に追記
<VirtualHost *:80>
    ServerName IP
#例:ServerName 00.000.000.000
    DocumentRoot /home/username/app/public/
    <Directory "/home/username/app/public">
        Options -MultiViews
        AllowOverride All
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
```

```sh@リモート.console
sudo service httpd restart
#エラーが出たら先ほどの打ち間違い
```

ブラウザで
http://IP
(http://00.0000.000.000)
へとアクセスして、表示されたら成功。

>rails s コマンド無しで表示されているということで、WEBrickではなくApacheが動いているということ

##ひととおりインストールしたので、セキュリティ設定など

>めんどくさいので省略中

###Apache設定
省略。

###iptablesの設定
省略。railsの3000portを開くことを忘れない

###ログの監視
```sh@リモート.console
sudo yum install -y logwatch
```

省略。


###mailの設定

```sh@リモート.console
sudo sed -i '/^root:/d' /etc/aliases
sudo vim /etc/aliases
```

```/etc/aliases.
#最終行に以下を追加
root: sample@sample.com #メールアドレスを追加
```

```sh@リモート.console
sudo newaliases
echo test | mail root
```

設定したメールアドレスにメールが届くと成功