nginxでRackアプリケーション(sinatra)を動かす

author potpro(ぼとぷろ)
2016/12/03

nginxでRackアプリケーション(sinatra)を動かす

potproject.net Advent Calendar 2016 4日目の記事です。


うちのブログ初となるであろうRubyの記事です。
実際のところ、自分は全くというほどRubyを書けないのですが、
RubyのWebサービスに関してちょっと使いたいものがあるために構築しています。
なのでRubyの書き方とかSinatraやRailsの使い方ついては他でお願いしたい。
大体ネットに転がっているものを見るとやっぱりRailsばっかりなので、割と珍しいかもしれません。
OSはCentOS7です。

Rubyインストール

今回はちよっと古めなんですが事情によりRuby2.0を使いたいため、
centos7 baseリポジトリからそのままRubyをインストールします。
依存関係でrubygemsなんかも一緒にインストールされました。

で、まあRubyとしては定番であろうパッケージ管理ソフトウェアBundlerをgemからインストール。
rubygemsとbundlerと2つもパッケージ管理ソフトウェアがあるので紛らわしいと自分も思っているのですが、
bundlerはパッケージのバージョンを管理して一括インストールできるソフトウェアです。
プロジェクトごとに個別に設置するので、そのプロジェクトに合ったパッケージをインストールできます。 今回はちゃんとbundlerを使ってsinatraやunicornをインストールします。

# Rubyインストール
yum install ruby ruby-devel
# rubygemsが入っているか確認
gem -v
# rubygemsが古かったのでアップデート
gem install rubygems-update
# bundlerインストール
gem install bundler
# 入ってるgemパッケージを確認
gem list

ruby-develもCentOS7系なら入れておかないと多分動かない。

gemfile作成

# 何かディレクトリを作成する
mkdir sinatra
# Genfile作成
bundle init

このコマンドでどのgemパッケージをインストールするかを記載できるGemfileというファイルが作成されます。
Genfileにsinatraとunicornをインストールするよう記述。

** Gemfile **

source "https://rubygems.org"

gem "sinatra"

インストール。 パスはvendor/bundle にするのが一般的らしい。

bundle install --path vendor/bundle

webページ作成

** hello.rb **

require 'sinatra'

get '/' do
  'hello world!'
end

簡単なHello World!コードです。 これで直下に表示されます。

起動

bundle exec ruby hello.rb -p 3000

これで起動します。portも設定できます。デフォルトは4567です。
試しに別ユーザーで curl http://localhost:3000/でちゃんと ** hello world!** と表示されました。

nginxでリバースプロキシ

/etc/nginx/conf.d/sinatra.conf

server {
    server_name (バーチャルホスト名);
    proxy_set_header Host $http_host;
    location / {
        proxy_pass http://localhost:3000;
    }
}

nginxは単なるリバースプロキシです。ここに関しては長くなるし、いろんなところが書いているので省略。
これで外部からも繋げるようになったのを確認できます。

本当はunicornも使ってパフォーマンスを上げたかったのですが、
途中でrubyのバージョンが古いこと絡みによる依存問題が出たのでこれめんどくさい奴だと思ってとりあえず切り捨てました。 rbenvとかいうrubyのバージョンを管理できるものもあるらしいので、次回があればちゃんとやります。


5日目 → Let's EncryptでSSLのセキュリティをA+にするまで