個人アプリ開発 AWSデプロイ
- 作業内容
作業内容
既にTECH CAMPのカリキュラムでASWのアカウントを作成し、アプリのデプロイをしていました。
今回は復習も兼ねて、一つ一つの手順を自分なりにまとめながら、新たにアカウントを作成しデプロイを行いました。
1.AWSアカウント作成
新しいメールアドレスで新規アカウントを作成。
2.EC2 サーバのセットアップ
EC2:
時間単位で利用できるサーバ。設定によりターミナルを介して遠隔操作できる。
リージョンの設定
AWSの物理的なサーバの場所を指定する。
リージョンは世界各地に10箇所以上存在。
リージョン間でEC2の設定は独立していて、あるリージョンのEC2を他のリージョンへ移動することはできない為、EC2を立ち上げる際には、「どのリージョンの設定か」を意識するようにする。
AMIの選択
AMI:
「Amazon Machine Image」の略語で、サーバのデータをまるごと保存したデータのこと。この中には、OSやWEBサーバなどが事前にインストールされているものもあり、自分でゼロからインストールする手間を削減することができる。
→今回は「 Amazon Linux AMI 」AWSが独自にカスタマイズしたAMIを利用。
Elastic IPの作成と紐付け
作成したEC2インスタンスには、作成時にIPアドレス(パブリックIP)が自動で割り振られている。
しかし、サーバーを再起動させるたびにこのパブリックIPが変わってしまうという欠点がある。
Elastic IP:
AWSから割り振られた固定のパブリックIPアドレス。
これをEC2インスタンスに紐付けることで、インスタンスの起動、停止に関わらず常に同じIPアドレスで通信をすることが可能になる。
ポートを開く
立ち上げたばかりのEC2インスタンスはSSHでアクセスすることはできるが、HTTPなどの他の接続は一切つながらないようになっている。そのため、WEBサーバとして利用するEC2インスタンスは事前にHTTPがつながるように「ポート」を開放する必要がある。
セキュリティグループの変更
セキュリティグループ:
EC2インスタンスが属するまとまりのようなもので、複数のEC2インスタンスのネットワーク設定を一括で行うためのもの。
アクセス制限(ルール)の追加
→タイプを「HTTP」、プロトコルを「TCP」、ポート範囲を「80」、送信元を「カスタム / 0.0.0.0/0, ::/0」に設定
EC2インスタンスへのログイン
ec2-userでログイン
ec2-user:
EC2インスタンスを作成時に生成され、一緒に生成されるSSH秘密鍵と対応したユーザー。本来はこのec2-userではなく、サービスを稼働させるためにより権限を小さくしたユーザーを作成して運用していくが、今回は簡易化の為こちらを使用し進めていきました。
$ cd ~ $ mkdir ~/.ssh # .sshというディレクトリを作成 # File existsとエラーが表示された場合、.sshディレクトリは存在しているということ $ mv Downloads/ダウンロードした鍵の名前.pem .ssh/ # mvコマンドで、ダウンロードしたpemファイルを、ダウンロードディレクトリから、.sshディレクトリに移動します。 $ cd .ssh/ $ ls # pemファイルが存在するか確認 $ chmod 600 ダウンロードした鍵の名前.pem $ ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP #(ダウンロードした鍵を用いて、ec2-userとしてログイン)
3.EC2のRuby/Rails環境構築
設定用のツールをインストール
yumコマンド:
Linuxにおけるソフトウェア管理の仕組み。MacOSにとってのhomebrewと同じ役割を果たす。
パッケージをアップデート
$ sudo yum -y update
その他環境構築に必要なパッケージを諸々インストール
$ sudo yum -y install git make gcc-c++ patch libyaml-devel libffi-devel libicu-devel zlib-devel readline-devel libxml2-devel libxslt-devel ImageMagick ImageMagick-devel openssl-devel libcurl libcurl-devel curl
- yコマンド:
オプションで-yを設定する事で全ての問いにYesで自動的に答えるように設定してインストールするコマンド
Node.jsをインストール
Node.js;
サーバーサイドで動くJavaScriptのパッケージです。今後のデプロイに向けた作業の中で、CSSや画像を圧縮する際に活用される。
$ sudo curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash - $ sudo yum -y install nodejs
rbenvとruby-buildをインストール
rbenvとruby-build:
Rubyのバージョンを管理する際に組み合わせて使うツール
#rbenvのインストール $ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv #パスを通す $ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile #rbenvを呼び出すための記述 $ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile #.bash_profileの読み込み $ source .bash_profile #ruby-buildのインストール $ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build #rehashを行う $ rbenv rehash
4.MySQLの設定と動作確認
MySQL:
Oracle社が開発・提供をしているRDBMS
扱いのシンプルさと処理の速度を考慮し使用しました。
MySQLを起動
$ sudo service mysqld start
service コマンド:
Amazon LinuxやCentOSに含まれているもので、インストールしたソフトウェアの起動を一括して行えるツール
mysqld:
「d」はLinuxの用語で「サーバ」を意味する「デーモン(daemon)」の頭文字
$ sudo service mysqld status
起動できたか確認
MySQLのrootパスワードの設定
sudo /usr/libexec/mysql56/mysqladmin -u root password 'ここを設定したいパスワードに変更してからコマンドを実行'
yum でインストールしたMySQLには、デフォルトで root というユーザーでアクセス出来るようになっているが、パスワードは設定されていない
MySQLへの接続確認
$ mysql -u root -p
6.アプリケーションサーバの設定
Unicorn:
アプリケーションサーバ。ローカル環境のpumaにあたる。
ローカルでGemfile を編集
[Gemfile] group :production do gem 'unicorn', '5.4.1' end
$ bundle install
config/unicorn.rbを作成・編集
→変更修正をコミットしてプッシュ(masterブランチ)
7.本番環境での設定
EC2の能力を拡張
現状動かしているEC2のインスタンスではコンピューターの能力が足りず、Gemのインストール時などにエラーが発生する可能性がある(コンピューターの処理能力に関係するメモリというものが足りない)。
#ホームディレクトリに移動 $ cd $ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512 $ sudo chmod 600 /swapfile1 $ sudo mkswap /swapfile1 $ sudo sh -c 'echo "/swapfile1 none swap sw 0 0" >> /etc/fstab'
これで、Swap領域を確保することができました。
gemをインストール
クローンしたアプリケーションを起動するために必要なgemを以下のコマンドでインストール
1. クローンしたディレクトリに移動し、 rbenvでインストールされたRubyが使われているかチェック
2.本番環境でgemを管理するためのbundlerをインストールして、bundle installを実行
開発環境(ローカル)で開発してきたアプリで、どのバージョンのbundlerが使われていたのか確認
→同じバージョンのものをEC2サーバ側にも導入
環境変数の設定
環境変数:
データベースのパスワードなどセキュリティのためにGithubにアップロードすることができない情報は、環境変数を利用して設定
Railsからは ENV['<環境変数名>'] という記述でその値を利用することができる
secret_key_base:
Cookieの暗号化に用いられる文字列。Railsアプリケーションを動作させる際は必ず用意する必要がある。また、外部に漏らしてはいけない値であるため、こちらも環境変数から参照する。
1. secret_key_baseを作成
2.環境変数を設定
3. 設定した環境変数を反映させるために、一度本番環境をログアウト
4. もう一度本番環境へログイン
5. 設定した環境変数が本当に適用されているか確認
ポートを解放
セキュリティグループのポートを設定
→起動したRailsにアクセスできるようになる