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 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
*最後の@以降の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
(#公開鍵を作成)
-----------------------------
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 (#秘密鍵の設定)
-----------------------------
上記により、
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
これで新ユーザーに見事権限が付与されたはず!!
ローカルで下記コマンドを入力し、実際にログインできるか試してみましょう。
ログインできれば、無事ユーザー設定は終了です。
9・EC2インスタンスの環境構築
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
次は、作成したEC2インスタンス内でrubyやその他の環境が動くよう設定していきます!!
[seiya] sudo yum install \ #yumのインストール
git make gcc-c++ patch \ #cとc++のコンパイラ、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:"] (#pull、pushのための設定)
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]$ 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:
(#何もせずそのままエンター)
-----------------------------
(#「aws_git_rsa」と「aws_git_rsa.pub」が生成されたことを確認)
-----------------------------
# 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
でファイルの権限を変更した後、再び、
を実行してみてください。
・githubの場合
Hi seiya! You've succwwwessfully authenticated, but GitHub does not provide shell access.
・bitbucketの場合
logged in as seiya.
このようなメッセージが返って来れば接続成功です。
登録が済んだら、いよいよクローンです!!!!
git cloneの後に続くURLは、githubの下記より取得してください。
これでめでたくクローンが出来た...かと思います!(できてておくれ(゚∀゚))
確認のために、下記コマンドを実行してみてください。
[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環境に反映出来たことになります。
さぁ、これでやっとこさサーバーにアプリがあがるところまで行くことができました!!!
疲れたね。
あと少し!!!!!
頑張っていこう!!!!
次章:デプロイ編②