実践で学ぶRuby on rails 〜仮説千本ノック〜

プログラマーとして独立するため日々スキルアップに励んでいます。優れたプログラマは仮説を立てるのがうまい。そこを目指して仮説を立てては検証する日々です!!

AWSを使ったデプロイ〜必要なプログラムのインストール~

EC2インスタンスは、作成しただけでは、サービスを公開する環境としては未完成です。

ここからは、環境設定を行います。

 

ツールのアップデート・インストール

▫️アップデート

ssh接続した状態で、元々EC2インスタンスに含まれるプログラムを、yumというプログラム管理コマンドでアップデートします。

[ec2-user@〇〇〇〇]$ sudo yum -y update

 

▫️まとめて色々インストール

続いて、EC2でrailsを動かすために不足している複数のプログラムをインストール

[ec2-user@〇〇〇〇]$ sudo yum -y install 〇〇〇〇

 ※ご自分でどんなパッケージをインストールするか調べて下さい。

 

▫️Node.jsをインストール

EC2でjavascriptを動かすためにNode.jsをインストール。

cssや画像を圧縮する際に使われる。

[ec2-user@〇〇〇〇]$ sudo curl - sL  https://rpm.nodesource.com/setup_6.x | sudo bash -

[ec2-user@〇〇〇〇]$ sudo yum -y install nodejs

 

▫️rbenvとruby-buildをインストール

rubyのバージョン管理を行うためにインストールする。

rbenv=rubyのバージョン切り替えが可能となる。

ruby-build= rubyの様々なバージョンをインストールが可能となる。

 

rbenvをgitからクローン(インストール)

[ec2-user@〇〇〇〇]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

 

どのディレクトリにいても、絶対パスを指定せずに、rbenvを起動できるようパスを、.bash_profikeに登録する。

[ec2-user@〇〇〇〇]$ echo 'export PATH= "$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

このコマンドの役割が不明。

[ec2-user@〇〇〇〇]$ echo 'eval  "$(rbenv init -)"' >> ~/.bash_profile

 .bash_profileに加えた変更を反映

[ec2-user@〇〇〇〇]$ source .bash_profile

ruby-buildをgitからクローン(インストール)

[ec2-user@〇〇〇〇]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

 

 rubyはバージョン毎に使えるコマンドは異なるが、rehashで各バージョンごとにそれに対応したコマンドを使えるようにする。

[ec2-user@〇〇〇〇]$ rbenv rehash

 

 ▫️Rubyのインストール

rbenv、ruby-buildを入れたら、いよいよRubyのインストールです。

[ec2-user@ip-172-31-25-189 ~]$ rbenv install 2.5.1

 

特定のディレクトリに限定せず、全体で使用するrubyのバージョンを2.5.1に固定するため、globalコマンドでバージョンを指定。

[ec2-user@ip-172-31-25-189 ~]$ rbenv global 2.5.1

 

ここでもバージョンごとに適切なコマンドを使えるようにrehashする

[ec2-user@ip-172-31-25-189 ~]$ rbenv rehash  

 

ちゃんとrubyのバージョンが指定したものになっているかはruby -vで確認すること。

 

 

リージョンを選ぶ基準は以下の3点となります。

リージョンごとにいずれも異なりますが、大体日本でサービスを公開するでしょうから、東京で問題ありません。

▫️利用料金

▫️サービスの利用者 との距離

▫️扱っているサービスの種類

 

EC2インスタンスの作成

続いて、サーバの作成です。

AWSでは、利用者ごとに、仮想のサーバーを提供しており、

EC2インスタンスと呼んでいます。

作成にあたり、設定する項目は次の通り。

 

AMIの選択

Amazon LInux AMIを選択してください。

AMIとは、「Amazon Machine Image」の略語です。

EC2インスタンスを起動するのに必要なOS等の情報が詰まったもので、あらかじめOS、WEBサーバー等、デプロイ環境に必要なものがインストールしてあります。

AMIのコピーであるEC2インスタンスは、AMIによって起動します。

 

EC2インスタンスのタイプ選択

CPU、メモリなどのスペックにより最適なものを選びましょう。

まずは、無料プランの「t2.mcro」がいいでしょう。

 

サーバを操作するための公開鍵、秘密鍵の準備

