いわりょのBlog

IT関連で学んだことを書いていきます。

自作railsアプリをデプロイする 番外編 Route 53でドメインを設定する

ryo10leo.hatenablog.com

上の記事を通して、以下のようなインフラを作成しました。↓

f:id:Ryo10Leo:20200113011243p:plain

EC2の中身はこんな感じです。↓

f:id:Ryo10Leo:20200115230205p:plain

ここまでの設定ですと、IPアドレスを入力することでしかアプリを表示することができません。

なので今回は「Route53」を使って、独自のドメインでWebサーバーに接続し、アプリを表示することができるようにしていきます。

Route 53を軽く理解する

Route 53とは?

AWSDNSサービス。ネームサーバの役割を果たします。

ん?DNS

ドメインネームサーバ」の略。ドメイン名をIPアドレスに変換するインターネット上の「電話帳」のようなの役割。

特徴は?

信頼性
冗長化されたロケーション
・ SLA100%!!
・フルマネージドサービス

コスト
・ 非常に安価(約500円程度/月)
・ 使った分だけの課金

速度
・高速
 エッジロケーションの中で最も近いロケーションから応答を返す。

ルーティングポリシー
シンプル ←今回使います。
・加重
レイテンシー
・位置情報
・フェイルオーバー

作成するものを図で理解する

全体的な設置図としてはこのような感じです。↓

f:id:Ryo10Leo:20200119232103p:plain

動きとしては以下のような仕組みになります。↓

f:id:Ryo10Leo:20200120212132p:plain

①クライアントからドメインを入力すると、フルリゾルバを介してからRoute 53にそのドメインに紐づくIPアドレスがあるかを問い合わせます。

②もしRoute 53にクライアント側で入力されたドメインが登録されていれば、それに紐づくIPアドレスをクライアントに送り返します。

③クライアントはサイドその取得したIPアドレスを使って、目的のEC2インスタンスに接続することができるのです。

実際にRoute 53を使ってドメインを設定する

前提として、、、

  • お名前.comのドメイン管理画面にログインできること

上記を前提として書いていきます。

ホストゾーンの作成

まずはRoute53のダッシュボードを開いて、「ホストゾーン」を選択して、「ホストゾーンの作成」をクリック。

f:id:Ryo10Leo:20200120214627p:plain

こちらの画面から取得した「ドメイン」を入力します。

タイプは、クライアントから通信できるようにしたいので「パブリックホストゾーン」にします。

作成」を押すとホストゾーンが作成できます。

するとホストゾーンには、「NS」タイプのレコード(ネームサーバー)と「SOA」タイプのレコード(ゾーン)があることが確認できます。

しかしこのままでは、ドメインに紐付いたIPアドレスのレコード(Aレコードといいます)がないため、それを作成する必要があります。

Aレコードを作成する前に、、、

お名前.comで取得したドメインはデフォルトだとお名前.comのネームサーバーに紐付いています。↓

#EC2インスタンスにログインして、取得したドメインのネームサーバーを確認する

$ dig myapp.com NS +short
dns2.onamae.com ←お名前.comのネームサーバー
dns1.onamae.com  ←お名前.comのネームサーバー

このままだと取得したドメインで問い合わせても、Route53ドメインの管理情報(IPアドレスなど)があることにはならず、お名前.comに管理情報があるという設定になっています。

そのためAレコードを作成する前に、お名前.comにログインしてドメイン管理画面で、その設定を変更する必要があります。

お名前.comでドメインの設定

お名前.comにログインして「ドメインの設定」をクリック。

f:id:Ryo10Leo:20200120223914p:plain

ネームサーバーの変更」を選択します。

f:id:Ryo10Leo:20200120224121p:plain

取得したドメインにチェックを入れて、下の方にある「他のネームサーバーを利用」を選択すると以下のような入力画面がでます。↓

f:id:Ryo10Leo:20200120224253p:plain

ここにRoute53で先ほど作成したホストゾーンの「NSレコード」入力することで、設定が完了します。

以下の表示されているNSレコードの情報(ns~から始まるやつ)を全てコピペしましょう。↓

