お名前.com VPS(KVM)にRVM+Ruby1.9.3+Rails3+Capistrano+Unicorn+nginxな環境を作ったお話
自鯖が入用だったので、いい機会だったのでVPSを契約することにしました。で、Rails環境を整える必要があったので、色々挑戦してみた記録です。契約から2日がかりで、正直結構大変でした。
メモは一切とってなかったので思い出しながら書いています。
サーバの環境
今回、お名前.com VPSに契約してみることにしました。これは、GMOが運営しているVPSで、レンタルサーバーの方は散々なクソ評価だったりするのですが、VPSについてはそれ程ひどい話は聞いていない*1ので2Gプランを12ヶ月契約しました。もっとも今は15日間無料トライアル中です。
以下、適当なメモです。
- 契約には電話認証が必要。契約処理を終えると、VPSのコントロールパネルにログイン出来ます。
- 初めに、標準OSとしてCentOS6がインストールされます。これは強制です。
- Debianが良かったので、即「OS再インストール」しました。
- この時点で、VPS上のOSに関してはコントロールパネルのSSH Key Pairの意味がなくなります。VPSの稼働しているサーバへISOなどを送る時にはまだ使えるようです。
- ディスク構成という項目があって、この時「基本ディスク」と「追加ディスク」というオレオレ用語が出てきます。これが謎です。とりあえずカスタムで40GBにしてみましたが、全部(200GB)でもいいのだと思います。
- Debinaのインストールディスクが差された状態になるので、起動するとコンソール画面にインストールの初期画面が出てきます。あとは普通にインストール。
- sshが繋がるか確認
- 鍵の設定
- パッケージを色々
Capistrano+Unicorn+nginx
「RailsによるアジャイルWebアプリケーション開発」にはApache+Passengerの方法が乗っていますが、風のうわさでUnicorn+nginxが速いという話を聞いたので、挑戦してみました。
一応整理しておくと
- Capistrano
- 効率的にデプロイやサーバの操作をするためのツール。
- Apache
- 言わずと知れたWebサーバの代表格
- Passenger (Phusion Passenger)
- mod_railsとかmod_rackとも呼ばれるらしい。つまるところRails用Apacheモジュール*5。
- nginx
- 最近流行りのWebサーバ。だけどリバースプロキシとしての注目度の方が高いようです(?)。
- Unicorn
- 汎用Rackサーバ。とにかく速い(らしい)。
よく見るとUnicornもnginxもWebサーバなのですが、Railsを動かす部分をUnicornに、静的な部分をnginxに担当させることで高速化が達成されているようです。
ということで、以下適当な手順まとめです。
- nginxを入れる。
# apt-get install nginx
- Capistranoの設定
- deploy.rbについてはRails本は使えないので適当に調べて設定します。頑張ります。
- 詰まった点:
- サーバはRVM使用、ローカルはRVM不使用だったので、エラーが出た→"rvm-capistrano"をgemで入れたら大丈夫だった。
- Unicornの設定
- "config/unicorn.rb"に色々書きました。
- sockファイルの位置など、色んなところに影響する設定があり、あまりスマートとは言えないような気もします。
- 詰まった点:
- working_directoryは"/path/to/deploy/current"と言った感じで"current"が必要でした。
- デプロイ(
cap deploy
)してGemの依存の解決を頑張る- deploy.rbで
require "bundler/capistrano"
しておくと、デプロイ時に自動でbundle installされます。 - imagemagickが足りないだの、opensslがどうだのひたすらtry and errorです。
- 謎な点:
- bundle packしても、どうもサーバ側でもインストールとか色々やってるみたい。bundle pack意味あるのか…?
- deploy.rbで
おまけ:Gemfile
一部載せておきます。
gem 'capistrano' gem 'capistrano_colors' gem 'rvm-capistrano' group :production do # web server for Rack gem 'unicorn' end
参考
他にも、色々見ましたがメモしてないので悪しからず。