40
Railsデプロイ 長野高専 電子情報工学科 3奥本 隼 NSEG #31 12929日土曜日

Railsデプロイ

Embed Size (px)

DESCRIPTION

NSEG #31での発表スライド 思いつきでエクストリームスライド作成して発表.

Citation preview

Page 1: Railsデプロイ

Railsデプロイ長野高専 電子情報工学科

3年 奥本 隼

NSEG #31

12年9月29日土曜日

Page 2: Railsデプロイ

11時に起きました

12年9月29日土曜日

Page 3: Railsデプロイ

今日NSEGがあることを知りました

12年9月29日土曜日

Page 4: Railsデプロイ

枠が空いてる?Railsの発表しよう

かな?

12年9月29日土曜日

Page 5: Railsデプロイ

現在に至る

12年9月29日土曜日

Page 6: Railsデプロイ

自己紹介

• 奥本 隼(おくもと はやと)

• 長野高専 電子情報工学科 3年

• NSEGでの発表は2回目

• Ruby / Rails / Vim / Linux etc...

• Twitter: falcon_8823, Facebook: falcon.8823

12年9月29日土曜日

Page 7: Railsデプロイ

こんなものを作っています

12年9月29日土曜日

Page 8: Railsデプロイ

イベント開催システム

「カンファイン」

http://conf-in.com12年9月29日土曜日

Page 9: Railsデプロイ

寮食堂の献立配信システム

「Ryo-Lunch」

http://ryo-lunch.jo-ken.info12年9月29日土曜日

Page 10: Railsデプロイ

夏休みカウントダウン

「夏休みはあとn日しかない」

http://ndays.falconsrv.net12年9月29日土曜日

Page 11: Railsデプロイ

Railsデプロイ

12年9月29日土曜日

Page 12: Railsデプロイ

内容

• Rackについて

• Unicorn & Nginxを使った構成

• 手動でデプロイ

• Capistranoを使った自動デプロイ(次回)

12年9月29日土曜日

Page 13: Railsデプロイ

Railsのデプロイは面倒?

• 設置してパーミッションを設定する

• だけではない...

• Webサーバとアプリケーションサーバ(Rackサーバ)が必要

• トータルすると設定量が多いかも…?

12年9月29日土曜日

Page 14: Railsデプロイ

Rails本番環境の構成Webサーバ

(Apache, Nginx)

Rackサーバ

Railsアプリケーション

12年9月29日土曜日

Page 15: Railsデプロイ

Rackとは?

12年9月29日土曜日

Page 16: Railsデプロイ

Rackとは?• サーバとフレームワークをつなぐ   インターフェース

• サーバ,フレームワーク共にRackに対応していれば,組み合わせは自由

• フレームワーク:Rails, Sinatra, etc...

12年9月29日土曜日

Page 17: Railsデプロイ

Rack対応サーバ• WEBRick

• Passenger

• Mongrel

• Thin

• Unicorn

12年9月29日土曜日

Page 18: Railsデプロイ

Unicorn

• クックパッドやGithubでも採用

• 軽い(メモリをあまり食わない)

• デプロイ時のダウンタイムゼロ

• Passengerとかだと10秒ぐらいダウンタイムが生じる

12年9月29日土曜日

Page 19: Railsデプロイ

構成例

12年9月29日土曜日

Page 20: Railsデプロイ

できるだけ軽い構成で

•Webサーバ:Nginx

•Rackサーバ:Unicorn

12年9月29日土曜日

Page 21: Railsデプロイ

構成図

Nginx

Unicon

Railsアプリケーション

12年9月29日土曜日

Page 22: Railsデプロイ

手動でデプロイ

12年9月29日土曜日

Page 23: Railsデプロイ

大まかな手順1. アプリケーションを設置(nginxがアクセスできるパーミッションで)

2. gem install unicorn

3. DBの作成,nginxの設定など

4. Unicornの設定

5. Unicornの起動12年9月29日土曜日

Page 24: Railsデプロイ

Nginxの設定

