プログラミング学習 10日目
1,AWSでWebアプリケーションの公開
9日目で構築した、EC2とRDSを使い Ruby on Rails のアプリを公開した。
1、利用者(Webページ閲覧者)からのHTTPリクエストを、Nginxが受け取る
2、Nginxを介し、Pumaがアプリケーション(今回はRails)を動作させる
3、モデルなど、データベースへのアクセスが必要な場合、RDSへアクセスする
4、アプリケーションは、PumaやNginxを通して、利用者へウェブページを返す
という流れで動いているよだ。
復習をかねて、公開するまでををまとめてみる。
1:Railsのアプリケーションに本番環境でのデータベース言語(今回の場合は MySQL )を使えるように設定。
環境によってデータベースへの接続の内容が変わるため、環境変数(”dotenv-rails”)を使い本番と開発で切り替わるようにする。
2:.envファイルをアプリケーションディレクトリの直下に作成し、内容を記述する。
記述した内容を読み込むように、config/database.yml へ接続するための設定を記述する。(この記述内容のなかに、.envファイルで設定した環境変数をしようする。
3:Pumaの設定を行う。(WebサーバーはNginx、アプリケーションサーバーは、Pumaを使用しています。)config/puma.rb に本番環境の場合に(if Rails.env.production?)どのように起動するか記述を追加する。
4:EC2 にSSHで接続する。Nginx が起動しているか確認する。(EC2の構築の際に自動起動設定済み)RDSに接続し、今回アップロードするアプリケーションの名前のデータベースを作成する。(.envファイルで、DB_DATABASE="アプリケーション名" と記述しているため。こっちのほうがわかりやすい気がする。)
5:Ruby、Rails、それらを管理するrbenv、Bundler、Railsの起動に必要らしいNode.jsをインストール。
6:アプリケーションをデプロイする。(ウェブサーバへアプリケーションファイルをアップロードすることをデプロイというらしい。)ローカル環境からでも可能だが、Githubにプッシュされているファイルを利用する。
EC2のホームディレクトリ(〜)で、クローンを実行する。
7:Githubのファイルにはmaster.keyがないため、開発環境からEC2はアップロードする。
一緒に、.envファイルもアップロードする。
8:アプリケーションディレクトリでコマンドを実行する。
# ターミナル
$ bundle install --path vendor/bundle --without test development
$ bundle exec rails assets:precompile RAILS_ENV=production
$ bundle exec rails db:migrate RAILS_ENV=production
EC2 のRailsでGemの読み込みや、本番環境でのマイグレート、プリコンパイルを行なっているっぽい。
9:Nginxの設定ファイル2つ(/etc/nginx/nginx.confと、/etc/nginx/conf.d/アプリケーション名.conf)を編集、作成する。(後者が作成)
/var/lib/nginxの権限がないので chown コマンドで権限を変更する。
10:ウェブサーバー(Nginx)を再起動を実施する。
# ターミナル
$ sudo service nginx restart
11:アプリケーションサーバー(Puma)を起動し、EIPでブラウザからの接続を確認する。
# ターミナル
$ rails s -e production
この流れでデプロイが完了した。
初耳の言葉が多いので、とりあえずは流れをおおまかに把握してから理解できていない言葉を調べて補足していきたい。