はじめに
は本番環境であるEC2上にアプリケーションを動かす環境を構築済みと仮定します。
RailsアプリケーションをEC2上に配置していきます。
また、動作させるためのアプリケーションの準備を行います。
開発環境であるCloud9環境と、デプロイを行うEC2の環境と2つの環境を使用します
Railsアプリケーションをデプロイする
GitHubからアプリケーションを取得する
Cloud9から秘密鍵をEC2サーバーに送る
Cloud9で行います。
EC2サーバーでgit cloneを行う時にsshでcloneするために、Cloud9環境に存在する秘密鍵を転送します。
IPアドレスの部分にはEC2サーバーのパブリックIPを指定します。
ec2-user:~/environment $ scp -i ~/.ssh/practice-aws.pem ~/.ssh/id_rsa ec2-user@IPアドレス:.ssh/id_rsa
GitHubからアプリケーションを取得する
EC2で行います。
GitHubからアプリケーションを取得するには、ec2-userのホームディレクトリ /home/ec2-user/ で行います。
以下のコマンドを入力して、GitHubからソースコードをcloneします。
もし、ホームディレクトリから移動していた場合は、clone前にホームディレクトリに移動してから行います。
p-xx-xx-xx-xxの部分はパブリック IP アドレスです
[ec2-user@ip-xx-xx-xx-xx ~]$ cd
[ec2-user@ip-xx-xx-xx-xx ~]$ git clone GitHubのリポジトリのURL
cd
このコマンドはユーザーをホームディレクトリ(通常は /home/ec2-user)に移動させます。cd コマンドは、引数なしで使用されると、デフォルトでユーザーのホームディレクトリに移動します。
git clone GitHubのリポジトリのURL
このコマンドは、指定されたGitHubリポジトリのURLからリポジトリのコピーをローカルマシンにクローン(コピー)します。この操作により、GitHubリポジトリの内容が現在のディレクトリ(この場合はユーザーのホームディレクトリ)に新しいディレクトリとしてダウンロードされます。新しいディレクトリの名前は、リポジトリの名前に基づいています。
簡単に言うと、まずユーザーのホームディレクトリに移動し、次にGitHubのリポジトリをそのホームディレクトリにクローンしています。
master.keyをアップロードする
Cloud9で行います。
EC2へファイルをアップロードするには、scpコマンドを使います。scpコマンドを実行する場合、Cloud9から必ず、実行してください。
これは、scpでEC2サーバー接続に必要なキーペア(xxx.pem)が、Cloud9上にあるためです。
Cloud9上でアプリケーションのルートディレクトリに移動し、以下のコマンドを実行してください。「IPアドレス」の部分には、IPv4パブリック IPが入ります。
リポジトリ名は先頭大文字で入力する
例 SampleApp
username:~/environment/アプリケーション名 $ scp -i ~/.ssh/practice-aws.pem config/master.key ec2-user@IPアドレス:GitHubのリポジトリ名/config
このコマンドは、scp(secure copy)を使用して、一つのマシンから別のマシンにファイルを安全にコピーするためのものです。具体的な動作は以下の通りです:
scp
Secure Copyの略で、SSHを利用してネットワーク経由でのファイルコピーを行うコマンドです。
-i ~/.ssh/practice-aws.pem
SSH接続時に使用する秘密鍵のパスを指定します。この秘密鍵は、通常AWSのEC2インスタンスに接続する際に必要です。
config/master.key
ローカルマシン(開発環境)のconfigディレクトリ内にあるmaster.keyファイルを指定しています。このファイルをリモートマシンにコピーします。
ec2-user@IPアドレス:GitHubのリポジトリ名/config
ファイルをコピーする先のリモートマシンのアドレスとパスを指定しています。
:ec2-user@IPアドレス:リモートマシンのユーザー名とIPアドレス
GitHubのリポジトリ名/config:リモートマシン上のディレクトリのパス。master.keyファイルがこのパスにコピーされます。
要約すると、このコマンドは開発環境のマシンからAWSのEC2インスタンス(本番環境)にmaster.keyファイルをコピーしています。このmaster.keyは、Railsアプリケーションの暗号化されたクレデンシャルを復号するための鍵として使用されるものです
.envをアップロードする
Cloud9で行います。
.envファイルも.gitignoreに追記してGit管理下から外すようにしています。そのためEC2上にcloneしてきたアプリケーションには存在しません。
しかし、.envが存在しないとdatabase.ymlに記載している環境変数が空になってしまいデータベースとの接続ができません。
そのためGitHubを通さずに直接、EC2にアップロードします。
Cloud9上でアプリケーションのルートディレクトリで実行する。
こちらも先頭大文字で入力
username:~/environment/アプリケーション名 $ scp -i ~/.ssh/practice-aws.pem .env ec2-user@IPアドレス:GitHubのリポジトリ名/
こちらも同様にEC2上のアプリケーションに.envがコピーされました。
master.key,.envがアップロードできているかの確認方法
sshでEC2(本番環境)にログイン
ssh -i ~/.ssh/practice-aws.pem ec2-user@xx-xx-xx
master.key確認
cdコマンドでアプリに移動してからconfigに移動
cd config
ec2-user@ip-パブリックid config]$ ls -a
. .. database.yml master.key puma.rb
master.keyがあればOK!
.env確認
cdコマンドでアプリケーション(先頭大文字で)へ移動
cd アプリケーション名
[ec2-user@ip-パブリックid アプリケーション名]$ ls -a
. .. .bundle config .env Gemfile Gemfile.lock .git .gitignore README.md vendor
.envがあればOK!
サーバー起動前の準備を行う
以下のコマンドを順番に実行する
ec2-user@ip-xx-xx-xx-xx ~]$ cd GitHubのリポジトリ名
[ec2-user@ip-xx-xx-xx-xx GitHubのリポジトリ名]$ bundle install --path vendor/bundle --without test development
[ec2-user@ip-xx-xx-xx-xx GitHubのリポジトリ名]$ bundle exec rails assets:precompile RAILS_ENV=production
[ec2-user@ip-xx-xx-xx-xx GitHubのリポジトリ名]$ bundle exec rails db:create RAILS_ENV=production
[ec2-user@ip-xx-xx-xx-xx GitHubのリポジトリ名]$ bundle exec rails db:migrate RAILS_ENV=production
こちらのコマンド群は、Ruby on Railsのアプリケーションを本番環境(production)で動作させるための準備作業を行っています。
bundle install --path vendor/bundle --without test development
必要なgem(ライブラリやツール)をインストールします。
--path vendor/bundle はgemをvendor/bundleディレクトリにインストールすることを指定します。
--without test development はテストや開発環境に関連するgemをインストールしないようにするためのオプションです。
bundle exec rails assets:precompile RAILS_ENV=production
アセット(JavaScript、CSS、画像など)をコンパイルして、本番環境で高速に動作するようにします。
RAILS_ENV=production はこのコマンドを本番環境用に実行することを指定しています。
bundle exec rails db:create RAILS_ENV=production
本番環境用のデータベースを作成します。
bundle exec rails db:migrate RAILS_ENV=production
データベースのマイグレーションを実行して、テーブルやカラムを作成・更新します。
要約すると、これらのコマンドはRailsのアプリケーションを本番環境で動作させるための設定や準備をしています。