53.COM

日々の学習の記憶等々

AWSを利用したRuby on Rails環境構築 #4

自動デプロイの設定

EC2サーバにローカルプロジェクトをクローンする前処理

EC2サーバのSSH鍵ペアの作成

  • 鍵の生成
$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
  • 公開鍵の確認
$ cat ~/.ssh/id_rsa.pub

表示されたSSH公開鍵の値をコピー.

GitHubに公開鍵を登録

  • GitHubに公開鍵を登録
  • SSH接続確認
$ ssh -T git@github.com

アプリケーションサーバの設定

Unicornのインストール

  • ローカルプロジェクトのGemfileを編集

Gemfile

group :production do
  gem 'unicorn', '5.4.1'
end
  • config/unicorn.rbファイルを作成
    Unicorn設定項目について
設定項目 詳細
worker_processes 1
working_directory app_path
pid "#{app_path}/tmp/pids/unicorn.pid"
listen 3000

Uglifierの編集

JavaScriptを軽量化するgemがテンプレートリテラル記法に対応していないのでコメントアウトする.
config/environments/production.rb

config.assets.js_compressor = :uglifier
↓
# config.assets.js_compressor = :uglifier

GitHubからコードをクローン

  1. GitHubとのSSH接続確認
  2. /var/wwwディレクトリの作成,権限をec2-userに変更
$ sudo mkdir /var/www/
$ sudo chown ec2-user /var/www/

  3. GitHubからリポジトリのURLを取得,コードをクローン

$ cd /var/www/
$ git clone リポジトリURL 

Railsの設定

/var/www/プロジェクト名ディレクトリ内で作業する.

Swap領域の作成

$ cd
$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512
$ sudo chmod 600 /swapfile1
$ sudo mkswap 600 /swapfile1
$ sudo swapon /swapfile1
$ sudo sh -c 'echo "/swapfile1  none        swap    sw              0   0" >> /etc/fstab'

gem のインストール

  1. Rubyのバージョン確認 $ cd /var/www/chat-space $ ruby -v
  2. bundler のインストール ローカル環境でのbunderlバージョン確認後
$ gem install bundler -v 2.1.4
$ bundle install

環境変数の設定

secret_key_baseCookieの暗号化に用いられる文字列
1. secret_key_baseの作成

$ rake secret

  文字列をコピー
2. 環境変数の設定

$ cd ~
$ sudo vim /etc/environment

  iで挿入モードにして

DATABASE_PASSWORD=「MySQLのrootユーザーのパスワード」
SECRET_KEY_BASE=「secret_key_baseの文字列」

  escで編集モードにし:wqで保存して閉じる.
3. 設定の確認

$ exit
$ ssh -i インスタンス名.pem ec2-user@インスタンスのアドレス
$ env | grep DATABASE_PASSWORD
$ env | grep SECRET_KEY_BASE

ポートの開放

※リージョンの確認をすること.

  1. EC2インスタンスのセキュリティグループ(launch-wizard-1)をCLICK
  2. 「インバウンド」をCLICK → 「編集」をCLICK
  3. モーダルウィンドウで「ルールの追加」をCLICK

    タイプ プロトコル ポート範囲 カスタム
    カスタムTCPルール TCP 3000 0.0.0.0/0
  4. 保存

Railsの起動

エラーログの確認方法

ec2-user@リポジトリ名

$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D
$ less log/unicorn.stderr.log

database.ymlの設定変更

production:
  <<: *default
  database: chat-space_production
  username: root
  password: <%= ENV['DATABASE_PASSWORD'] %>
  socket: /var/lib/mysql/mysql.sock

ローカルの変更をgit commitして
ec2-user@リポジトリ名

$ git pull origin master
$ rails db:create RAILS_ENV=production
$ rails db:migrate RAILS_ENV=production
# MySQLが起動していない場合
$ sudo service mysqld start

Railsの再起動

$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D

http://サーバに紐付けたElastic IP:3000/にブラウザでアクセス.

アセットファイルのコンパイル

1. アセットコンパイルの実行

$ rails assets:precompile RAILS_ENV=production

2. Unicornプロセスの停止

$ ps aux | grep unicorn
ec2-user  4993  0.0  8.7 399876 88484 pts/1    Sl+  04:44   0:02 unicorn_rails master -c config/unicorn.rb -E production 
# PIDの停止
$ kill 4993
$ ps aux | grep unicorn
# 強制終了させるには
$ kill -9 4993

3. Unicornの再起動

```
RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
```

http://サーバに紐付けたElastic IP:3000/にブラウザでアクセス.

ログの確認

$ tail -f log/production.log
# ⌃C でリアルタイム表示を停止

トラブルシューティング

$ less /var/www/リポジトリ>/log/unicorn.stderr.log
$ cat /var/www/リポジトリ>/log/unicorn.stderr.log