大学生がプログラマーを目指すはなし

ruby, python, AIの話が多いです

rails5, puma, nginx, debianを使ってデプロイ!最初から最後まで!

何度やっても忘れるので今度こそ最初から最後まで備忘録を書きます。

デプロイまとめ

ローカルで本番環境に流す

1-1. 今回のアプリケーションに必要になる本番環境でのDBと、ユーザー名とパスワードを設定する。

mysql> CREATE USER 'railsuser'@'localhost' IDENTIFIED BY 'mypassword';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'railsuser'@'localhost';

 以上でユーザ作成は完了です。

ちなみに上記の場合は全てのデータベースとテーブルに対する全権限をrailsuserに付与していますが、特定のデータベースや処理を限定して権限を付与することも可能です。

1-2. データベース設定ファイル修正

今回は本番環境のMySQLRails用のMySQLユーザとしてユーザ名がrailsuser、パスワードがmypasswordであるユーザを作成したのでこの情報をconfig/database.ymlに記述します。

1-3. 開発, テスト, 本番環境のデータベース、テーブル、seed-fuを作成

続いて開発, テスト, 本番環境のデータベース、テーブルを作成します。

$ rake db:create #開発, テストのデータベース作成

$ rake db:create RAILS_ENV=production password=mypassword #本番環境のデータベース作成

上記コマンドを実行により、

  • development環境用にRails_developmentという名前のデータベース
  • test環境用にRails_testという名前のデータベース
  • production環境用にRails_productionという名前のデータベース

がそれぞれ作成されます。

ここでproduction環境のコマンド実行時に1-1で設定したmypasswordをオプションとして付け加えること。

そうしないとエラーが発生する。

$ rake db:migrate

$ rake db:migrate RAILS_ENV=production password=mypassword

$ rake db:seed_fu RAILS_ENV=production password=mypassword

上記コマンドでマイグレイト, seedファイルの挿入。

1-4. assetファイルのコンパイル

コンソールで以下のコマンドを叩いてapp/assets以下のファイルをコンパイルします。

$ RAILS_ENV=production rake assets:precompile assets:clean

assets:cleanも一緒に入れておくと古いファイルも消しておいてくれて便利。

そして、動的にコンパイルできるようにセッティングします。

Rails.root/config/environments/production.rbを少し編集します。

config.assets.compile = true

上記に編集します。

こうすることにより、

サーバがリクエストを受け取った際、コンパイル済みのファイルが見つからない場合にその場でコンパイルを行う設定が可能です。
これならリポジトリへの登録は不要です。しかし動的コンパイルなので初回リクエスト時にはレスポンスが犠牲になります。
それが嫌なら、capistranoを使いましょう。

 

ここまでできたら確認しましょう。

$ rails server -e production

これで無事に繋がれば第一段階は完了です。

2. nginxpumaでデプロイする。

2-1. nginxの設定

upstream rails_name {

  server unix:/Users/user-name/workspace/projects/rails_name/tmp/sockets/puma.sock;

}

server {

    listen  80;

    server_name  localhost;

    root  /Users/user-name/workspace/projects/rails_name

      location / {

         proxy_set_header Host $host;

         proxy_pass http://rails_name;

      }

      error_page   500 502 503 504  /50x.html;

      location = /50x.html {

         root   html;

      }

}

2-2. pumaの設定

rails-root/config/puma.rb このファイルに

bind "unix://#{Rails.root}/tmp/sockets/puma.sock"

これを足すだけだ

ここまでできたら確認しましょう。

$ sudo nginx

$ rails server -e production

これでnginxで設定したポートで開ければここまでは完了です。

. debianにデータを移す

3-1. railsアプリをdebianにコピーします。

$ scp -i ~/.ssh/client_rsa -r -P ポート番号 /Users/user-name/workspace/projects/rails_name リモートユーザー名@ipアドレス:/home/リモートユーザー名/workspace

これでデビアンにローカルファイルが全てコピーされました。

4. 本番環境の更新をする。

4-1. gitでバージョンを合わせる。

$ git pull origin master

4-2. databaseを作成して、シードファイルを流す
$ rake db:drop db:create db:migrate db:seed_fu
4-3. プリコンパイル
RAILS_ENV=production rake assets:precompile assets:clean
4-4. サーバー起動
$ rails server -e

 これで完成!

ドメインを確認してください。