さくらVPS 開発環境編 (Rails+nginx+unicorn)
基本設定編で最低限の設定が終了したので、今度はサービスを公開するための環境を整えました。nginx周りがよく分かりませんでしたが、とりあえず動くところまでは行けたので、プロトタイプを作ってすぐ人に見せれる環境が出来ました。
まずは後からビルドで必要となるパッケージ+αを全部入れておきます。
# yum install yum-fastestmirror # yum update # yum install gcc gcc-c++ openssl* pcre* zlib* gd* libpng* libjpeg* libxml* libxslt* readline*
MySQLインストール
yumでインストールして、自動で起動するようにしておきます。
# yum install mysql mysql-devel mysql-server # /etc/rc.d/init.d/mysqld start # chkconfig mysqld on
rootパスワードを設定。
$ mysql -u root mysql> grant all PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password'; mysql> delete from mysql.user where password = '';
Railsインストール
続いてRails。yumでパッケージが無かったものはソースから入れています。
git
# cd /usr/local/src # wget http://git-core.googlecode.com/files/git-1.7.7.3.tar.gz # tar zxf git-1.7.7.3.tar.gz # cd git-1.7.7.3 # ./configure # make && make install
RVM
$ bash < <(curl -s https://rvm.beginrescueend.com/install/rvm) $ echo '[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function' >> ~/.bash_profile $ . .bash_profile
ruby
$ rvm install ruby-1.9.2 --with-readline-dir=/usr/include/readline $ rvm ruby-1.9.2 --default
node.js
Rails3.1を動作させようとするとランタイムエラー(ExecJS::RuntimeUnavailable)になったのでインストール。
# cd /usr/local/src # wget http://nodejs.org/dist/v0.6.1/node-v0.6.1.tar.gz # tar zxf node-v0.6.1.tar.gz # cd node-v0.6.1 # ./configure # make && make install
rails
$ gem install rails $ gem install mysql2
一応この時点で適当な場所にプロジェクトを作成して動作確認しておきます。
80ポートで起動して、ブラウザからアクセスできれば大丈夫です。
$ cd /var/www $ rails new sample -d mysql $ cd sample $ rvmsudo rails s -p 80
mysqlにつながらない場合は/tmp/mysql.sockの場所を確認してください。
今回はこのように変更しています。
- socket: /tmp/mysql.sock + socket: /var/lib/mysql/mysql.sock
unicornインストール
続いてunicornですが、これはgem一発で完了。
$ gem install unicorn
アプリケーション毎に設定ファイルを記述します。
とりあえず動けば良いので、最低限の内容のみ記述。
# vi /var/www/sample/config/unicorn.rb listen '/tmp/unicorn.sock' pid '/tmp/unicorn.pid'
ここでも動作確認しておきます。
$ rvmsudo unicorn_rails -c config/unicorn.rb -p 80
動作が確認できたら、デーモンとして起動しておきます。
8080ポートで動作します。
$ unicorn_rails -c config/unicorn.rb -D
nginxインストール
最後にnginxです。
専用のユーザーを追加して、ソースからインストールします。コンパイルオプションはCompile-time optionsに詳細が記載されています。ビルドする時にしかモジュールを追加できないようなので、必要なものは入れておきましょう。
# useradd -s /sbin/nologin nginx # cd /usr/local/src # wget http://nginx.org/download/nginx-1.0.9.tar.gz # tar zxf nginx-1.0.9.tar.gz # cd nginx-1.0.9 # ./configure \ --conf-path=/etc/nginx/nginx.conf \ --prefix=/usr/local/nginx \ --with-http_stub_status_module \ --with-http_ssl_module \ --with-http_gzip_static_module \ --with-http_realip_module # make && make install
サーバーを起動して、Welcomeページが表示されるか確認します。
// サーバー起動 # /usr/local/nginx/sbin/nginx // サーバー停止 # /usr/local/nginx/sbin/nginx -s quit
nginx経由で、unicornのプロセスにアクセスできるように設定します。最終的には管理しやすいように分割しますが、とりあえず動作確認できればよいのでnginx.confファイルを直接書き換えました。
#vi /etc/nginx/conf/nginx.conf user nginx; worker_processes 1; pid /var/run/nginx.pid; error_log /var/log/nginx/error.log; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; keepalive_timeout 65; upstream unicorn_app { server unix:/tmp/unicorn.sock; } server { listen 80; server_name _; location / { proxy_pass http://unicorn_app; } } }
もう一度/usr/local/nginx/sbin/nginxでサーバーを起動してアクセスすると、Welcomeページではなく、Railsアプリのページが表示されます。最後に起動用のスクリプトを追加しておきます。
# vi /etc/init.d/nginx #! /bin/sh ### BEGIN INIT INFO # Provides: nginx # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: nginx web server # Description: nginx web server ### END INIT INFO DESC="nginx web server" NAME=nginx DAEMON=/usr/local/nginx/sbin/$NAME PIDFILE=/var/run/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME case "$1" in start) $DAEMON ;; stop) kill `cat $PIDFILE` ;; *) echo "Usage: $SCRIPTNAME {start|stop}" >&2 exit 1 ;; esac
自動で起動するように設定。
# chmod 755 /etc/init.d/nginx # chkconfig --add nginx # chkconfig nginx on
以上で終了です。
色々調べつつ半日かかりました..。