そもそも
- 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;
}
}
}