読者です 読者をやめる 読者になる 読者になる

ボクココ

サービス開発を成功させるまでの歩み

アプリエンジニアがインフラに挑戦

Rails MongoDB

どーも。

普段は Rails アプリをメインに、 AngularJS などのフロントエンドばかりやっている人間が、デプロイについて学んだのでまとめます。

対象読者: アプリしか書いたことなくて、本番公開などやったこと無い人。今までHerokuで本番公開してきたけど、それだと遅いし自由度が効かないしということでAWSでサーバ立ち上げようと思ってる人。

今回の環境は以下。

そもそもの話

なぜ Nginx, Unicorn が必要なの?

アプリだけ作ってる人からすると、 rails serverで普通にサイト見れるのに、なんでわざわざ Nginx とか Unicorn とか必要になるの?っていう疑問から沸くと思います。その答えはシンプルに言うと同時アクセスです。

開発サーバは基本一人しかみないので、同時にアクセスされることはまずないです。てことで裏側のプロセスは一つ立ち上げておけばいいだけなのでだいぶシンプルで再起動とかも高速にできます。それが rails server で起動するWebrick の役割ですね。ですが本番公開となると同時アクセスが当たり前。そのために Nginx で複数ユーザからのリクエストを受け付けて、 Unicornというアプリケーションサーバに転送する必要があります。

Vagrant, Chef とか使うとどんないいことがあるの?

今までのサーバ構築と言えば、 SSH でそのサーバに入り、必要なソフトウェアを yum なり apt-get なりでインストールして設定ファイルを編集して、そしてアプリのソースコードを配置していました。確かに一つのサーバだけで作業するならこれでも特に困ることはありませんでした。 しかしサーバ台数が増えたり、その後の環境がどんどん変わっていく今、何度もソフトウェアをインストールしたり設定ファイルを書き換えたりしないといけなくなっています。

それらをサーバの構築から環境整備までを自動化するのがこれらのツールの役割です。一回コードを書いておけば、コマンド一発で欲しい環境が手に入ります。今までインフラエンジニアがやってくれていた整備をやる必要がなくなります。

さらに、 Chef には OpsCode が提供してくれるサードパーティ製の環境構築用のコードがたくさんあります。 Nginx や rbenv, MongoDB などはもちろんその他たいていの欲しいコードは載っています。これらを利用することでバージョンアップのメンテナンスや手順の作成などの時間を大幅に短縮することができます。

Capistrano って何?

リリースを自動化してくれます。 Chef は環境構築を自動化するのに対し、Capistranoはアプリリリースの自動化を行います。 アプリをリリースするときに、コードを全て上書きしてサーバを再起動というのが多分一番最初にやるリリース方法だと思います。しかしもしそのリリースに問題があったら?すぐに戻すにはバックアップを取ってそれに切り替える必要があります。 一般的なリリース方法としては Git からソースを取ってくる、ソースを配置する、ビルドする、設定ファイル書き換える、サーバ再起動する といった手順かと思います。 それら一般的な手順はCapistrano が一通り用意してくれているので自分で一から書く必要はありません。

次は

実際にまずはVagrant で Linux 環境を作ってみます。