🌟

Railsをデプロイする際のサーバーについて: NGINX - Puma-EC2に関して

2023/05/10に公開

インフラ構築

Railsアプリをデプロイするにあたり、インフラ構築の中で、サーバーがたくさん登場します。

  • NGINX (純粋なwebサーバー)
  • Puma(application server)
  • EC2 (ホストサーバー)

初学者が、Rails自体がサーバーなはずなのに...?サーバーはなんでこんな必要...?
と言う疑問を解消すべく、今日はRailsをデプロイする際のサーバーについてです。

インフラ構築

まだまだ下手くそなのですが...このような感じです。

EC2インスタンスの中に、
NGINX, Puma, Railsアプリをインストールしていく。

これはどう言うことなのか、それぞれはなんの働きをするのか、まとめていく。

EC2

EC2インスタンスは、AWSが提供する仮想サーバーインスタンス。
EC2インスタンスは、仮想サーバーを提供する役割を持ち、ユーザーが仮想マシンを立ち上げ、
必要に応じて各種ソフトウェアをインストールし、Webサイトやアプリケーションをホストすることができる。
(単なる空の仮想マシンであり、必要なソフトウェアパッケージがすべて事前に
インストールされているわけではない。)

EC2インスタンスにRailsアプリ単体をインストールしても、
それだけではアプリケーションをデプロイすることはできない!!!

これがなぜかは、pumaの章でわかります。

NGINX

NGINXは、Webサーバ、リバースプロキシ、キャッシュ、ロードバランシング、メディアストリーミングなど、多くの機能を提供するオープンソースソフトウェアです。開発当初は、最高のパフォーマンスと安定性を目指して設計されたWebサーバとしてスタートしました。NGINXは、HTTPサーバの機能に加えて、電子メール(IMAP、POP3、SMTP)のプロキシサーバ、HTTP/TCP/UDPサーバのリバースプロキシ/ロードバランサーとしても機能します。

NGINX Docsより

Nginxは一言で言うと、高性能かつ軽量なWebサーバーソフトウェア
WebサイトやWebアプリケーションのリバースプロキシ、ロードバランサー、キャッシュサーバー、
およびHTTPおよびTCP/UDPトラフィックの制御を担当している。

Nginxが提供する主な機能

1. 高性能なWebサーバー機能:
Nginxは、WebサイトやWebアプリケーションの静的ファイル(HTML、CSS、画像など)を
迅速に配信することができる。
また、Nginxは、軽量なリクエスト処理を行い、大量の同時接続に対応することができる

2. リバースプロキシ:
Nginxは、リバースプロキシとして機能し、複数のWebサーバーを前面に配置して、
負荷分散や冗長性を提供することができる。
Nginxは、HTTPリクエストを受け取り、バックエンドのWebサーバーに転送し、そのレスポンスを
クライアントに返す。

3. キャッシュサーバー:
Nginxは、キャッシュサーバーとしても機能し、Webサイトのコンテンツをキャッシュして高速に
配信することができます。
キャッシュを使用することで、Webサイトのレスポンス時間を短縮し、Webサーバーの負荷を
軽減することができる。

4. ロードバランサー:
Nginxは、ロードバランサーとして機能し、複数のWebサーバーの負荷を分散することができる。
Nginxは、負荷分散アルゴリズムを使用し、各Webサーバーにリクエストを均等に分散し、
高可用性を実現することができる。

5. HTTPSおよびSSL/TLSサポート:
Nginxは、HTTPS接続をサポートし、SSL/TLSプロトコルを使用してセキュリティを確保することができる。これにより、Webサイトのセキュリティを向上させ、ユーザーのプライバシーを保護することができる。

Puma

Pumaは、Rubyアプリケーションを実行するための高速なアプリケーションサーバー。
Railsアプリケーションの実行において、Webサーバー(例えば、Nginxなど)と連携して
使用することが一般的。
Pumaは、スレッドプールを使用して、マルチスレッドでのリクエスト処理を可能にするため、
高負荷なアプリケーションでも高速に動作
することができる。
また、クラッシュ時の復旧などの安定性にも優れている。
Rails 5以降では、デフォルトのアプリケーションサーバーとしてPumaが採用されている。

■ Pumaが採用されているのに、EC2上でダウンロードが必要...??

Railsアプリケーションがローカルで動作する場合、
通常はPumaがデフォルトのアプリケーションサーバーとして使用されますが、
これはRailsが開発環境に必要なソフトウェアパッケージをすべて含んでいるためだ。

具体的には、このようにアプリケーションのGemfileにPumaがもうすでに書かれているので、
bundle install コマンドを実行することで、Pumaがインストール
されるようになっているのだ。
(これがデフォルトのアプリケーションサーバーとしてPumaが採用されてるということ。)

しかし、EC2にRailsアプリケーションをデプロイする際には、
EC2に必要なソフトウェアパッケージを手動でインストールする必要があります。

EC2インスタンスは、単なる空の仮想マシンであり、
必要なソフトウェアパッケージがすべて事前にインストールされているわけではありません。

NGINXとPuma比較

特徴 Nginx Puma
役割 Webサーバー アプリケーションサーバー
処理方式 イベント駆動型 マルチスレッド
処理性能 高い(静的ファイルの提供に特化) 高い(マルチスレッドでのリクエスト処理に特化)
リクエスト数 大量のリクエストを高速に処理できる スレッド数に限りがあるため、一定数以上の同時接続には適していない
設定難易度 標準的な設定で簡単に使用できる 設定が複雑で、パフォーマンスに影響を与える設定もある
補完的な役割 SSL/TLSの証明書の提供や負荷分散の実現など ワーカーの管理やマスタープロセスの制御など

補足や間違い等あれば、教えていただけると助かります。
見てくださり、ありがとうございます!ヾ(๑╹◡╹)ノ"

引き続き、頑張ろう!

Discussion