大田区から発信するゆるゆる日記

主にITエンジニアに関する備忘録日記。たまに趣味も。何か不備があればコメント頂けると幸いです。Twitterアカウント https://twitter.com/ryuzan03

サーバー

爆速学習のサーバ編です。

なんだかんだ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をインストールする

GithubSSH鍵を登録する

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 S3

クラウドストレージを提供するサービス。

画像のアップロードなどに使う。

 

Amazon RDS:

データベースを提供するサービス。

 

AMI(Amazon Machine Image):

サーバーに関するデータをまるごと保存したデータのこと。

サーバーの設定を自分でゼロからインストールする手間が省けます。

 

Elastic IP:

AWSから割り振られる固定のパブリックIPアドレス

みんなはこのIPアドレスを頼りにWebアプリを利用します。

 

アプリケーションサーバー:

ブラウザからリクエストを受け取りRailsアプリを実際に動作させるソフトウェア。

Railsではpumaがデフォルトで設定されており、「rails s」でそのアプリケーションサーバーの起動を行なっています。

 

Rack:

アプリケーションサーバーとアプリケーション本体の言語が違うため、それらを連携させるための翻訳プログラムのこと。

 

Capistrano

自動デプロイツールのgemです。

デプロイ時に必要なコマンド操作が一回で済むので、コマンドの打ち間違いや手順間違いの発生を防ぐことができます。

 

IAM:

AWSのサービスの一つで、ある権限のみを持たせることができるユーザーアカウントです。

 

今後に向けて

これでカリキュラムで学んできたことを復習し終わりました。

 

これからは、今まで作ってきたWEBアプリの説明ができるよう言語化していきます!