f:id:Ryo10Leo:20200120225100p:plain

できたら「確認画面」を選択して「設定する

これで設定は完了です。

確認もコマンドで一応します。

$ dig myapp.com NS +short
ns-786.awsdns-34.net
ns-1578.awsdns-05.co.uk
ns-1041.awsdns-02.org
ns-306.awsdns-38.com

Aレコードの作成

ようやくAレコードを作成できます。

f:id:Ryo10Leo:20200120220438p:plain

まずは先ほどドメインを登録したホストゾーンを選択して、レコードセットに移動します。

そして「レコードセットの作成」を選択。
画面の右側に以下のように出ます↓

f:id:Ryo10Leo:20200120220642p:plain

今回は「」のところにEC2インスタンスに紐付けた「Elastic IPアドレス」を入力するのみで設定は大丈夫です。

入力できたら「作成」をクリック。

これで全ての設定が完了です。

ブラウザにドメインを入力することで、それに紐づいたWebサーバーに接続することができました!

自作railsアプリをデプロイする 番外編 本番環境の画像投稿 S3を作成する

ryo10leo.hatenablog.com

上の記事を通して、以下のようなインフラを作成しました。↓

f:id:Ryo10Leo:20200113011243p:plain

EC2の中身はこんな感じです。↓

f:id:Ryo10Leo:20200115230205p:plain

今回はRailsアプリケーションから画像を投稿するためのストレージをAWSの「S3」に設定していきます。

S3を軽く理解する

S3とは「Simple Storage Service」の略で、安価で耐久性に優れたクラウドストレージサービスです。

用語

オブジェクト
 S3に保管するファイルのこと。

バケット
 S3上に存在するフォルダのようなもの。

バケットポリシー
 バケットへのアクセス制限等のセキュリティポリシーです。バケット毎に自由に設定することができます。

マルチパートアップロード
 大きいファイルは複数に分割してアップロードできて、アップロード後に統合することができる機能の名称になります。

WEBサイト機能
 WEBサーバとして公開することができます。

バージョニング
 一度削除したものを復元できる機能の名称になります。

ユースケース

①コンテンツ保存&配信
画像等の静的コンテンツの保存先及び配信

②データ保存用のストレージ
ログ保存用やアプリケースションのストレージとして利用

③バックアップ
サーバのバックアップ、DR用にバックアップ

作成するものを図で理解する

f:id:Ryo10Leo:20200118134334p:plain

EC2インスタンス内のRailsアプリから、作成したS3を利用して画像を保存し、インターネットから閲覧できるようにします。

ここでの「インターネットから閲覧」とは、例えば写真をS3に保存して、アプリの投稿コンテンツを表示する際に、HTMLの<img>でS3で保存した写真などをS3からとってくることです。

S3の利用方法、設定

まずバケットを作成します。

名前とリージョン

コンソールからS3を選択して、移動した画面で「バケットを作成」を選択。

f:id:Ryo10Leo:20200118135342p:plain

バケット
任意の名前を設定します。

リージョン
東京

次へ」を選択。

オプションの設定

f:id:Ryo10Leo:20200118135716p:plain

バージョニング
今回はチェックなし。

サーバーアクセスのログ記録
必要であればログ用のバケットを作成しておき、設定します。

下へ続く↓
f:id:Ryo10Leo:20200118140341p:plain
Tags
今回はなし。

オブジェクトレベルのログ記録
より詳細なログを設定できる
今回はチェックなし

デフォルト暗号化
今回はチェックなし

CloudWatch リクエストメトリクス

バケットのリクエストとデータ転送をモニタリングするかの設定。
今回はチェックなし。

次へ」を選択。

アクセス許可の設定

f:id:Ryo10Leo:20200118140912p:plain

今回は保存したオブジェクトを公開したので、「パブリックアクセスをすべてブロック」をオフにします。

次へ」を選択。

設定が合っていれば「バケットを作成

S3を操作するユーザーを作成

ユーザーの詳細設定、AWS アクセスの種類を選択

