サーバー
爆速学習のサーバ編です。
なんだかんだ4日かかった。。。
※下記の内容に不備がありましたら、コメント頂けると幸いです。また、下記の内容をご使用頂ける場合は自己責任でお願いします。
【目次】
サーバーとは?
サービスを提供するコンピュータやそのコンピュータにある機能のこと。
自身のパソコンも設定をすれば、サーバーにすることができます。
離れた場所にあるサーバーの中で作業を行いたい場合は、SSHを利用します。
SSHは、暗号や認証の技術を使って、安全にリモートサーバーと通信することができます。
Railsの開発環境では、サーバーに見立てた自身のPC内に、pumaというアプリケーションサーバーを作成し、「rails s」でこのアプリケーションサーバーを起動させていました。
最近では、クラウド上でサーバーを設置できるサービス(AWSやherokuなど)の台頭が目紛しいです。
役割
・データの保存(バックアップ)
・開発したサービスデータの保管
・外部クライアントと接続する機能
WEBアプリ開発においては、主に以下三つの役割を果たすことができます。
・パソコン同士の通信を行う(WEBサーバー)
・データを管理/保存する(データベースサーバー)
・アプリを管理する(アプリケーションサーバー)
WEBサーバー
WEBブラウザから送られてきたリクエストに対して、情報を処理し、その結果をレスポンスとしてWEBブラウザに返すコンピュータやソフトウェアのこと。
役割
・静的なコンテンツをクライアントにレスポンスとして返す
・動的なコンテンツ生成をアプリケーション本体(アプリケーションサーバー)に依頼する
・アプリケーションサーバーから返ってくる処理結果をクライアントにレスポンスとして返す
WEBの仕組みについてはこちら
動作
・「80ポート」でHTTPリクエストを受け取る
・リクエストに応じて情報の処理を行う
・処理した情報をリクエストしてきたWEBブラウザにレスポンスする
データベースサーバー
詳しくはこちら
アプリケーションサーバー
Webアプリを管理するサーバーです。
Webサーバーから渡された情報から動的なコンテンツを生成し、その結果をWebサーバーに返します。
AWS
Amazon Web Servicesの略です。
サーバーやそのサーバーを整える機能を提供してくれるクラウドコンピューティングサービスです。
物理サーバーを設置する必要がなく、設定も容易にできるため、非常に使いやすいサービスです。
一方で、物理サーバーは共用になることが多いため、セキュリティ面が少し心配です。
また、提供されているサービス以上の拡張ができないのも難点です。
AWSを利用したデプロイ
EC2インスタンスの仮想サーバー内に、「アプリケーションサーバー(Unicorn)」「Webサーバー(Nginx)」「データベースサーバー(MySQL)」をインストールします。
流れ
※環境変数の設定は慎重に行なってください
・EC2インスタンスを作成
・Elastic IPを作成
・「80」のポートを設定する
・SSH接続でEC2インスタンスにログインし、EC2インスタンスの環境構築を行う
Node.js/openssl-devel/rbenv/ruby-build/Ruby/
・MySQLをインストールする
・Unicornをインストールする
・アプリのコードをGithubからEC2インスタンスにクローンする
・「3000」のポートを設定する
・データベースを作成する
・アセットファイルをコンパイルする
・Nginxをインストールする
・Unicornの設定を修正する
・Capistranoを導入
・S3を導入する
※環境変数の設定は慎重に行なってください
用語
プロセス:
WEBサーバーやコマンドなどLinux上で実行されるプログラムの処理のこと。
プロセスはプロセス名とプロセスIDという番号が自動的に付与されます。
Linux上では100を超えるプロセスが動いているが、1つのCPUが一度に実行できるプロセスは1つだけです。
プロセスを確認することで、コマンドが正常に動いているかどうか分かります。
また、以下の性質があります。
・プロセス毎に自分だけのメモリを割り当てられる
・WEBサーバなどネットワーク機能を利用するプロセスはポートを占有する
デプロイ:
配置するや展開するといった意味。
IT業界では、アプリをサーバー上に配置し、Web上に展開する意味になります。
ソフトウェアやハードウェアの利用権などをネットワーク越しに提供する技術。
「必要な時に、必要な分だけ使う」ことができるので、それぞれの事情に合わせてサービスを利用することができます。
Amazon EC2(Elastic Computing Cloud):
仮想サーバーを提供する仮想マシンサービスのこと。
クラウドストレージを提供するサービス。
画像のアップロードなどに使う。
Amazon RDS:
データベースを提供するサービス。
AMI(Amazon Machine Image):
サーバーに関するデータをまるごと保存したデータのこと。
サーバーの設定を自分でゼロからインストールする手間が省けます。
Elastic IP:
みんなはこのIPアドレスを頼りにWebアプリを利用します。
ブラウザからリクエストを受け取りRailsアプリを実際に動作させるソフトウェア。
Railsではpumaがデフォルトで設定されており、「rails s」でそのアプリケーションサーバーの起動を行なっています。
Rack:
アプリケーションサーバーとアプリケーション本体の言語が違うため、それらを連携させるための翻訳プログラムのこと。
自動デプロイツールのgemです。
デプロイ時に必要なコマンド操作が一回で済むので、コマンドの打ち間違いや手順間違いの発生を防ぐことができます。
IAM:
AWSのサービスの一つで、ある権限のみを持たせることができるユーザーアカウントです。
今後に向けて
これでカリキュラムで学んできたことを復習し終わりました。
これからは、今まで作ってきたWEBアプリの説明ができるよう言語化していきます!