🦦

デプロイ2回目だけど、初回の時やること。(デプロイ前のファイル編集)[1]

2024/08/12に公開

クラウドコースで、2回目のデプロイしました。
1回目よりもスムーズにできたから、無駄ではなかったんだどちょっとだけ、
本当にちょっとだけ安心しました。
流れはなんとなくわかったんだけど、まだ脳死する瞬間があるので、復習します。

  • VPC(仮想ネットワーク)ができて、サブネットやEC2も出来ている。
  • RDSも新しいVPCに引っ越し済み。

初回デプロイの場合

Gemfileを設定する

クラウド9で開発を行っている間は、データベースには、SQLite(開発環境用)を利用していた。
本番環境を想定して、MySQL(本番環境用)を利用する。

Gemfile
:
:
gem 'dotenv-rails'
group :production do
  gem 'mysql2'
end
  • MySQLを利用するために必要なgemを追加する。
  • dotenv-railsは、プロジェクトごとにファイルベースで環境変数を管理することができる。
Gemfile
gem 'puma', '~> 3.11'
  • Gemfileに記載されている、pumaのバージョンも変更する。(~>3.11に変更している。)
Gemfile
:
:
gem "net-smtp"
gem "net-pop"
gem "net-imap"
  • 最終行に追加する。
$ bundle install --without production

--without productionをつけ忘れてしまってインストールしても、問題はない。が、パフォーマンスが落ちたり、依存関係が複雑になる。

production(本番環境)

実際のユーザーがアクセスする、アプリケーションの環境。

development(開発環境)

アプリケーションの開発とテストを行うための環境。

  • [DEPRECATED]が出力されても、エラーではないので進んで良い。

データベースへの接続設定修正

RDSで構築したMySQLEC2から接続するための設定を行う。

  1. アプリケーション直下に.envファイルを作成する。
  2. 作成した.envファイルに記述。
.env
DB_USERNAME="RDSの接続ユーザ名"(この時は、root)
DB_PASSWORD="RDSのパスワード"
DB_HOST="RDSのエンドポイント名"
DB_DATABASE="データベース名"(DB名)MySQLの設定タグから確認できる。
  1. .gitignoreファイルがアプリケーション直下にあるため、追記する。
gitignore
/.env

これをすることで、.envファイルに記載したデータベースの情報がGit管理されなくなり、Githubに上がることもない。

  1. config/database.ymlに、データベース(MySQL)へ接続するための設定をする。
    production(本番環境):セクションの記述を編集する。
    設定情報の一部には、さっきの.envファイルで設定した環境変数を使用する。
config/database.yml
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上で行う。
    最終行に追加する。
config/puma.rb
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-railsmysql2の追記
☑️ 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