動かざることバグの如し

近づきたいよ 君の理想に

Sinatra+Unicorn+NginxでグッバイPHPしたい人生だった

そもそも

それぞれ必要である。Sinatra単体でもWebサーバーとして機能はするけどデーモン化できないので運用ができない。Supervisorで強制的にデーモン化という手もあるみたいだけど後々を考えてリバースプロキシにしてみた

SinatraUnicornを構成

まずはNginx抜きでSinatraUnicornを構成してみる。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

最後にUnicornSinatraの連携のために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;
        }
    }
}