デプロイ2回目だけど、初回の時やること。(デプロイ前のファイル編集)[1]
クラウドコースで、2回目のデプロイしました。
1回目よりもスムーズにできたから、無駄ではなかったんだどちょっとだけ、
本当にちょっとだけ安心しました。
流れはなんとなくわかったんだけど、まだ脳死する瞬間があるので、復習します。
- VPC(仮想ネットワーク)ができて、サブネットやEC2も出来ている。
- RDSも新しいVPCに引っ越し済み。
初回デプロイの場合
Gemfileを設定する
クラウド9で開発を行っている間は、データベースには、SQLite
(開発環境用)を利用していた。
本番環境を想定して、MySQL
(本番環境用)を利用する。
:
:
gem 'dotenv-rails'
group :production do
gem 'mysql2'
end
-
MySQL
を利用するために必要なgemを追加する。 -
dotenv-rails
は、プロジェクトごとにファイルベースで環境変数を管理することができる。
gem 'puma', '~> 3.11'
- Gemfileに記載されている、pumaのバージョンも変更する。(~>3.11に変更している。)
:
:
gem "net-smtp"
gem "net-pop"
gem "net-imap"
- 最終行に追加する。
$ bundle install --without production
--without production
をつけ忘れてしまってインストールしても、問題はない。が、パフォーマンスが落ちたり、依存関係が複雑になる。
production(本番環境)
実際のユーザーがアクセスする、アプリケーションの環境。
development(開発環境)
アプリケーションの開発とテストを行うための環境。
- [DEPRECATED]が出力されても、エラーではないので進んで良い。
データベースへの接続設定修正
RDS
で構築したMySQL
へEC2から接続するための設定を行う。
- アプリケーション直下に
.env
ファイルを作成する。 - 作成した
.env
ファイルに記述。
DB_USERNAME="RDSの接続ユーザ名"(この時は、root)
DB_PASSWORD="RDSのパスワード"
DB_HOST="RDSのエンドポイント名"
DB_DATABASE="データベース名"(DB名)MySQLの設定タグから確認できる。
-
.gitignore
ファイルがアプリケーション直下にあるため、追記する。
/.env
これをすることで、.envファイルに記載したデータベースの情報がGit管理されなくなり、Githubに上がることもない。
- config/database.ymlに、データベース(MySQL)へ接続するための設定をする。
production(本番環境):セクションの記述を編集する。
設定情報の一部には、さっきの.envファイル
で設定した環境変数を使用する。
production:
<<: *default
database: <%= ENV['DB_DATABASE'] %>
adapter: mysql2
encoding: utf8mb4
charset: utf8mb4
collation: utf8mb4_general_ci
host: <%= ENV['DB_HOST'] %>
username: <%= ENV['DB_USERNAME'] %>
password: "<%= ENV['DB_PASSWORD'] %>"
['DB_DATABASE']['DB_HOST']'DB_USERNAME']['DB_PASSWORD']
を書き換える。
ウェブサーバー/アプリケーションサーバーを設定する
EC2(仮想サーバーサービス)で
Railsアプリケーションを動作させるには、"ウェブサーバー"と"アプリケーションサーバー"を起動させる必要がある。
今回やった方法として、
ウェブサーバー = Nginx
アプリケーションサーバーとして = Puma
を利用する。
Puma(アプリケーションサーバー)の設定ファイルを修正
- この作業は、Cloud9上で行う。
最終行に追加する。
bind "unix://#{Rails.root}/tmp/sockets/puma.sock"
rails_root = Dir.pwd
# 本番環境のみデーモン起動
if Rails.env.production?
pidfile File.join(rails_root, 'tmp', 'pids', 'puma.pid')
state_path File.join(rails_root, 'tmp', 'pids', 'puma.state')
stdout_redirect(
File.join(rails_root, 'log', 'puma.log'),
File.join(rails_root, 'log', 'puma-error.log'),
true
)
# デーモン
daemonize
end
デーモンとは
デーモン(Daemon)は、アプリケーションを起動するときに、
バックグラウンドでアプリケーションサーバーを常時起動させておくために設定
する。
開発環境で、rails s
で起動する場合、Ctrl+C
を行わないと、ターミナルで作業できなくなる。
エラーログを見る場合に、いちいちアプリケーションを停止させていたら運用できなくなってしまう為、起動のコマンドが入力された時、アプリケーションサーバーがデーモンとしてバックグラウンドで常時起動するように設定している。
Githubへpushする
☑️ Gemfileに、dotenv-rails
、mysql2
の追記
☑️ bundle install --without production
☑️ .env
ファイル作成。追記。
☑️ githubに上がらないようにする為に、.gitignore
に/.env
追記。(コメント書かない。)
☑️ database.yml
に追記。
☑️ pumaの設定ファイル編集
確認できたら、GitHubにpushする。
$ git add Gemfile Gemfile.lock config/puma.rb config/database.yml .gitignore
$ git commit -m 'deploy setting'
$ git push origin main
ここまでが初めてのアプリケーションをデプロイするときの初回にやること。
一回デプロイしたものを、違うVPCでやる場合は、ファイル編集はできてるので変更なければ、この回はやらなくていい。
Discussion