21歳未経験からRailsエンジニアになるまで

21歳フリーターの僕がrailsエンジニアになるまでを自分なりに書いていくブログです。

RailsアプリをAWS EC2にデプロイする方法その③デプロイ編①

AWSを使って本番環境にデプロイさせたので今回はその方法を簡潔に分かりやすく4段階にわけて書いて行きます。

1・下準備編

RailsアプリをAWS EC2にデプロイする方法その①下準備編 - 21歳フリーターからrailsエンジニアになるまで

2・DB.サーバー構築編

RailsアプリをAWS EC2にデプロイする方法その②DB.サーバー構築編 - 21歳フリーターからrailsエンジニアになるまで

3・デプロイ編①←今回ここ

RailsアプリをAWS EC2にデプロイする方法その③デプロイ編① - 21歳フリーターからrailsエンジニアになるまで

4・デプロイ編②

RailsアプリをAWS EC2にデプロイする方法その③デプロイ編② - 21歳フリーターからrailsエンジニアになるまで

 

 

いよいよデプロイ編だよ!!頑張っていこう!!!!

(※コマンドは全てMacでの使用を想定しています。)

 

8・EC2へログイン

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

まずは、作成したインスタンスが起動しているのを確認してください。

EC2の「インスタンスの状態」が「running」になっていればOKです!!

 

こっからコンソール画面を使っていきますよ!!

まずは下準備

$ sudo brew install python

$ sudo easy_install pip

$ sudo pip  install awscli

 これらのコマンドを実行してください。

*ここでsudoをつけるとデンジャラスだよみたいな警告を受ける場合があります。*

 

インスタンスへのログイン設定

 

先ほど作成したインスタンスにログインをしていきます。

EC2インスタンスにログインできるユーザーとして、AWSでは、デフォルトでec2-userという名のユーザーが用意されています。

 

まずは、

1・ec2-userでログイン

2・新たなユーザー作成

3・作成したユーザーにec2-user と同等の権限を付与

4・新たなユーザーで再ログイン

 の流れで進めていきます!

 

打ち込むコマンドは下記の通りです。

*[ ~ ] $: mv Downloads/CHARME.pem .ssh/

*[ ~ ] $: cd .ssh/

*[ .ssh ] $: chmod  600 CHARME.pem

*[ .ssh ] $: ssh -i  CHARME.pem ec2-user@54.92.132.123

 *最後の@以降のURLは、作成したEC2インスタンスと紐付けたElastic IPを使用してください!!*

 

初回ログインの場合、上記コマンドを打ち込むと、

「本当に接続を続けるの...?」と聞かれますので恐れずに「yes」としましょう!

 

続いて新たなユーザーを作成し、作成したユーザーにマスター権限を与えていきます。

[ec2-user|~]$ sudo adduser seiya (名前)

[ec2-user|~]$ sudo password  seiya

[ec2-user|~]$ sudo visudo 

「passwd: すべての認証トークンが正しく更新できました。」と表示されればユーザー登録とパスワード変更が完了です。

*パスワードの基準が割と厳しめなのでランダムパスワードをググってやるといいかもです!!*

 

上記の最後のコマンドを実行するとVIMが開くと思いますので

1・rootに関する権限の記述箇所を探す(結構下の方)

root    ALL=(ALL)         ALL

2・その下に、作成したユーザーに権限を追加する記述

seiya  ALL=(ALL)         ALL  を追加する

3・escを押してInputモード終了

4・Shift +  zz で保存&編集終了

 とやります。

編集が完了したら

 [ec2-user|~]$ sudo su - seiya

 このコマンドでユーザーの切り替えを行います。

