AWS EC2インスタンスでrailsを動かす
1まずクローンするディレクトリと作る
2次にgithubでclone or download押してリポジトリのurlをコピーしとく
3クローンする
ec2-user@ip-172-31-23-189 ~]$ cd /var/www/ [ec2-user@ip-172-31-23-189 www]$ git clone https://github.com/<ユーザー名>/<リポジトリ名>.git
EC2の能力拡張
無料枠で何もしないとパワー不足でエラーになる可能性がある。
容量を超えると普通エラーで処理が止まる。
swap領域があればメモリが足りなくなりそうな時に一時的にメモリの容量を増やせる。
デフォルトではswap領域は用意してないので以下の手順で用意する
#ホームディレクトリに移動 [ec2-user@ip-172-31-25-189 ~]$ cd
#処理に時間がかかる可能性があるコマンドです [ec2-user@ip-172-31-25-189 ~]$ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512 # しばらく待って、以下のように表示されれば成功 512+0 レコード入力 512+0 レコード出力 536870912 バイト (537 MB) コピーされました、 7.35077 秒、 73.0 MB/秒
[ec2-user@ip-172-31-25-189 ~]$ sudo chmod 600 /swapfile1
[ec2-user@ip-172-31-25-189 ~]$ sudo mkswap /swapfile1 # 以下のように表示されれば成功 スワップ空間バージョン1を設定します、サイズ = 524284 KiB ラベルはありません, UUID=74a961ba-7a33-4c18-b1cd-9779bcda8ab1
[ec2-user@ip-172-31-25-189 ~]$ sudo swapon /swapfile1
[ec2-user@ip-172-31-25-189 ~]$ sudo sh -c 'echo "/swapfile1 none swap sw 0 0" >> /etc/fstab'
最初のコマンドはここ読む
https://www.atmarkit.co.jp/ait/articles/1711/30/news027.html
UUIDは重複する可能性がほぼないさくっと作れるID
最後のコマンドはこことか読む。まぁ正確にはまだよくわかってないが
https://qiita.com/ukinau/items/410f56b6d777ad1e4e90
bundlerのインストール
環境変数設定
参考記事
https://techtechmedia.com/environment-variable-aws/
とりあえずconfig/のsecrets.ymlとdatabase.ymlでまとめとく。credentials.ymlはまた今度まとめる
データベースのパスワードなどのgithubにアップできない物は環境変数を利用する
ざっくり環境変数
https://qiita.com/yuichir43705457/items/7cfcae6546876086b849
RailsからはENV['環境変数名']という記述で利用できる。
・ポイントとしては環境変数と一口に言うが、一つのOSはいくつも環境変数を持ってるもんであるってこと。DATABASE_PASSWORDやSECRET_KEY_BASEという名前の環境変数を自分で作って、値にデーターベースのパスワードやsecret_key_baseをいれるということ
・secret_key_baseとはCookieの暗号化に用いられる文字列でralilsアプリケーションを動作させる際には必ず用意する必要があるもの。また外部に漏らしてはいけない値であるため、環境変数から参照する、ということ。
実際の設定方法
EC2サーバーのsecret_key_baseをまず作る
[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ rake secret 69619d9a75b78f2e1c87ec5e07541b42f23efeb6a54e97da3723de06fe74af29d5718adff77d2b04b2805d3a1e143fa61baacfbf4ca2c6fcc608cff8d5a28e8d
EC2サーバーの環境変数を設定する。最初は何も書いてないはず。
[ec2-user@ip-172-31-23-189 ~]$ sudo vim /etc/environment
ファイルの保存場所は/etc/environmentだと覚えといた方がいい。それをvimエディタで開いて中にさっきの値を書く
/etc/environment
DATABASE_PASSWORD='MySQLのrootユーザーのパスワード' SECRET_KEY_BASE='先程コピーしたsecret_key_base'
設定したら反映するために:wqで保存して一旦ログアウトする
[ec2-user@ip-172-31-23-189 ~]$ exit
logout
Connection to 52.xx.xx.xx closed.
|
exitするとローカル環境になるので再度SSH接続し直す
envコマンドとgrepコマンドを合わせてちゃんと設定されてるか確認
ポートを開放する
セキュリティグループのリンクを踏み設定画面にとび、インバウンドタブの編集からルールの追加で開放する。今回は
タイプ「カスタムTCPルール」
ポート範囲「3000」
送信元「カスタム」「0.0.0.0/0」
にする
デフォルトのSSHとこないだ開いたHTTPと違うのはタイプがカスタムTCPなことくらいか。タイプがカスタムTCPなことは覚えておいた方がいいだろう。
Railsを起動する
起動の前に、本番環境のmysqlの設定に合わせるために、ローカルのdatabase.ymlを編集する必要がある。
config/database.yml
gitのmasterに上の変更を反映したらEC2サーバ側でpullする
[ec2-user@ip-172-31-23-189 <リポジトリ名>] git pull origin master
|
ec2-user@ip-172-31-23-189 <リポジトリ名>]$ rails db:create RAILS_ENV=production Created database '<データベース名>' [ec2-user@ip-172-31-23-189 <リポジトリ名>]$ rails db:migrate RAILS_ENV=production
もしここでMysql2::Error: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'
というエラーが起こった場合、mysqlが起動していない可能性があります。sudo service mysqld start
というコマンドをターミナルから打ち込み、mysqlの起動を試してみましょう。
自分からしたらリモートやけど、当のEC2サーバーもmysqlにとっちゃlocalだから上みたいなエラー文なんやろうな。何かこういうエラー見たことある気がするけど、localって入ってたら間違えそうだから注意やな。
最後にrailsを起動させてみる
[ec2-user@ip-172-31-23-189 <リポジトリ名>]$ bundle exec unicorn_rails -c config/unicorn.rb -E production -D
-c config/unicorn.rbで設定ファイルの指定
-E production は「本番モードとして動作させる」
-D はプログラムを起動させつつターミナルで別のコマンドを打てるようにするオプション
補足
当然起動させる時はアプリのあるリポジトリに移動して行う。今回で言えば
cd /var/www/[リポジトリ]で移動しておく
エラーがでたら
less log/unicorn.stderr.logなどでログを確認する
(エラーログをここに書き出す設定は前の部分でやってたと思う)
envコマンド
「env」は、環境変数の値を設定しつつ、同時に指定したコマンドを実行するコマンドです。https://www.atmarkit.co.jp/ait/articles/1801/18/news016.html