そもそも
- Sinatraは「Webアプリケーションフレームワーク」として
- Unicornは「アプリケーションサーバー」として
- Nginxを「リバースプロキシ」として
それぞれ必要である。Sinatra単体でもWebサーバーとして機能はするけどデーモン化できないので運用ができない。Supervisorで強制的にデーモン化という手もあるみたいだけど後々を考えてリバースプロキシにしてみた
Sinatra+Unicornを構成
まずはNginx抜きでSinatra+Unicornを構成してみる。RubyとGem自体はインストールが終了しているとする。
Unicornのインストール(bundle抜き)
gem install unicorn
特に初期設定はなし
Hello Worldを出してみる bundle init
でGemfileを生成 Gemfileを以下のようにする
source "https://rubygems.org" gem "sinatra"
そしてbundle install --path vendor/bundle
でインストール
次に同ディレクトリ内にunicorn.conf
worker_processes 2 listen '/tmp/unicorn.sock' stderr_path File.expand_path('unicorn.log', File.dirname(__FILE__)) stdout_path File.expand_path('unicorn.log', File.dirname(__FILE__)) preload_app true
メインのapp.rb
require 'sinatra' get '/' do 'Hello World!' end
最後にUnicornとSinatraの連携のためにconfig.ruを作成
require './app.rb' run Sinatra::Application
最後に実行
unicorn -c unicorn.conf -D -p 1129
- -D デーモン化させる
- -c Unicornの設定ファイルを指定
- -p ポート番号 ポート番号はなんでもいいけど1024以下はできないので注意(つまり80は不可)
Nginxの導入&連携
まずはNginxをインストールしておく
/etc/nginx/nginx.confを以下のように設定
user nginx; worker_processes 1; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { upstream unicorn_server { server unix:/tmp/unicorn.sock; } server { #server_name example.com; root /home/thr3a/hoge/; listen 80; location / { proxy_pass http://unicorn_server; } } }