AWS에서 unicorn + nginx + sinatra를 실행해보십시오.

구축을 시도했을 때 조사한 것 등

왜 unicorn + nginx?



unicorn

unicorn은 범용의 Rack 어플리케이션 서버. Rails에서도 sinatra에서도 사용할 수 있습니다.

unicorn만으로도 모든 포트를 청취하면 웹 서버로 사용할 수 있지만,
다음과 같은 이점이 있기 때문에 프로덕션에서는 nginx를 역방향 프록시로 사용
앞에 서서 요청을 unicorn으로 보내는 것이 좋습니다.
  • 이미지 나 CSS와 같은 정적 파일은 nginx에서 빠르게 반환 할 수 있습니다.
  • 요청을 버퍼링하고 수신이 완료된 후 unicorn에 요청
    던지기 위해 느린 회선 (3G 등)으로 연결이 왔을 때 unicorn
    작업자 프로세스 대기 시간을 줄일 수 있습니다

  • 동작 원리는 github의 운영 예가 기재된 이하의 문서가 상세하다
    htps : // 기주 b. 코 m / b ぉ g / 517 - 니코 rn

    우선 unicorn만으로 서버를 세운다.



    샘플 sinatra 앱을 unicorn에서 호출하십시오.

    config.ru
    require 'rubygems'
    require 'sinatra/base'
    class HelloApp < Sinatra::Base
      get '/hello' do
        'Good Sunday Morning!'
      end
    end
    run HelloApp
    

    Gemfile에 unicorn을 더하여 bundle install

    Gemfile
    gem "unicorn"
    

    $ bundle install
    $ bundle exec unicorn -v
    unicorn v4.6.3
    

    unicorn 설정 파일을 만듭니다. 루비 코드로 작성할 수 있습니다.

    unicorn.rb
    @dir = "/path/to/app/"
    
    worker_processes 2 # CPUのコア数に揃える
    working_directory @dir
    
    timeout 300
    listen 80
    
    pid "#{@dir}tmp/pids/unicorn.pid" #pidを保存するファイル
    
    # unicornは標準出力には何も吐かないのでログ出力を忘れずに
    stderr_path "#{@dir}log/unicorn.stderr.log"
    stdout_path "#{@dir}log/unicorn.stdout.log"
    

    AWS를 사용하는 경우 보안 그룹에 지정된 포트
    비워 둔다 (잘 잊고 빠져...)

    이것으로 준비 완료. 다음 명령으로 시작할 수 있습니다. -D는 데몬으로 시작.
    프로덕션 환경에서 시작할 때는 -E production
    (※ 옵션은 설정 파일보다 우선한다)

    $ bundle exec unicorn -c unicorn.rb  -D
    $ ps auxf | grep unicorn | grep -v grep
    unicorn master -c unicorn.rb  -D
     \_ unicorn worker[0] -c unicorn.rb -D
     \_ unicorn worker[1] -c unicorn.rb -D
    
    

    ps를 보면 worker 프로세스와 그것을 관리하는 master 프로세스가
    움직이고 있는지 확인할 수 있습니다.

    또한 unicorn_rails라는 실행 파일이 있지만 여기
    과거 버전의 Rails를 위해 기본적으로 unicorn을 사용하는 것이 좋습니다.

    nginx를 역방향 프록시로 unicorn 앞에 넣습니다.



    그런 다음 nginx를 unicorn 앞에 놓습니다.

    유닉스 도메인 소켓을 통해 nginx와 unicorn이 상호 작용하도록 설정
    또한/path/to/app/static 이하의 요청은 nginx가 처리한다 (unicorn까지 가지 않는다)

    $ sudo yum -y install nginx
    $ nginx -v
    nginx version: nginx/1.4.2
    

    /etc/nginx/nginx.conf
    user  root;
    worker_processes  2;
    
    http {
        upstream unicorn_server {
           server unix:/path/to/app/tmp/unicorn.sock;
        }
    
        server {
            listen       80;
            server_name  ec2-xx-xx-xx-xx.ap-northeast-1.compute.amazonaws.com;
            root         /path/to/app/static;
    
            location / {
                # 静的ファイルが存在しなかった時はUnicornにproxy
                if (!-f $request_filename) {
                    proxy_pass http://unicorn_server;
                    break;
                }
            }
        }
    }
    

    unicorn.rb
    # listen 80
    listen "/path/to/app/tmp/unicorn.sock", backlog: 1024 # UNIXソケットを見るように変更
    

    nginx 시작, unicorn 재부팅
    브라우저에서 http://xx.xx.xx.xx/hello을 두드려 확인

    $ sudo /etc/init.d/nginx start
    or
    $ sudo nginx
    

    다음 단계



    이상으로 우선은 움직이지만, 그 밖에도 unicorn에는 조사해 두어야 할 주제가
    그래서 몇 가지를 둡니다.
  • linux 시그널 송신에 의한 unicorn의 기동/정지
  • capistrano를 사용하여 핫 배포 구현
  • preload를 활성화하여 재로드 속도의 응답 저하를 방지합니다.

    Have Fun!
  • 좋은 웹페이지 즐겨찾기