前回書いたRailsの記事では単一Railsアプリを単一のサーバ上で動かす想定でした。
しかし小さいサービスとか機能であれば複数を同一サーバ上で動かしたほうがリソース上効率が良いはず。
というわけで、Railsアプリを同時にunicorn + nginx環境で動作させるための方法をまとめます。
前準備
単一アプリを
でローカルで動かせるようになっていることが条件です。細かいパスとか説明はそちらを参照。
やることは単純。同時にnginxのconfigファイルに一部書き足すだけ。
あくまで最も簡素な形で書きます。
configファイル
upstream 単一の名前(アプリケーション名だと分かりやすい) { # nginxとunicornの連携 server "unix:{sockファイルのパス}"; } ... # for ~~(アプリ名) server { listen 8082; # 他アプリとバッティングしないポート番号 server_name localhost; root {アプリのRAILS_ROOTパス}; access_log /var/log/nginx/server.log; error_log /var/log/nginx/server_error.log; try_files $uri/index.html $uri @unicorn; location @unicorn { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass リバースプロキシのURL(http://アプリ名、とか); } }
上記の単位でアプリごとにポート番号やソケットのパスなどを変更していけばOK。
同時に複数のアプリを起動している状態なので、当然2つとものサイトにアクセス可能になります。
共通ファイルはこれだけ。ほかはアプリごとに準備する必要あり。