無事に[ec2-user|がseiya(作成したユーザー名)と切り替わればOKです。

 

SSH通信によるインスタンスへのログイン

続いては実際にSSHという通信方法を用いてインスタンスにログインしていきます。
流れとしては

1・ローカルで鍵の生成

2・その鍵をどの通信の認証時に使用するか等を設定

3・サーバーとの認証処理を行う

4・実際に新ユーザーでログイン 

 という流れでいきます!!

早速行ってみよう(ここからはローカルでの作業です!!

[~]$ cd .ssh

[.ssh]$ ssh-keygen -t rsa

(#公開鍵を作成)

-----------------------------

Enter file in which to save the key ():CHARME_key_rsa

(#ここでファイルの名前を記述して、エンター)

Enter passphrase (empty for no passphrase):

(#何もせずそのままエンター)

Enter same passphrase again:

(#何もせずそのままエンター)

-----------------------------

 

[.ssh]$ ls

#「CHARME_key_rsa」と「CHARME_key_rsa.pub」が生成されたことを確認

[.ssh]$ vi config

(#VIMを起動し、設定ファイルを編集する)

-----------------------------

# 以下を追記

Host CHARME_key_rsa

  Hostname 前出のElastic IP (#自分の設定に合わせて)

  Port 22

  User seiya (#先ほどのユーザー名)

  IdentityFile ~/.ssh/CHARME_key_rsa (#秘密鍵の設定)

-----------------------------

[.ssh]$ cat CHARME_key_rsa.pub

(#鍵の中身をターミナル上に出力ssh-rsa~~~~localまでをコピーしておく)

 上記により、
1.ローカルで鍵の生成
2.その鍵をどの通信の認証時に使用するか等を設定
ここまでが完了しました。 続けて見ていきます。
(ここからはサーバー側の作業です!!)

[seiya|~]$ mkdir .ssh

[seiya|~]$ chmod 700 .ssh

[seiya|~]$ cd .ssh

[seiya|.ssh]$ vi authorized_keys

(#vimが開く)

-----------------------------

ssh-rsa sdfjerijgviodsjcIKJKJSDFJWIRJGIUVSDJFKCNZKXVNJSKDNVMJKNSFUIEJSDFNCJSKDNVJKDSNVJNVJKDSNVJKNXCMXCNMXNVMDSXCKLMKDLSMVKSDLMVKDSLMVKLCA shizuma@shizuma-no-MacBook-Air.local

(#先ほどコピーした鍵の中身を貼り付け)

-----------------------------

[seiya|.ssh]$ chmod 600 authorized_keys

[seiya|.ssh]$ exit

[ec2-user|~]$ exit

 これで新ユーザーに見事権限が付与されたはず!!
ローカルで下記コマンドを入力し、実際にログインできるか試してみましょう。

[~]$ ssh CHARME_key_rsa

ログインできれば、無事ユーザー設定は終了です。

 

9・EC2インスタンスの環境構築

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

 次は、作成したEC2インスタンス内でrubyやその他の環境が動くよう設定していきます!!

[seiya] sudo yum install \ #yumのインストール

git make gcc-c++ patch \ #cc++コンパイラgitの差分をpatchファイルに変更

openssl-devel \

libyaml-devel libffi-devel libicu-devel \

libxml2 libxslt libxml2-devel libxslt-devel \

zlib-devel readline-devel \

mysql mysql-server mysql-devel \

ImageMagick ImageMagick-devel \

epel-release

 1行づつ実行していってください。もう呪文です。はい!

途中で『こんだけインストールしても大丈夫??』みたいなのが出ますが

「y」を打ち込んでEnterをしてください!!

 

次はNode.jsのインストール。

[seiya|~]$ sudo yum install nodejs npm --enablerepo=epel 

 これも確認が出てくるので、「y」→Enterをしてください。

 

そして、rbenvのインストール→パスを通して→ruby-buildのインストールです。

[seiya|~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv

(#rbenvのインストール)

[seiya|~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile

(#パスを通す)

[seiya|~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile

[seiya|~]$ source .bash_profile 

(#.bash_profileの読み込み)

[seiya|~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

(#ruby-buildのインストール)

[seiya|~]$ rbenv rehash 

(#rehashを行う)

 

そしていよいよ、rubyのインストールです。

# ruby 2.1.3のインストール(versionは適宜変更)

[seiya|~]$ rbenv install -v 2.1.3

[seiya|~]$ rbenv global 2.1.3

[seiya|~]$ rbenv rehash

[seiya|~]$ ruby -v

 ruby -vコマンドで、しっかりとrubyのバージョンが表示されれば成功です。

 

10・gitとの連携、アプリのクローン

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー

次は、ご自身で作成されたアプリをgitからクローンし、EC2インスタンス内に配置していきます。(やっとここまで来たかぁ)

 

vi コマンドで.gitconfigというgitに関する設定ファイルを生成します。

[seiya|~]$ vi .gitconfig

 そして下記のように設定しましょう。

[user]

  name = your_name (#gitに登録した自分の名前)

  email = hoge@hoge.com (#git登録時の自分のメアド)

 

[alias] (#これはお好きに)

  a = add

  b = branch

  ch = checkout

  st = status

 

[color] (#色付け)

  ui = true

 

# githubの場合

[url "github:"] (#pullpushのための設定)

    InsteadOf = https://github.com/

    InsteadOf = git@github.com:

# bitbucketの場合

[url "bitbucket:"]

    InsteadOf = https://ユーザ名@bitbucket.org/

    InsteadOf = git@bitbucket.org:

 完了したらファイルを保存し、
アプリを配置するディレクトリを作成していきます。

[seiya|~]$ cd /

[seiya|/]$ sudo chown seiya var (#varフォルダの所有者をseiyaにする)

[seiya|/]$ cd var

[seiya|var]$ sudo mkdir www

[seiya|var]$ sudo chown seiya www

[seiya|var]$ cd www

(#wwwと同じ処理)

[seiya|www]$ sudo mkdir rails

[seiya|www]$ sudo chown seiya rails

 下準備が整ったら、いよいよgitとの接続です。
まずは、下記コマンドを打ち込んでください。

[seiya|www]$ cd ~

[seiya|~]$ mkdir .ssh (#既に生成されている場合もあります。)

[seiya|~]$ chmod 700 .ssh

[seiya|.ssh]$ cd .ssh

[seiya|.ssh]$ ssh-keygen -t rsa

-----------------------------

Enter file in which to save the key ():aws_git_rsa

(#ここでファイルの名前を記述して、エンター)

Enter passphrase (empty for no passphrase):

(#何もせずそのままエンター)

Enter same passphrase again:

(#何もせずそのままエンター)

-----------------------------

[naoki|.ssh]$ ls

(#aws_git_rsa」と「aws_git_rsa.pub」が生成されたことを確認)

[naoki|.ssh]$ vi config

-----------------------------

# githubの場合以下を追記

Host github

  Hostname github.com

  User git

  IdentityFile ~/.ssh/aws_git_rsa (#秘密鍵の設定)

# bitbucketの場合以下を追記

Host bitbucket

  Hostname bitbucket.org

  User git

  IdentityFIle ~/.ssh/aws_git_rsa (#秘密鍵の設定)

-----------------------------

[seiya|.ssh]$ cat aws_git_rsa.pub

-----------------------------

ssh-rsa sdfjerijgviodsjcIKJKJSDFJWIRJGIUVSDJFKCNZKXVNJSKDNVMJKNSFUIEJSDFNCJSKDNVJKDSNVJNVJKDSNVJKNXCMXCNMXNVMDSXCKLMKDLSMVKSDLMVKDSLMVKLCA seiya@ip-10-0-1-10

 catで表示させた公開鍵を、githubにアクセスして登録していきます。
gitへの公開鍵登録に関しては下記サイトが参考になります。 

GitHubでssh接続する手順~公開鍵・秘密鍵の生成から~ - Qiita

 

ちなみに、「Bad owner or permissions on~~~~」と言われてしまった場合は、configファイルの権限を変更する必要があります。

[seiya|.ssh]chmod 600 config

でファイルの権限を変更した後、再び、

$ ssh -T github

 を実行してみてください。

githubの場合

Hi seiya! You've succwwwessfully authenticated, but GitHub does not provide shell access.

bitbucketの場合

logged in as seiya.

 

このようなメッセージが返って来れば接続成功です。

登録が済んだら、いよいよクローンです!!!!

[seiya|.ssh]$ cd /var/www/rails

[seiya|rails]$ git clone git@github.com:~~~~~~~~~~~~

 git cloneの後に続くURLは、githubの下記より取得してください。

f:id:yamasey712:20191012170807p:plain

これでめでたくクローンが出来た...かと思います!(できてておくれ(゚∀゚))
確認のために、下記コマンドを実行してみてください。

[seiya|.ssh]$ cd /var/www/rails

[seiya|rails]$ ls

 ご自身のアプリ名が記載されたフォルダが存在すれば、見事クローン成功です!!

おめでとうございます!!

アプリのsecret_key_baseの設定

クローンが成功したら、railsファイルのconfig/secrets.ymlに記述されている、secrets_key_baseを変更していきましょう。

こちらを参考に行なってください

Rails5.1をproduction環境で起動する際の秘密鍵設定 - Qiita

この記事のsecret_key_baseに下記の方法で生成したシークレットキーを使ってください。


今回は本番にあげるアプリの設定を変更するので、productの欄のみ編集すれば大丈夫です。

* 僕の場合Rails5.1.6でやっていたのでこの方法ですがどうやらRails5.2から違う方法が新しく追加されたみたいですね!(もちろんこれでもできます)

 

まずはシークレットキーを生成していきます。

 

[seiya|rails] $: cd  CHARME

[seiya|CHARME] $: rake secret

(#シークレットキーを生成)

-----------------------------

jr934ugr89vwredvu9iqfj394vj9edfjcvnxii90wefjc9weiodjsc9o i09fiodjvcijdsjcwejdsciojdsxcjdkkdsv

(#表示されるkeyをコピーする)

-----------------------------

[seiya|CHARME] $: cd /

[seiya|/] $: sudo  vi /var/www/rails/CHARME/config/secrets.yml.key(後述)

上記の最後のコマンドで入力する値はローカル環境内のsecrets.yml.key内をコピペすればOKです!!

これで無事、生成されたシークレットキーをproduction環境に反映出来たことになります。

さぁ、これでやっとこさサーバーにアプリがあがるところまで行くことができました!!!

疲れたね。

あと少し!!!!!

頑張っていこう!!!!

次章:デプロイ編②