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に公開鍵を登録
$ 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からコードをクローン
$ 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 のインストール
- Rubyのバージョン確認
$ cd /var/www/chat-space $ ruby -v
- bundler のインストール ローカル環境でのbunderlバージョン確認後
$ gem install bundler -v 2.1.4 $ bundle install
環境変数の設定
secret_key_base;Cookieの暗号化に用いられる文字列
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
ポートの開放
※リージョンの確認をすること.
- EC2インスタンスのセキュリティグループ(launch-wizard-1)をCLICK
- 「インバウンド」をCLICK → 「編集」をCLICK
モーダルウィンドウで「ルールの追加」をCLICK
タイプ プロトコル ポート範囲 カスタム カスタムTCPルール TCP 3000 0.0.0.0/0 - 保存
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