前回書いた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つとものサイトにアクセス可能になります。
共通ファイルはこれだけ。ほかはアプリごとに準備する必要あり。