#この記事について
前編の内容を前提として進めていきます。
予めGitHubのリポジトリを作成しておいてください。
今回はEC2を使ったRailsアプリのデプロイをします。
(前編)
https://qiita.com/kotobuki562/items/92827bcf99d89b350445
(後編-データベース構築-)
https://qiita.com/kotobuki562/items/92827bcf99d89b350445
#GitHubのSSH鍵を登録
まずはGitHubのリポジトリをEC2にクローンするために、SSH鍵を登録しましょう。SSH鍵を登録しないと、EC2がGitHubに接続することができません。
下記のコマンドをEC2内で実行してください。
実行すると色々入力を求められることがあります。
その際は全て「Enter」を押してください。
成功すると「RSA 4096」といった図形の様なものが出力されます。
[ec2-user@ip-111-11-11-111 ~]$ ssh-keygen -t rsa -b 4096
それではcatコマンドでSSH鍵の中身を見ていきましょう。
下記のコマンドを実行してください。
[ec2-user@ip-111-11-11-111 ~]$ cat ~/.ssh/id_rsa.pub
続いてGirHubに移動してSSH鍵の登録をしましょう
下記のURLからアクセスして、先ほどのcatコマンドで確認したSSH鍵をコピペしましょう。
GitHub側のSSH鍵のタイトルは好きな名前をつけてください。
https://github.com/settings/keys
鍵を登録できたら下記のコマンドを実行してください。
実行後、yes/no聞かれるのでyesを洗濯してください。
その後アクセスが完了します。
[ec2-user@ip-111-11-11-111 ~]$ ssh -T git@github.com
#アプリケーションサーバー
今回は「unicorn」を使ってアプリケーションサーバーを作っていきます。
unicornのGemのインストールがまだの方は先にインストールをしましょう。
今回はproductionの環境で構築していきます。
group :production do
gem unicorn
end
続いて、config内にunicorn.rbを作成し、下記の様に記述しましょう。
サンプルとして記述しておきますが、ご自身で設定されるのでもOKです。
app_path = File.expand_path('../../', __FILE__)
worker_processes 1
working_directory app_path
pid "#{app_path}/tmp/pids/unicorn.pid"
listen 3000
stderr_path "#{app_path}/log/unicorn.stderr.log"
stdout_path "#{app_path}/log/unicorn.stdout.log"
timeout 60
preload_app true
GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true
check_client_connection false
run_once = true
before_fork do |server, worker|
defined?(ActiveRecord::Base) &&
ActiveRecord::Base.connection.disconnect!
if run_once
run_once = false
end
old_pid = "#{server.config[:pid]}.oldbin"
if File.exist?(old_pid) && server.pid != old_pid
begin
sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
Process.kill(sig, File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH => e
logger.error e
end
end
end
after_fork do |_server, _worker|
defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
end
#GitHubリポジトリをクローンする
続いてGitHubからクローンするためにディレクトリを作りましょう。
ディレクトリを作成したら権限をEC2ユーザーに渡すので、
[ec2-user@ip-111-11-11-111 ~]$ sudo mkdir /var/www/
[ec2-user@ip-111-11-11-111 ~]$ sudo chown ec2-user /var/www/
作成したディレクトリにGitHubをクローンします。
ディレクトリに移動してgit cloneコマンドを実行してください。
最後にbundle installでGemを適用しましょう。
[ec2-user@ip-111-11-11-111 ~]$ cd /var/www/
[ec2-user@ip-111-11-11-111 www ~]$ git clone コピーしたURLを貼り付ける
[ec2-user@ip-111-11-11-111 app ~]$ bundle install
続いて環境変数を設定していきます。
下記のコマンドを実行してください。
出てきたらそれをコピーしておきましょう。
[ec2-user@ip-111-11-11-111 <リポジトリ名> ~]$ rake secret
続いて実際に環境変数を記述していきます。
下記コマンドを実行して記述していきましょう。
[ec2-user@ip-111-11-11-111 ~]$ sudo vim /etc/environment
前章で設定したデータベースの環境変数を設定していきます。
下記2点を記述していきましょう
DATABASE_PASSWORD='データベースのrootユーザーのパスワード'
SECRET_KEY_BASE='さきほど作成したsecret_key_base'
これでひとまず準備完了。
#EC2のポート解放
webのEC2に戻り、ポートを解放しましょう。
先ほど記述したunicorn.rbのポート番号3000を解放します。
設定の仕方は前編で述べているので、そこを確認してください。
下記の画像の様に設定してください。
#デプロイ
まずはローカルのdatabase.ymlを編集します。
下記の様に編集してください。
databaseは編集しないでください。
production:
<<: *default
database: app_production
username: root
password: <%= ENV['DATABASE_PASSWORD'] %>
socket: /var/lib/mysql/mysql.sock
ターミナルのEC2に戻り、git pullしましょう。
[ec2-user@ip-111-11-11-111 <リポジトリ名>] git pull origin master
EC2内でデータベースをcreateしてmigrateしましょう。
これで準備完了です。
[ec2-user@ip-111-11-11-111 <リポジトリ名>]$ rails db:create RAILS_ENV=production
[ec2-user@ip-111-11-11-111 <リポジトリ名>]$ rails db:migrate RAILS_ENV=production
それではassets:orecompileでassetsディレクトリを反映させます。
最後にbundle exec unicorn_railsでサーバー立ち上げてください。
[ec2-user@ip-111-11-11-111 <リポジトリ名>]$ rails assets:precompile RAILS_ENV=production
[ec2-user@ip-111-11-11-111 <リポジトリ名>]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D
立ち上げが確認できているか確認するため下記のコマンドを実行してください。
[ec2-user@ip-111-11-11-111 <リポジトリ名>]$ ps aux | grep unicorn
#下記の様なプロセスが出力されます。
ec2-user 5879 0.0 13.0 515244 131640 ? Sl 11月09 0:02 unicorn_rails master -c config/unicorn.rb -E production -D
ec2-user 5887 0.0 12.6 525216 127600 ? Sl 11月09 0:02 unicorn_rails worker[0] -c config/unicorn.rb -E production -D
ec2-user 15917 0.0 0.0 119436 976 pts/0 S+ 03:26 0:00 grep --color=auto unicorn
停止させる場合は下記のコマンドを記述してください。
[ec2-user@ip-111-11-11-111 <リポジトリ名>]$ kill 5879 #プロセスIDを停止
プロセスをkillした後下記コマンドを実行して実際にブラウザに反映されているか確認しましょう。
http://<Elastic IP>:3000/でアクセスすることができます。
[ec2-user@ip-111-11-11-111 <リポジトリ名>]$ RAILS_SERVE_STATIC_FILES=1 unicorn_rails -c config/unicorn.rb -E production -D
#エラーログ
最後にもしデプロイ後、エラーが起きた際は下記のコマンドを実行して、エラーログを見てみましょう。
先ほどunicorn.rbに記述したエラーログの格納先にアクセスしてみてみましょう。
[ec2-user@ip-111-11-11-111 <リポジトリ名>]$ less log/unicorn.stderr.log