さくらVPS 2GにRails+Nginx+MySQLでサーバを作成した記録

パッケージのインストール

rootで

yum install zlib-devel
yum install openssl-devel
yum install readline-devel
yum install mysql-devel
yum install mysql-server
yum install libxml2-devel
yum install pcre-devel
yum install ImageMagick-devel
yum install libxslt-devel

MySQLUTF-8

rootで/etc/my.cnfを編集して以下の内容を追記。

[mysqld]
character-set-server=utf8
[mysql]
default-character-set=utf8  

MySQLサーバを起動。

service mysqld start
chkconfig mysqld ok

アプリ実行用アカウントを作成

rootで

useradd application
passwd application

Rubyをインストール

applicationアカウントで

cd
mkdir git
cd git
git clone git://github.com/sstephenson/ruby-build.git
cd ruby-build
sudo ./install.sh
cd
git clone git://github.com/sstephenson/rbenv.git .rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source .bashrc
rbenv install 1.9.3-p194
rbenv global 1.9.3-p194
gem install bundler
rbenv rehash

rbenvでインストールするRubyのバージョンは

ruby-install --definitions

で出力される一覧から適当なものを選択する。

Nginxのインストール

applicationアカウントで

wget http://nginx.org/download/nginx-1.0.20.tar.gz
tar xvzf nginx-1.0.20.tar.gz
cd nginx-1.0.14
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_realip_module
make

rootかsudoで

make install

rootかsudoで/etc/init.d/nginxファイルを作成して以下の内容を書く。

#! /bin/sh
# chkconfig: 345 80 30
# description: Nginx web server

set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="nginx daemon"
NAME=nginx
DAEMON=/usr/local/nginx/sbin/$NAME
SCRIPTNAME=/etc/init.d/$NAME

test -x $DAEMON || exit 0

d_start() {
  $DAEMON || echo -n " already running"
}

d_stop() {
  $DAEMON -s quit || echo -n " not running"
}

d_reload() {
  $DAEMON -s reload || echo -n " could not reload"
}

case "$1" in
  start)
    echo -n "Starting $DESC: $NAME"
    d_start
    echo "."
  ;;
  stop)
    echo -n "Stopping $DESC: $NAME"
    d_stop
    echo "."
  ;;
  reload)
    echo -n "Reloading $DESC configuration..."
    d_reload
    echo "reloaded."
  ;;
  restart)
    echo -n "Restarting $DESC: $NAME"
    d_stop
    sleep 2
    d_start
    echo "."
  ;;
  *)
    echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2
    exit 3
  ;;
esac

exit 0

このファイルに実行権限を与えておく

chmod +x /etc/init.d/nginx

rootかsudoで/usr/local/nginx/conf/nginx.confを編集する。

user {アプリケーションアカウント名}
# ...
    upstream application {
        server 127.0.0.1:3000;
    }
    #...
        location ^~/ {
            proxy_pass http://application;
            proxy_set_header Host $http_host;
        }

アプリケーションアカウントが公開鍵認証でサーバに入れるようにする

デプロイを実行するマシンにて鍵を作成する(すでに作成していない場合)

デプロイマシンにて

$ ssh-keygen

と打ってEnterをばしばし叩くと公開鍵~/.ssh/id_rsa.pubと秘密鍵~/.ssh/id_rsaが作成される。

公開鍵をアプリケーションサーバに登録する

デプロイマシンにて

scp ~/.ssh/id_rsa.pub {アプリケーション用アカウント}@{アプリケーションサーバ}:~/

サーバにてアプリケーション用アカウントで

cd
mkdir .ssh
chmod 700 .ssh
mv id_rsa_pub .ssh/authorized_keys
chmod 600 .ssh/authorized_keys

これでパスワードなしでログインできるようになったはずなので、一度ログアウトして再度アプリケーション用アカウントでサーバにsshでログインする。その際にパスワードが聞かれなければ成功。