• リバースプロキシとして動作

• 静的ファイルには直接アクセス(Unicornに問い合わせない)

12年9月29日土曜日

Page 25: Railsデプロイ

upstream app-server {server 127.0.0.1:8080;

}

server {listen 80;server_name hogehoge.falconsrv.net;root /PATH/TO/APP/public;

try_files $uri $uri/index.html @unicorn;

location @unicorn {proxy_pass http://app-server;proxy_set_header X-Real-IP $remote_addr;proxy_set_header Host $host;proxy_set_header Server $host;proxy_set_header X-Forwarded-For

$proxy_add_x_forwarded_for;proxy_read_timeout 20;

}}

12年9月29日土曜日

Page 26: Railsデプロイ

Unicornの設定

• デプロイ時のダウンタイムがゼロになるようにする

• ワーカーごとにプログラムを読み込まないようにする

12年9月29日土曜日

Page 27: Railsデプロイ

worker_processes 2

listen 8082

pid 'tmp/pids/unicorn.pid'stdout_path 'log/unicorn.log'stderr_path 'log/unicorn.log'

timeout 30preload_app true

RAILS_APP/config/unicorn.rb

12年9月29日土曜日

Page 28: Railsデプロイ

before_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!

old_pid = "#{server.config[:pid]}.oldbin" if old_pid != server.pid begin sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU Process.kill(sig, File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH end end

sleep 1end

after_fork do |server, worker| defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connectionend

12年9月29日土曜日

Page 29: Railsデプロイ

この周りはあまり詳しくないのでこちらへ…

https://github.com/blog/517-unicorn

http://techracho.bpsinc.jp/piichan1031/2010_07_09/2075

12年9月29日土曜日

Page 30: Railsデプロイ

Unicornの制御

12年9月29日土曜日

Page 31: Railsデプロイ

Unicornの起動

> unicorn -c config/unicorn.rb -D -E production

production環境でデーモンとして動作

12年9月29日土曜日

Page 32: Railsデプロイ

Unicornの設定のリロード

> kill -HUP `cat tmp/pids/unicorn.pid`

HUPシグナルをmasterプロセスに送る

config/unicorn.rbを変更した時などに実行例)ワーカー数を増やしたときなど

ダウンタイムゼロ

12年9月29日土曜日

Page 33: Railsデプロイ

Unicornの再起動

> kill -USR2 `cat tmp/pids/unicorn.pid`

USR2シグナルをmasterプロセスに送る

プログラムコードの変更を適用するダウンタイムゼロ

12年9月29日土曜日

Page 34: Railsデプロイ

Unicornの終了

> kill -QUIT `cat tmp/pids/unicorn.pid`

QUITシグナルをmasterプロセスに送る

すべてのリクエストを処理し終えてから終了する

12年9月29日土曜日

Page 35: Railsデプロイ

Unicornの強制終了

> kill -INT `cat tmp/pids/unicorn.pid`

INTシグナルをmasterプロセスに送る

リクエストの処理をすべて中断し,直ちに終了する

12年9月29日土曜日

Page 36: Railsデプロイ

まとめ• Railsのデプロイはちょっと手間がかかる

• 使える組み合わせが多い

• Unicornは設定をしないとダウンタイムゼロにならないので注意

• Railsは楽しいです

12年9月29日土曜日

Page 37: Railsデプロイ

宣伝

12年9月29日土曜日

Page 38: Railsデプロイ

再来週(13,14日)

高専プロコンに出場します!

http://www.procon.gr.jp/12年9月29日土曜日

Page 39: Railsデプロイ

長野高専の出場チーム• 自由部門「TERAKOYA」

• 5年生4名,専攻科2年生1名

• 自由部門「みんなのそろばん」

• 1年生1名,2年生3名,3年生1名

• 競技部門

• 4年生3人12年9月29日土曜日

Page 40: Railsデプロイ

10/20, 21(土, 日)

長野高専 工嶺祭でも展示予定

ぜひお越しください!12年9月29日土曜日