Railsをデプロイする際のサーバーについて: NGINX - Puma-EC2に関して
インフラ構築
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は一言で言うと、高性能かつ軽量な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