EC2インスタンスを操作する際には、サーバーをLinuxコマンドを使って自在遠隔操作できるssh(Secure Shell)という手段を使います。

サーバーは、誰にでも操作できてしまうと問題なので、ログインが適正に行われているか、sshではチェックする仕組みがあります。

例えば、今回使う公開鍵認証方式では、次のように安全な通信が担保される。

 ▫️クライアントがログインしたい意思をサーバーに伝える

▫️サーバーは、持っている公開鍵で、認証に使う情報を暗号化し、クライアントに渡す。

▫️クライアントは、持っている秘密鍵で、暗号化された情報を復号した上で、サーバに返す

▫️サーバーが、送られてきた情報が、送った情報と同じであることを確認したら通信を開始

 

公開鍵は、あらかじめEC2インスタンスに用意されているため、秘密鍵をクライアント(自分のローカルPCへ)ダウンロードすれば、二種類の鍵の準備が完了。

 

Elastic IPの設定

EC2インスタンスを作成した時点では、自動でIPアドレスが割り振られていますが、このアドレスは、サーバーを再起動するたびに変更されてしまいます。

アドレスは、固定のものである必要があるため、固定のIPアドレスであるElastic IPを作成し、EC2インスタンスに紐つけます。

Elastic IPは、Amazonプール(Amazon所有アドレス)、ユーザ所有のアドレスいずれかから選択します。学習する上では、アドレスにこだわる必要はないので、前者を選択し、適当に割り振ってもらいましょう。

※パブリックIPという表現が出てきますが、要するにIPアドレスなので、Elastic IPもパブリックIPの範疇です。

 

Elastic IPをEC2インスタンスの紐付け

Elastic IPとEC2インスタンスの作成が完了したら、両者を紐付け(関連付け)しましょう。

EC2インスタンスへアクセスは、IPを割り振ることで初めて実現します。

※紐付け作業を行うと、「プライベートIP」が自動的に割り振られる。この役割は不明。。。

少なくとも、外部からサーバにアクセスするためのアドレスとしては機能していない。

 

ファイアーウォール設定

これで、サーバ遠隔操作するためのssh接続が可能となりました。

が、デフォルトではファイアーウォールの設定で、他のユーザーがサーバにアクセスするためのhttp接続等が行えません。セキュリティグループのメニューから、サーバのポートを解放する等、ウォールの設定を変更しましょう。

 

◽️インバウンド

外部からサーバへのアクセスに関する設定

[ssh(設定ずみ)]

あなたのパソコンからサーバーを遠隔操作できるように設定する。

ポート=22が一般的だがバレやすいので慣れたら変えた方が良い。

ソース=カスタムにして、どのユーザーからでもアクセス可能を意味する「0.0.0.0/0」または「::/0」にする。

[HTTP]

世界中どのパソコンからもアクセスできるように設定する。

ポート=httpなら80、httpsなら443と決まっている。

httpsは、通信を暗号化でき、サイトの運営者が変な人でないことを証明してくれる仕組みだが、証明書の発行等が必要なので、まずはhttpのみ設定する。

EC2インスタンスへのログイン

EC2インスタンスを上記手順で作成すると、ec2-userというユーザーが作成されます。

実際には、このユーザーは権限が大きすぎるので、小さくしたユーザーを作成して、サーバーの運用を行うが、まずはec2-userのままログインができるか試しましょう。

 

秘密鍵ファイル(〇〇〇〇.pem)を.sshディレクトリに格納

ホームディレクトリの直下に.sshディレクトリを 作成し、秘密鍵のファイルを格納する。

 

・.sshディレクトリ内で、秘密鍵ファイルの権限設定コマンドを実行

$ chmod 600 〇〇〇〇.pem

あなた、仲間、他人の3者に対して、権限を設定できます。

色々な法はありますが今回は3者に同時に設定する方法をとります。

3桁の数字は左から、あなた、仲間、他人を意味します。

上の例では、

6=あなたの権限 4(読み取りさせる)+2(書き込みさせる)

0=仲間の権限  0(何もさせない)

0=他人       0(何もさせない)

 

・ec2-userとして、秘密鍵を使ってEC2インスタンスssh接続する

$ ssh  -i  〇〇〇〇.pem  ec2-user@Elastic IP

 ※単に秘密鍵の名前を書くのではなく、-iをつけて初めて認識される。