webboxio
http://webbox.io
Rack Uygulamalarını
NginX ve Unicorn’la
Koşturma
Uğur “vigo” Özyılmazel
webBox.io kurucu ortağı, Yazılım Geliştirici

https://twitter.com/vigobronx
https://github.com/vigo...
Ruby için web sunucusu
arayüzüdür.
RESPONSE ve REQUEST için
http wrapper’dır.
Web sunucusu ve Ruby’nin
kolay iletişim kurm...
Ruby Uygulama

Web Sunucusu
{ Sinatra, Rails, Ramaze … }

Ruby Uygulama

{ Middleware }

Web Sunucusu

{ Mongrel, WEBrick, CGI, Thin … }
`call` metoduna cevap veren
Ruby nesnesi yeterlidir!
return [
status,
headers,
body
]
Basit bir Rack uygulaması

require 'rack'

!
class MyApplication
def call(env)
h = {"Content-Type" => "text/html; charset=...
Rack Handlers *

Web Sunucusu

{

Mongrel
EventedMongrel
SwiftipliedMongrel
WEBrick
FCGI
CGI
SCGI
LiteSpeed
Thin

Ebb
Fuze...
Middleware

{

JSON-P
Rack::Protection
Rack::Cache
Rack::Config
Rack::Debug
Rack::RespondTo
Rack::GoogleAnalytics
Rack::Thr...
Camping
Coset
Espresso

Ruby Uygulama

+

Halcyon
Mack
Maveric
Merb
Racktools::SimpleApplication
Ramaze
Ruby on Rails
Rum
...
HTTP ve Reverse Proxy
sunucusu (Web sunucusu)
Caching ve Load-Balancing
özellikleri bulunuyor
Düşük hafıza kullanımı ve
pe...
Event Driven Architecture

Ana İşlem (Main Process)

İşçi (Worker)

İşçi (Worker)

İşçi (Worker)
Nginx Kurulum

#
$
!
$
$
$
!
#
$

Ubuntu 12.04 <= add-apt-repository
sudo aptitude install python-software-properties
sudo...
Unicorn
Http Server (Ruby gem’i)
NginX gibi worker’lar kullanıyor
Request’i Unix socket’ine yönlendiriyor
Kendi başına otomatik ol...
Kurulum

$ gem install unicorn

Gemfile

source "https://rubygems.org"
gem 'unicorn'
application.rb

# encoding: utf-8
require 'sinatra/base'
!

class MyApplication < Sinatra::Base
get '/' do
"Merhaba Dünya!...
@dir = “/path/to/tmp/"

!

worker_processes 2
working_directory @dir

unicorn.rb

!

timeout 30
listen "#{@dir}sockets/uni...
nginx.conf
upstream unicorn_mysocket {
server unix:/path/to/tmp/sockets/unicorn.sock
fail_timeout=0;
}

!

server {
server...
nginx.conf
upstream unicorn_mysocket {
server unix:/path/to/tmp/sockets/unicorn.sock
fail_timeout=0;
}

!

server {
server...
config.ru

# encoding: utf-8
require "rubygems"
require "sinatra"

!

require File.expand_path '../application.rb', __FILE...
$ ps aux | grep unicorn
1396

$ kill 1396

worker

master
VİDEO
worker işlemlerinin ölçeklenmesi, işlemci
(CPU) ve hafızayla doğru orantılıdır.
Yavaş istemcilerle (slow-client) NginX gib...
Kaynaklar
http://rack.github.io/
http://nginx.org/
http://unicorn.bogomips.org/
http://sinatrarb.com
http://vagrantup.com
...
http://webbox.io
http://blog.webbox.io
http://twitter.com/webboxio
https://github.com/webBoxio
http://facebook.com/webbox....
Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak
Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak
Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak
Upcoming SlideShare
Loading in...5
×

Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak

1,075

Published on

Unix soket'ini Nginx sunucu ile entegre ederek Rack uygulamalarını çalıştırmak ve sunucuda koşturmak. Ruby ve Sinatra örnekleri

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,075
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak

  1. 1. webboxio http://webbox.io
  2. 2. Rack Uygulamalarını NginX ve Unicorn’la Koşturma
  3. 3. Uğur “vigo” Özyılmazel webBox.io kurucu ortağı, Yazılım Geliştirici https://twitter.com/vigobronx https://github.com/vigo http://ugur.ozyilmazel.com https://speakerdeck.com/vigo
  4. 4. Ruby için web sunucusu arayüzüdür. RESPONSE ve REQUEST için http wrapper’dır. Web sunucusu ve Ruby’nin kolay iletişim kurmasını sağlar Ara katmanlar yardımıyla ekstra kolaylıklar sağlar
  5. 5. Ruby Uygulama Web Sunucusu
  6. 6. { Sinatra, Rails, Ramaze … } Ruby Uygulama { Middleware } Web Sunucusu { Mongrel, WEBrick, CGI, Thin … }
  7. 7. `call` metoduna cevap veren Ruby nesnesi yeterlidir! return [ status, headers, body ]
  8. 8. Basit bir Rack uygulaması require 'rack' ! class MyApplication def call(env) h = {"Content-Type" => "text/html; charset=utf-8"} [200, h, ["Merhaba Dünya"]] end end ! run MyApplication.new
  9. 9. Rack Handlers * Web Sunucusu { Mongrel EventedMongrel SwiftipliedMongrel WEBrick FCGI CGI SCGI LiteSpeed Thin Ebb Fuzed Glassfish v3 Phusion Passenger Puma Rainbows! Reel Unicorn unixrack uWSGI Zbatery
  10. 10. Middleware { JSON-P Rack::Protection Rack::Cache Rack::Config Rack::Debug Rack::RespondTo Rack::GoogleAnalytics Rack::Throttle Rack::LinkedData Rack::Attack …
  11. 11. Camping Coset Espresso Ruby Uygulama + Halcyon Mack Maveric Merb Racktools::SimpleApplication Ramaze Ruby on Rails Rum Sinatra Sin Vintage Waves Wee …
  12. 12. HTTP ve Reverse Proxy sunucusu (Web sunucusu) Caching ve Load-Balancing özellikleri bulunuyor Düşük hafıza kullanımı ve performanslı olması tercih sebebi!
  13. 13. Event Driven Architecture Ana İşlem (Main Process) İşçi (Worker) İşçi (Worker) İşçi (Worker)
  14. 14. Nginx Kurulum # $ ! $ $ $ ! # $ Ubuntu 12.04 <= add-apt-repository sudo aptitude install python-software-properties sudo add-apt-repository ppa:nginx/stable sudo aptitude update sudo aptitude install nginx servisi başlatır! sudo service nginx start
  15. 15. Unicorn
  16. 16. Http Server (Ruby gem’i) NginX gibi worker’lar kullanıyor Request’i Unix socket’ine yönlendiriyor Kendi başına otomatik olarak worker’ları yumurtluyor ve organize ediyor!
  17. 17. Kurulum $ gem install unicorn Gemfile source "https://rubygems.org" gem 'unicorn'
  18. 18. application.rb # encoding: utf-8 require 'sinatra/base' ! class MyApplication < Sinatra::Base get '/' do "Merhaba Dünya!" end end
  19. 19. @dir = “/path/to/tmp/" ! worker_processes 2 working_directory @dir unicorn.rb ! timeout 30 listen "#{@dir}sockets/unicorn.sock", :backlog => 64 pid_file = "#{@dir}pids/unicorn.pid" old_pid = "#{pid_file}.oldbin" pid pid_file stderr_path "#{@dir}log/unicorn.stderr.log" stdout_path "#{@dir}log/unicorn.stdout.log" preload_app true ! before_exec do |server| ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__)) end ! before_fork do |server, worker| if File.exists?(old_pid) && server.pid != old_pid begin Process.kill("QUIT", File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH # pass end end end
  20. 20. nginx.conf upstream unicorn_mysocket { server unix:/path/to/tmp/sockets/unicorn.sock fail_timeout=0; } ! server { server_name localhost; listen 8080; root /path/to/project; client_max_body_size 4G; keepalive_timeout 5; ! ! } location / { try_files $uri @app; } location @app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://unicorn_mysocket; }
  21. 21. nginx.conf upstream unicorn_mysocket { server unix:/path/to/tmp/sockets/unicorn.sock fail_timeout=0; } ! server { server_name localhost; listen 8080; root /path/to/project; client_max_body_size 4G; keepalive_timeout 5; ! ! } location / { try_files $uri @app; } location @app { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://unicorn_mysocket; }
  22. 22. config.ru # encoding: utf-8 require "rubygems" require "sinatra" ! require File.expand_path '../application.rb', __FILE__ run MyApplication $ bundle exec unicorn -c $PWD/unicorn.rb -D $PWD/config.ru
  23. 23. $ ps aux | grep unicorn
  24. 24. 1396 $ kill 1396 worker master
  25. 25. VİDEO
  26. 26. worker işlemlerinin ölçeklenmesi, işlemci (CPU) ve hafızayla doğru orantılıdır. Yavaş istemcilerle (slow-client) NginX gibi sunucular uğraşmalı unicorn değil! Ölçeklendirmede asıl düşünülmesi gereken back-end kısmı unicorn değil!
  27. 27. Kaynaklar http://rack.github.io/ http://nginx.org/ http://unicorn.bogomips.org/ http://sinatrarb.com http://vagrantup.com https://github.com/vigo/owg2013-rack-unicorn-sinatra
  28. 28. http://webbox.io http://blog.webbox.io http://twitter.com/webboxio https://github.com/webBoxio http://facebook.com/webbox.io hello@webbox.io
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×