Upload
hayato-okumoto
View
3.041
Download
5
Embed Size (px)
DESCRIPTION
NSEG #31での発表スライド 思いつきでエクストリームスライド作成して発表.
Citation preview
Railsデプロイ長野高専 電子情報工学科
3年 奥本 隼
NSEG #31
12年9月29日土曜日
11時に起きました
12年9月29日土曜日
今日NSEGがあることを知りました
12年9月29日土曜日
枠が空いてる?Railsの発表しよう
かな?
12年9月29日土曜日
現在に至る
12年9月29日土曜日
自己紹介
• 奥本 隼(おくもと はやと)
• 長野高専 電子情報工学科 3年
• NSEGでの発表は2回目
• Ruby / Rails / Vim / Linux etc...
• Twitter: falcon_8823, Facebook: falcon.8823
12年9月29日土曜日
こんなものを作っています
12年9月29日土曜日
寮食堂の献立配信システム
「Ryo-Lunch」
http://ryo-lunch.jo-ken.info12年9月29日土曜日
夏休みカウントダウン
「夏休みはあとn日しかない」
http://ndays.falconsrv.net12年9月29日土曜日
Railsデプロイ
12年9月29日土曜日
内容
• Rackについて
• Unicorn & Nginxを使った構成
• 手動でデプロイ
• Capistranoを使った自動デプロイ(次回)
12年9月29日土曜日
Railsのデプロイは面倒?
• 設置してパーミッションを設定する
• だけではない...
• Webサーバとアプリケーションサーバ(Rackサーバ)が必要
• トータルすると設定量が多いかも…?
12年9月29日土曜日
Rails本番環境の構成Webサーバ
(Apache, Nginx)
Rackサーバ
Railsアプリケーション
12年9月29日土曜日
Rackとは?
12年9月29日土曜日
Rackとは?• サーバとフレームワークをつなぐ インターフェース
• サーバ,フレームワーク共にRackに対応していれば,組み合わせは自由
• フレームワーク:Rails, Sinatra, etc...
12年9月29日土曜日
Rack対応サーバ• WEBRick
• Passenger
• Mongrel
• Thin
• Unicorn
12年9月29日土曜日
Unicorn
• クックパッドやGithubでも採用
• 軽い(メモリをあまり食わない)
• デプロイ時のダウンタイムゼロ
• Passengerとかだと10秒ぐらいダウンタイムが生じる
12年9月29日土曜日
構成例
12年9月29日土曜日
できるだけ軽い構成で
•Webサーバ:Nginx
•Rackサーバ:Unicorn
12年9月29日土曜日
構成図
Nginx
Unicon
Railsアプリケーション
12年9月29日土曜日
手動でデプロイ
12年9月29日土曜日
大まかな手順1. アプリケーションを設置(nginxがアクセスできるパーミッションで)
2. gem install unicorn
3. DBの作成,nginxの設定など
4. Unicornの設定
5. Unicornの起動12年9月29日土曜日
Nginxの設定
• リバースプロキシとして動作
• 静的ファイルには直接アクセス(Unicornに問い合わせない)
12年9月29日土曜日
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日土曜日
Unicornの設定
• デプロイ時のダウンタイムがゼロになるようにする
• ワーカーごとにプログラムを読み込まないようにする
12年9月29日土曜日
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日土曜日
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日土曜日
この周りはあまり詳しくないのでこちらへ…
https://github.com/blog/517-unicorn
http://techracho.bpsinc.jp/piichan1031/2010_07_09/2075
12年9月29日土曜日
Unicornの制御
12年9月29日土曜日
Unicornの起動
> unicorn -c config/unicorn.rb -D -E production
production環境でデーモンとして動作
12年9月29日土曜日
Unicornの設定のリロード
> kill -HUP `cat tmp/pids/unicorn.pid`
HUPシグナルをmasterプロセスに送る
config/unicorn.rbを変更した時などに実行例)ワーカー数を増やしたときなど
ダウンタイムゼロ
12年9月29日土曜日
Unicornの再起動
> kill -USR2 `cat tmp/pids/unicorn.pid`
USR2シグナルをmasterプロセスに送る
プログラムコードの変更を適用するダウンタイムゼロ
12年9月29日土曜日
Unicornの終了
> kill -QUIT `cat tmp/pids/unicorn.pid`
QUITシグナルをmasterプロセスに送る
すべてのリクエストを処理し終えてから終了する
12年9月29日土曜日
Unicornの強制終了
> kill -INT `cat tmp/pids/unicorn.pid`
INTシグナルをmasterプロセスに送る
リクエストの処理をすべて中断し,直ちに終了する
12年9月29日土曜日
まとめ• Railsのデプロイはちょっと手間がかかる
• 使える組み合わせが多い
• Unicornは設定をしないとダウンタイムゼロにならないので注意
• Railsは楽しいです
12年9月29日土曜日
宣伝
12年9月29日土曜日
再来週(13,14日)
高専プロコンに出場します!
http://www.procon.gr.jp/12年9月29日土曜日
長野高専の出場チーム• 自由部門「TERAKOYA」
• 5年生4名,専攻科2年生1名
• 自由部門「みんなのそろばん」
• 1年生1名,2年生3名,3年生1名
• 競技部門
• 4年生3人12年9月29日土曜日
10/20, 21(土, 日)
長野高専 工嶺祭でも展示予定
ぜひお越しください!12年9月29日土曜日