コンソールから「IAM」を選択。

ダッシュボードの「ユーザー」から「ユーザーを追加」を選択。

f:id:Ryo10Leo:20200118141415p:plain

ユーザー名」を入力

プログラムによるアクセス」にチェック。

次のステップ」を選択。

アクセス許可の設定

f:id:Ryo10Leo:20200118141738p:plain

既存のポリシーを直接アタッチ」を選択。

ポリシー名」から「AmazonS3FullAccess」にチェック。

次のステップ」を選択。

次の画面のタグは特に設定していません。

確認画面で設定の確認。

ユーザーを作成」をクリック。

f:id:Ryo10Leo:20200118143105p:plain

作成したユーザーに設定される「アクセスキーID」や「シークレットアクセスキー」が必要なので、「csvのダウンロード」でそれらを取得しておき保管しておく。

これでAWS側の設定は完了です。

Rails側の設定

今回は画像投稿にCarrierwaveを使用している場合の設定を行っていきます。こちらの設定に関しては今回詳細には書きません。

railsでcarrierwaveを使って画像をアップロード、表示 - Qiita

必要なgemは以下の通り

gem 'carrierwave'
gem 'fog'

uploaderファイルのstorageの部分を編集します

app/uploaders/image_uploader.rb
・
・
  storage :fog
・
・

設定ファイルのcarrier_wave.rbに以下を追記していきます。

config/carrier_wave.rb

if Rails.env.production?
    CarrierWave.configure do |config|
      config.fog_credentials = {
        # Amazon S3用の設定
        :provider              => 'AWS',
        :region                => ENV['S3_REGION'],   
        :aws_access_key_id     => ENV['S3_ACCESS_KEY'],
        :aws_secret_access_key => ENV['S3_SECRET_KEY']
      }
      config.fog_directory     =  ENV['S3_BUCKET']
    end
end

ENV['xxx']とあるのは、環境変数を読み込みます。
それぞれの変数に、AWS側で設定した時に取得した「アクセスキーID」や「シークレットキー」などを設定します。

環境変数設定の例↓

$ export S3_REGION="ap-northeast-1"
$ export S3_ACCESS_KEY="ユーザー作成時に取得したアクセスキーID"
$ export S3_SECRET_KEY ="ユーザー作成時に取得したシークレットキー"
$ export S3_BUCKET="バケット作成時に設定したバケット名"
$ source ~/.bashrc

あとはCarrirwaveの基本設定ができていていれば、S3に保存ができるはずです。

自作railsアプリをデプロイする Part10 EC2インスタンス環境構築編

前回やったところから残りの設定を終わらせていきたいと思います。

f:id:Ryo10Leo:20200114142606p:plain

前回は大まかに、インスタンスに諸々の設定をしたあとアプリのクローンを作成したところまでいきました。

今回はWebサーバーやアプリケーションサーバー、SQLなどの設定をやっていきます。

正直一番緊張する内容です。。。

構築する環境を理解する

今回作る環境は一言でいうと「Web3層構成」です。それらは以下の3つの層で成り立っています。

Webサーバ層

Webブラウザからのアクセス要求を処理する層を示します。必要に応じて、Webアプリケーション層へリクエストを要求します。

ウェブアプリケーション

Webサーバから受けたリクエストをもとに、バックエンドで動作するJavaphpRubyなどを実行したり、データベースへのアクセスを行ない、処理を行ないます。

データベース層

入力したデータや、アプリケーションで参照するデータを保管する役割を持ちます。

参考 ↓
アプリケーションサーバってなに?Webサーバとの違い | 構築ツールの最新情報や基礎知識 | 知る・学ぶ | Marketing Bank (マーケティングバンク)

よってそれぞれの層の役割を担うのに必要なソフトウェアをインストールしていき、それらを関連づけることで「Web3層構成」を構築していきます。

構築するものを図で理解する

EC2インスタンス内に以下の環境を構築していきます。

f:id:Ryo10Leo:20200115230205p:plain

Webサーバ層に「Nginx」、ウェブアプリケーション層に「Puma」、データベース層には「PostgerSQL」使います。

