【AWS】EC2を利用してRailsアプリをAWSにデプロイしたい!デプロイ編の1

デプロイする

サーバーを作成したので、そこに対してデプロイするってことのようです。が、まだ成功してません。

どうなることやら。

参照:(デプロイ編①)世界一丁寧なAWS解説。EC2を利用して、RailsアプリをAWSにあげるまで - Qiita

Mac

EC2へのログイン

作成したインスタンスを「起動」状態にする。

f:id:kisokoji:20180402164713p:plain:w400

インスタンスの状態:running


コンソールでローカルの準備

ローカルマシンのコンソールを起動する。

$ sudo brew install python
$ sudo easy_install pip
$ sudo pip install awscli

まぁ上から順に入れるわけですが、一番上を入れる前にbrewが入ってなきゃだめだったりするわけですが、Homebrew画面からコピペしてインストールしておく。

その都度、エラーが出たらまぁぐぐって対応してみましょう。

すんなり行ったらラッキー!環境によって違うからね。

私は・・・中途半端にpythonがインストールされていたりしてましたが、どうにか完了。



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

EC2作成完了時にダウンロードしたキーペアのファイルをダウンロードディレクトリから.sshディレクトリへ移動する。

$ mv Downloads/TEST_key.pem .ssh/

.sshディレクトリへ移動

$ cd .ssh/

公開鍵に600番のアクセス権を付与する

$ chmod 600 TEST_key.pem

公開鍵を利用してec2-userとしてログイン

$ ssh -i TEST_key.pem ec2-user@[Elastic IP]

ここで

ssh: connect to host [Elastic IP] port 22: Operation timed out

とな。

何が〜と検索。

最初の時は、Macの設定の問題。

【AWS】EC2を利用してRailsアプリをAWSにデプロイしたい!準備編 - アラフィフ女の独り言

リモートログインにチェックがなかったら・・・駄目ですね。

それでも駄目かも・・・

な場合は、「セキュリティグループのインバウンドルール」のソースを再度確認。

ついでに

ping XXX.XXX.XXX.XXX

ってインバウンドルールのSSHに指定したIPが通じてるか確認。通っていることを確認出来たら再度トライ。

修正した場合は、インスタンス画面で「停止」ー「開始」をしてから。

初回ログインの場合

The authenticity of host 'XX.XX.XX.XX (XX.XX.XX.XX)' can't be established. [RSA] key fingerprint is ・・・・

Are you sure you want to continue connecting (yes/no)? yes

   __|  __|_  )
   _|  (     /   Amazon Linux AMI
  ___|\___|___|

ってことで、ログイン出来ました〜。

Run "sudo yum update" to apply all updates.

ってことなので、まずはこれをしちゃいます。

[ec2-user@ip-XXX ~]$ sudo yum update



EC2ログイン後

マスター権限

"zerobit" というユーザー名で設定をしていく。

[ec2-user|~]$ sudo adduser zerobit
[ec2-user|~]$ sudo passwd zerobit

パスワードはかなりしっかりしたものじゃないと認めてもらえない。しかもメッセージが「このパスワードは辞書チェックに失敗しました。 - 辞書の単語に基づいています」ってことだから新しく入れると「パスワードが一致しません。」と矛盾しているけど、無視してそれなりに長くていろんな要素が入ったものを2回以上入れたらいい。(メッセージにビビって変更したけど、しなくてもいいっぽい)

passwd: すべての認証トークンが正しく更新できました

これでOK。

忘れないように。

[ec2-user|~]$ sudo visudo

VIMの起動。

viファイルの編集方法は・・・

i キーで編集が出来る。

手順

root ALL=(ALL) ALL
という記述を探す。 その下に
zerobit ALL=(ALL) ALL
追加する。

終了の方法

  1. escキーを押す。
  2. Shift + zz (保存+編集完了)

編集が完了したらユーザーの切り替えを行う。

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

ユーザーが切り替わったことを確認する。



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

ローカル作業(もうひとつターミナルを起動して作業するといい)

  1. ローカルで鍵の生成
  2. その鍵をどの通信の認証時に使用するかなどを設定

$ cd .ssh
[.ssh]$ ssh-keygen -t rsa


Enter file in which to save the key (/Users/baba/.ssh/id_rsa):test_key_rsa
Enter passphrase (empty for no passphrase):
未入力でエンター)
Enter same passphrase again:
未入力でエンター)