図のアプリケーションサーバーのpumaに関しては、railsアプリケーションを動かすために必要なものです。

さらにアプリケーションサーバーには「Rack」と呼ばれるWebサーバーからのリクエストを翻訳してRailsに伝える(その逆も)という仕組みがあります。

よって以下のような流れでリクエストから処理(処理からレスポンス)の流れが実現できます。

ちなみにNginx と Puma間の情報のやりとりは、「UNIX Socket」を使います。

f:id:Ryo10Leo:20200115232251p:plain

アプリケーションサーバーの設定(Puma)

Railsにはデフォルトでpumaが入っているので、いろいろ設定していきます。
本番環境での操作であることに注意してください。

[ryo|~]$ cd /var/www/rails/myapp

先にバンドラーを取得。

[ryo|~ myapp $ gem install bundler

Pumaとpuma_worker_killerと他のGemfileに記載されているgemをインストールしていきます。

puma_worker_killerはpumaのパフォーマンスを管理して、ケアするものと思ってください。

Gemfile

・
・
gem 'puma',         
・
・
group :production do
 (省略)
  gem 'puma_worker_killer'
end
[ryo|~ myapp $ bundle install --without development test

設定ファイルを作成します。

[ryo|~ myapp]$ touch config/puma/production.rb
[ryo|~ myapp]$ touch tmp/sockets/puma.sock
[ryo|~ myapp]$ touch tmp/pids/puma.pid

puma.sockとpuma.pidは空で大丈夫です。

production.rbに以下を追記↓

# config/puma/production.rb

# UNIX Socketへのバインド
tmp_path = "#{File.expand_path("../../..", __FILE__)}/tmp"
bind "unix://#{tmp_path}/sockets/puma.sock"

# スレッド数とWorker数の指定
threads 3, 3
workers 2
preload_app!

# デーモン化の設定
daemonize
pidfile "#{tmp_path}/pids/puma.pid"
stdout_redirect "#{tmp_path}/logs/puma.stdout.log", "#{tmp_path}/logs/puma.stderr.log", true

# rails restartコマンドが使えます。
plugin :tmp_restart

# puma_worker_killerの設定
before_fork do
  PumaWorkerKiller.config do |config|
    # 閾値を超えた場合にkillする
    config.ram           = 1024 # mb
    config.frequency     = 5 * 60 # per 5minute
    config.percent_usage = 0.9 # 90%
    # 閾値を超えたかどうかに関わらず定期的にkillする
    config.rolling_restart_frequency = 24 * 3600 # per 1day 
    # workerをkillしたことをログに残す
    config.reaper_status_logs = true
  end
  PumaWorkerKiller.start
  ActiveRecord::Base.connection_pool.disconnect! if defined?(ActiveRecord)
end
on_worker_boot do
  ActiveRecord::Base.establish_connection if defined?(ActiveRecord)
end

Pumaの設定は終わりです。
この時点でrails sしても動きませんでした。
理由としてはデータベースをrailsアプリと接続してなかったので、「PostgreSQL」をrailsをつなげていきます。

データベースの設定

データベース側の設定は以下の記事の通り↓
ryo10leo.hatenablog.com

まずdatabase.ymlを編集

config/database.yml
・
・
・
production:
  <<: *default
  adapter: postgresql
  database: myapp_production
  user: <%= ENV['RAILS_DATABASE_USERNAME'] %>
  password: <%= ENV['RAILS_DATABASE_PASSWORD'] %>
  encoding: utf8

userとパスワードは環境変数にしたのでそれぞれ設定します。

[ryo|~ myapp]$ rails db:create RAILS_ENV=production
[ryo|~ myapp]$ rails db:migrate RAILS_ENV=production
#seed.rbがあるなら↓
[ryo|~ myapp]$ rails db:seed RAILS_ENV=production

これで

[ryo|~ myapp]$ rails s -e production

でpumaが起動します。

Nginxサーバーインストールと設定

まずはNginxをインストール

[ryo|~ myapp]$ sudo yum install -y nginx

インスタンス再起動時の自動起動設定

[ryo|~ myapp]$ systemctl enable nginx

nginxの設定ファイルを作成します。↓

[ryo|~ myapp]$ cd ~
[ryo|~ ]$ touch  /etc/nginx/conf.d/myapp.conf

作成したファイルを編集します。

upstream <app_server> {
    server unix:///var/www/rails/<myapp>/tmp/sockets/puma.sock;
}

server {
    client_max_body_size 20M;
    listen       80;
    server_name  #取得したElastic IPアドレス;
    root /var/www/rails/<myapp>/public;

    location / {
        proxy_pass http://<app_server>;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_redirect off;
        proxy_connect_timeout 30;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root /var/www/rails/<myapp>/public;
    }
}

<myapp>は自分のアプリファイル、<app_server>は任意の値を設定します。
server_nameには自身で取得したElastic IPアドレスを書きます。

nginxを起動します。

[ryo|~ myapp]$ sudo service nginx start

これで大まかな設定は完了です!

しかし、これで起動したってわけではありませんでした。

多分ここから人それぞれいくつかのエラーに遭遇するはずです。

自分は一つ一つ調べれば、解決できるものが多かったので落ち着いてデバックすればアプリケーションが動くようになるので、勉強だと思って頑張りましょう。

自分は以下のような内容のエラーが起こりました。↓

Rails5をproduction(本番環境)で起動する時に嵌ったこと - Qiita

Rails4+nginxでfavicon.icoが正常に表示されない問題 - プログラマーになりたい

【初心者・独学者向け】Ruby on Railsのアプリを本番環境へデプロイした時に、CSSが反映されない場合の対処法 - Ruby on Rails | ゼロイチ | 独学者・初心者向けプログラミング・SEO入門サイト


表示はされたけどrails側のエラーでアプリが表示されない↓

【rails】本番環境でもエラー文を表示させる - Qiita


あとはインスタンス側で環境変数がうまく設定されてなかったとか、地味なことも探って行けば大丈夫です。

長かったなー

次は番外編などを書いていきたいです。

設定したはずの環境変数がログアウトしたら消える時の対処

サーバー構築を勉強している際に、環境変数の設定方法を学んだので、以下のように設定していました。↓

export HOGE="hogehoge"

諸々の作業を終えた後にログアウトして、しばらくしてから再びログインして環境変数を確認。↓

export -p


「あれ…?全部消えてる…」


.bash_profileを開いてそこに「export HOGE="hoge"」のようにかけば解決しました!

sudo vi ~/.bash_profile
※ .bash_profileの中身

export HOGE="hoge"

以下も一応ね↓

$ source ~/.bash_profile

パスワード変更後にGit Pushできなくなった時の対処

問題の発端

GitHubで「パスワードを変えやがれー」と言われました。

問題

仕方なくパスワードを変えた後に、ローカルの作業で「Git Push」したときにこんなエラーが、、、↓

$ git push
remote: Invalid username or password.
fatal: Authentication failed for 'https://github.com/~~~/~~~~/'

文字通り有効ではないuserまたは、パスワードなのでPushができません。

おそらくパスワードを変えたせいで、Pushしてるの誰やねん状態になっているのですね。

対処法

GitHubユーザーを再設定したらできました。

$ git config --global user.name Ryo10Leo

これでGit Pushを試みます。

git push

この後パスワードを求められるので、再設定時のパスワードを入力すれば無事処理が完了します!!!

PostgreSQLをEC2に導入する

f:id:Ryo10Leo:20200115230205p:plain

AWSのEC2サーバー内でWeb3層構成を構築している際、データベース層には「PostgreSQL」を導入することにした。

導入するのに苦労したので、導入やユーザー、データベース作成の過程を書いていきたい。

PostgreSQLのダウンロードリスト

以下をインストールしました。

$ sudo yum list
postgresql.x86_64                      
postgresql-contrib.x86_64              
postgresql-devel.x86_64                
postgresql-libs.x86_64                  
postgresql-server.x86_64                

存在を確認します。

$ psql --version

PstgreSQLの設定や操作

データベースの初期化

$ sudo service postgresql initdb

データベース起動

$ sudo service postgresql start

起動確認します。

$ service postgresql status

systemctlコマンドでも実行できるけど、違いがわかんねぇ...
「service postgresql status」だと「Redirecting to /bin/systemctl status postgresql.service」と出るからどっちも同じ意味だよね?笑

サーバー(EC2インスタンス)起動時に、PostgreSQL自動起動させる

$ sudo chkconfig postgresql on

以下のコマンドでもできた↓

sudo systemctl enable postgresql

結果が以下の通り(enable)なら無事自動起動の設定完了

$ systemctl list-unit-files -t service | grep postgres
postgresql.service                            enabled 

エンコードの変更

まずデフォルトのデータベースを確認します。

PostgreSQL にスーパーユーザー(postgres)で接続

$ sudo -u postgres psql
postgres=# \l
                                    List of databases
     Name     |  Owner   | Encoding  |   Collate   |    Ctype    |   Access privileges   
--------------+----------+-----------+-------------+-------------+-----------------------
 postgres     | postgres | SQL_ASCII | C           | C           | 
 template0    | postgres | SQL_ASCII | C           | C           | =c/postgres          +
              |          |           |             |             | postgres=CTc/postgres
 template1    | postgres | SQL_ASCII | C           | C           | 

このままデータベースを作成するとエンコードが「SQL_ASCII」になってしまうため、アプリ側で「UTF-8」に設定していると、アプリとデータベースでうまく接続されません。
先にエンコードが「UTF-8」になるように設定します。

参考↓
PostgreSQL: template1 のエンコーディングを UTF-8 に変更する - tkrdの日記

postgres=# UPDATE pg_database SET datistemplate = FALSE WHERE datname = 'template1';
# DROP DATABASE template1;
# CREATE DATABASE template1 WITH TEMPLATE = template0 ENCODING = 'UTF8'
  LC_COLLATE = 'ja_JP.UTF-8' LC_CTYPE = 'ja_JP.UTF-8';
# UPDATE pg_database SET datistemplate = TRUE WHERE datname = 'template1';

これでやっと諸々の作成作業に入れます。

ユーザーやデータベースの作成

ユーザー(パスワード付き)を作成して、そのユーザーが所有するデーターベースを作成します。
今回はアプリの本番環境で使うデータベースを作成します。

ユーザーを作成(パスワード付き)

postgres=# alter role postgres with password ‘password’;  
# alter role ユーザー名 with password ‘password‘;

権限を与えます。↓

postgres=# ALTER ROLE user-name WITH CREATEDB;
ALTER ROLE
postgres=# \du

List of roles
     Role name      |                         Attributes                         | Member of
--------------------+------------------------------------------------------------+-----------
 user-name          | Create DB                                                  | {}

これはいるのかわからないけど。。。↓

/var/lib/pgsql93/data/pg_hba.conf

# TYPE  DATABASE  USER  ADDRESS   METHOD
#local   all       all             peer  ← コメントアウトか、削除
local   all       all             md5   ← 追加

いろいろ調べた結果、今回の作業だと蛇足だったかもです。

データベース作成↓

postgres=# create database [database_name] owner [user_name];

とりあえずこれで、アプリに繋ぐ PostgreSQL側の下準備はできたと思う。

自作railsアプリをデプロイする Part9 EC2インスタンス環境構築編

前回したこと↓

f:id:Ryo10Leo:20200113222855p:plain

自分のec2インスタンスにログインするユーザーを作成して、無事インスタンスにログインすることができました。

ryo10leo.hatenablog.com


今回は、実際にインスタンスの環境構築を行っていこうと思います。

環境構築とは何をするのか

前回の記事の例で、「処理に必要なソフトウェアをインストールすること」と説明したのでそのままのことをやります。

アプリは「Ruby」で書かれているものなので、その言語が動く環境にしたり、サイトのアクセスに対応するために、Webサーバーが必要なので「Nginx」を導入したりなど様々です。

今回は、作成したインスタンスRubyの実行環境になるように設定していきます。その過程で「Git」も使えるようになるので、インスタンスアプリのクローンを作成したいと思います。こうすることで、自分のアプリのリポジトリインスタンスが取得することになります。

今回行う環境構築を図で理解する

f:id:Ryo10Leo:20200114142606p:plain

図の通りです。①最初はインスタンスRuby,Git etc...が動く環境を作成します。データベースには「PostgreSQL」を使用します。
次に、②自身のGit Hubから「SSH通信」を利用して、アプリのクローンをインスタンスに作成していきたいと思います。
この辺は前回の復習もかねた作業になると思います。

実際に環境を構築を行う

Ruby環境構築

まずRubyの実行環境を構築していきます。

手が震えます。。。笑

まずEC2にログイン。

$ ssh ratio_key_rsa

必要なものをインストールしていきます。

[ryo|~]$ sudo yum install git make gcc-c++ patch openssl-devel libyaml-devel libffi-devel libicu-devel libxml2 libxslt libxml2-devel libxslt-devel zlib-devel readline-devel ImageMagick ImageMagick-devel epel-release

こんなにあんの?それぞれ何してるの?もう訳わかんない。

っとなってしまいそうですが、そんなこと意識してたら先に進まないのでこのまま進みます。。。

パスワードを打ち込んだらインストール開始。

総ダウンロード容量: 86 M
インストール容量: 274 M
Is this ok [y/d/N]: y

こちらの画面がでたら、「y」です。

Railsを動かすには「Node.js」も必要なのでインストールしていきます。
なぜ!?と思わずに「RailsJavascript使っててんじゃん!必要じゃん!」って思って前に進みます。

[ryo|~] sudo yum install nodejs npm --enablerepo=epel

、、、ってできないじゃんっと思った方もいると思います。(僕もそうでした。)

こちら記事が助けていただきました!本当にありがとうございます。。。↓
qiita.com

こちらもyes no聞かれるので、「y」です。

さてここまでの作業で、もう実はもうGitは使えるようになっております。

次に「rbenv」というRubyのバージョンを切り替えるツールをGitを使ってインスタンスで使えるようにします。

ざっくりいうとターミナルでrbenvコマンドを使えるようにして、必要なプラグインも入れて、rubyインストールできるようにしようってことです。

[ryo|~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv 
(※rbenvのインストール) 
[ryo|~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile 
(※パスを通す)
[ryo|~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
[ryo|~]$ source .bash_profile  
(※.bash_profileの読み込み)
(※ここまでがrbenvコマンドが使えるようになる設定)
[ryo|~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
(※ruby-buildプラグインのインストール)
(※Rubyがインストールできるようになります)
[ryo|~]$ rbenv rehash

ちなみにrbenv rehashは、ruby、gemでインストールしてきたファイルの実行環境が生成されています。

ようやくRubyのインストールです。

# ruby 2.1.3のインストール(versionは適宜変更)
[ryo|~]$ rbenv install -v 2.6.3
[ryo|~]$ rbenv global 2.6.3
[ryo|~]$ rbenv rehash
[ryo|~]$ ruby -v

ruby -vで、インストールしたバージョンが表示されれば成功です。

PostgreSQLインストール

細かい設定は次回にして、とりあえずインストールしていきます。

こちらのドキュメントを参考にします。↓
PostgreSQL: Linux downloads (Red Hat family)

[ryo|~]$ sudo yum install postgresql-server postgresql-devel postgresql-contrib

ここは人それぞれで詰まったりするかもしれないので、調べながらじっくりやりましょう笑

インストールできたら起動します。

[ryo|~]$ sudo service postgresql initdb
Hint: the preferred way to do this is now "postgresql-setup initdb"
Initializing database ... OK

[ryo|~]$ sudo service postgresql start
Redirecting to /bin/systemctl start postgresql.service

Gitとの連携して、アプリのクローンの作成

まずインスタンスでGitに関する設定ファイルを作成し、内容を記述していきます。

viコマンドで作成、編集できます。↓

[ryo|~]$ vi .gitconfig

以下のように設定していきます。↓

-----------------------------
[user]
  name = your_name (※gitに登録した自分の名前)
  email = hoge@hoge.com (※git登録時の自分のメールアドレス)

[color] (※色付け)
  ui = true

※ githubの設定
[url "github:"] 
    InsteadOf = https://github.com/
    InsteadOf = git@github.com:

編集が終わった保存して終了。

アプリを配置するためのディレクトリを作成します。

[ryo|~]$ cd /
[ryo|/]$ sudo chown ryo var
(※varフォルダの所有者をryoにする)
[ryo|/]$ cd var
[ryo|var]$ sudo mkdir www
[ryo|var]$ sudo chown ryo www 
[ryo|var]$ cd www
(※wwwと同じ処理)
[ryo|www]$ sudo mkdir rails
[ryo|www]$ sudo chown ryo rails

mkdirコマンドで必要なフォルダを作成し、chownコマンドで作成したフォルダの所有者を変更しています。

ここからGitとの接続していきます。
Git HubでSSH接続していくので、必要な公開鍵などを作成していきます。

操作は以下の通りです。

[ryo|www]$ cd ~
[ryo|~]$ mkdir .ssh (#既に生成されている場合もあります。)
[ryo|~]$ chmod 700 .ssh
[ryo|.ssh]$ cd .ssh
[ryo|.ssh]$ ssh-keygen -t rsa
-----------------------------
Enter file in which to save the key ():aws_git_rsa 
(※ファイルの名前を記述して、エンター)
Enter passphrase (empty for no passphrase): 
(※そのままエンター)
Enter same passphrase again: 
(※そのままエンター)
-----------------------------
[ryo|.ssh]$ ls
(#「aws_git_rsa」と「aws_git_rsa.pub」が生成されたことを確認)
[ryo|.ssh]$ vi config
-----------------------------
# githubの場合以下を追記
Host github
  Hostname github.com
  User git
  IdentityFile ~/.ssh/aws_git_rsa (#秘密鍵の設定)
-----------------------------
[ryo|.ssh]$ cat aws_git_rsa.pub
-----------------------------
(※以下をコピーかメモしとく)
ssh-rsa ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ryo@ip~~~~
-----------------------------

Git Hub側で作成した公開鍵をアップしていきます。

アカウントを持っていれば以下のURLで設定できます。
https://github.com/settings/ssh/new

f:id:Ryo10Leo:20200115020548p:plain

title」に鍵の名前、「key」で$ cat aws_git_rsa.pubで参照した内容を入力します。

Add SSH key」で完了!

↓接続確認

[ryo|.ssh]$ ssh -T github

うまくいかなかったら以下のコマンドを実行して、

[ryo|.ssh]chmod 600 config

もう一度↓

[ryo|.ssh]$ ssh -T github

こんな画面がでたら成功!!↓

Hi Ryo! You've successfully authenticated, but GitHub does not provide shell access.

クローンを作成します。

ディレクトリを移動。↓

[ryo|.ssh]$ cd /var/www/rails

Git Hubにて、自分のアプリのリポジトリの画面を開きます。

f:id:Ryo10Leo:20200115022057p:plain

緑のボタンを押して、右上の「Use SSH」を押したら、URLがでます。これをコピーします。

コピーしたのを貼り付けて、git cloneコマンドを実行します

[ryo|rails]$ git clone git@github.com:~~~~~~~~~~~~

lsコマンドでアプリがあるか確認↓

[ryo|rails]$ ls

自分はクローン無事成功しました!

secret_key_baseの設定

これもやっとかなあかんらしいです。

ローカル環境で

$ rails secret

出力されるものをコピーします。

sercret.ymlに以下の部分があるか確認。なかったら追加↓

sercret.yml

・
・
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
$ export SECRET_KEY_BASE="コピーしたやつ"

これでひと段落です。

まだまだ手が震えております。

次は、webサーバーやらアプリケーションの設定、、、
あ、データベースの設定もしないと、、、

道のりは長いなーーーーー


ryo10leo.hatenablog.com