[.ssh]$ ls
* test_key_rsa
* test_key_rsa.pub があることを確認。


[.ssh]$ vi config
vimを起動
次の部分をペーストする。 Host test_key_rsa
Hostname 前出のElastic IP (#自分の設定に合わせて)
Port 22
User naoki (#先ほどのユーザー名)
IdentityFile ~/.ssh/mumu_key_rsa (#秘密鍵の設定)
 
* ()部分は削除する。


[.ssh]$ cat test_key_rsa.pub  
ssh-rsa以降をコピーする。



サーバー側作業

  1. サーバーとの認証処理
  2. 実際に新ユーザーでログイン

[zerobit|~]$ mkdir .ssh [zerobit|~]$ chmod 700 .ssh
[zerobit|~]$ cd .ssh
[zerobit|.ssh]$ vi authorized_keys (vimがオープンするので、ssh-rsaをペーストする)


ssh-rsa AAAAB3NzaC1yc2EAAAADAQABA・・・


[zerobit|.ssh]$ chmod 600 authorized_keys [zerobit|.ssh]$ exit
logout
[ec2-user|~]$ exit
ログアウト

これで権限の付与が完了。

再度ログインをしてみる。

$ ssh test_key_rsa

ログイン出来れば、無事ユーザー設定が終了。

ログインできない場合は、configファイルの見直しなどをするといい。コピペで修正しきれてなかったりする。。。



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

ログインした状態でrubyの実行環境を作成する。

[zerobit] sudo yum install \
git make gcc-c++ 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行ずつコピペして実行。

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
 #1) Respect the privacy of others.
 #2) Think before you type.
 #3) With great power comes great responsibility.
[sudo] password for zerobit:

パスワードを入力してEnter。

総ダウンロード容量: 109 M
インストール容量: 293 M
Is this ok [y/d/N]: y

「y」を入力Enter。

Node.jsのインストール

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

総ダウンロード容量: 17 M
インストール容量: 50 M
Is this ok [y/d/N]: y

「y」を入力Enter。

上記の処理を行います。よろしいでしょうか? [y/N]y

「y」を入力Enter。

  1. rbenvのインストール
  2. パスを通して
  3. ruby-buildのインストール

[zerobit|~]$git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
[zerobit|~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile [zerobit|~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
[zerobit|~]$ source .bash_profile
[zerobit|~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
[zerobit|~]$ rbenv rehash

rubyのインストール

rubyのversionを確認する。

rbenv install --list

リストから選択したバージョンでインストールをする。

# ruby 2.5.1のインストール
[zerobit|~]$ rbenv install -v 2.5.1 [zerobit|~]$ rbenv global 2.5.1
[zerobit|~]$ rbenv rehash
[zerobit|~]$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux]

成功!



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

.gitconfigファイルにgitに関する設定ファイルを生成する。

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:


コメントは削除し、必要な項目を入力すること。
自分は[github]ではないので、削除して[bitbucket]のみにした。

アプリを設置するディレクトリの作成

[zerobit|~]$ cd /
[zerobit|/]$ sudo chown zerobit var
#varフォルダの所有者をzerobitにする
[sudo] password for zerobit:
#パスワードを入力
[zerobit|/]$ cd var
[zerobit|var]$ sudo mkdir www
[zerobit|var]$ sudo chown zerobit www
#wwwフォルダの所有者をzerobitにする
[zerobit|var]$ cd www
[zerobit|www]$ sudo mkdir rails
[zerobit|www]$ sudo chown zerobit rails
#railsフォルダの所有者をzerobitにする


gitとの接続

[zerobit|www]$ cd ~
[zerobit|~]$ mkdir .ssh
# 既に生成されている場合もある
[zerobit|~]$ chmod 700 .ssh [zerobit|~]$ cd .ssh
[zerobit|ssh]$ ssh-keygen -t rsa


Generating public/private rsa key pair.
Enter file in which to save the key (/home/zerobit/.ssh/id_rsa): aws_mini_git_rsa
#ファイル名を入力
Enter passphrase (empty for no passphrase):
#未入力でEnter
Enter same passphrase again:
#未入力でEnter


[zerobit|ssh]$ ls
* aws_mini_git_rsa
* aws_mini_git_rsa.pub
#ファイルが生成されたことを確認


[zerobit|ssh]$ vi config


# githubの場合以下を追記
Host github
Hostname github.com
User git
IdentityFile ~/.ssh/aws_mini_git_rsa (#秘密鍵の設定)
# bitbucketの場合以下を追記
Host bitbucket
Hostname bitbucket.org
User git
IdentityFIle ~/.ssh/aws_mini_git_rsa (#秘密鍵の設定)


[zerobit|ssh]$ cat aws_git_mini_rsa.pub


ssh-rsa AAAAB3NzaC1yc2EAAAA・・・・・


bitbucketの[SSH鍵]で新規作成する。

[zerobit|ssh]$ chmod 600 config

ファイルの権限を変更後

ssh -T bitbucket
Are you sure you want to continue connecting (yes/no)? yes
 
logged in as XXXXX.

接続成功!


クローンの作成

[zerobit|ssh]$ cd /var/www/rails
[zerobit|rails]$ git clone git@bitbucket.org:XXXXX/XXXX.git
# クローンするリポジトリのURL

確認

[zerobit|rails]$ ls

アプリ名のフォルダが存在したらクローン成功。



アプリのsecret_key_baseの設定

クローンが成功したら、railsファイルのconfig/secrets.ymlの記述を変更する。

アプリ名:website_app

[zerobit|rails]$ cd website_app
[zerobit|website_app]$ rake secret
#シークレットキーの生成

これがすんなり行ったらいいのだけど、私はここでエラー。

[zerobit|website_app]$ rake secret rake aborted! LoadError: cannot load such file -- bundler/setup

何が〜!!!

まずbundleがないらしい。

[zerobit|website_app]$ rbenv exec gem install bundle

再度

[zerobit|website_app]$ rake secret
Could not find rake-12.3.1 in any of the sources Run bundle install to install missing gems.

ここで普通にbundle installすると、今度は別の問題があったので、念の為に次を実行

[zerobit|website_app]$ bundle install --without production



Installing sqlite3 1.3.13 with native extensions
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.
current directory:
/home/zerobit/.rbenv/versions/2.5.1/lib/ruby/gems/2.5.0/gems/sqlite3-1.3.13/ext/sqlite3
/home/zerobit/.rbenv/versions/2.5.1/bin/ruby -r
./siteconf20180403-8917-z7khez.rb extconf.rb
checking for sqlite3.h... no
sqlite3.h is missing. Try 'brew install sqlite3',
'yum install sqlite-devel' or 'apt-get install libsqlite3-dev'
and check your shared library search path (the
location where your sqlite3 shared library is located).
extconf.rb failed
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers. Check the mkmf.log file for more details. You may
need configuration options.



An error occurred while installing sqlite3 (1.3.13), and Bundler cannot
continue.
Make sure that gem install sqlite3 -v '1.3.13' succeeds before bundling.
 
In Gemfile:
sqlite3

ってことで、sqlite3のインストールをし直せってことらしい。

意味があるのかわからないけど、まず

[zerobit|website_app]$ bundle update



An error occurred while installing sqlite3 (1.3.13), and Bundler cannot continue.
Make sure that gem install sqlite3 -v '1.3.13' succeeds before bundling.

同じようなエラー

[zerobit|website_app]$ gem install sqlite3 -v '1.3.13'
Building native extensions. This could take a while... ERROR: Error installing sqlite3: ERROR: Failed to build gem native extension.

ダメダメじゃん。

[zerobit|website_app]$ sudo yum install sqlite-devel
[sudo] password for zerobit:
 
総ダウンロード容量: 111 k
インストール容量: 366 k
Is this ok [y/d/N]: y
 
インストール:
sqlite-devel.x86_64 0:3.7.17-8.14.amzn1
 
完了しました!

これが必要ってことらしい。

再度

[zerobit|website_app]$ bundle update

おぉ〜ずらずら〜Bundle updated! よし!最初から!

[zerobit|website_app]$ rake secret


シークレットキーキターーー
a0256dbd23b0f79bd7d8bff9162c75deb79b3b063e58a12190・・・


[zerobit|website_app]$ vi config/secrets.yml


production:
 secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
# 修正
 secret_key_base: a0256dbd23b0f79bd7d8bff9162c75deb79b3b063e58a12190・・・


ここまででとりあえず終わり。

ふぅ〜一筋縄ではいかない。

何が正解か、全然わかってないけど、もっといい方法があるのだろうけど、同じような状況はそうそう上がっていない。

次で最終章らしい。いつ公開できるのだろう。