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
AWS 環境構築その3
アプリケーションサーバーの設定の前に
アプリケーションサーバーいれる前にそもそもアプリがないと意味ないのでgitからコードをクローンできるようにしとく。
EC2インスタンスのSSH公開鍵をGithubに登録しないと誰だかわかんないのでclone出来ない。
まずSSH鍵ペアを作る。
注意点としては
SSHログインする時にパソコンとEC2の間にペア鍵を作ったのを思い出して欲しい。
AWSの場合はpemファイルをダウンロードすることで秘密鍵をgetしていたが、
本来であれば秘密鍵はローカルで作成して、公開鍵だけをあげるはずだった。(SSHの記事参照)
今回はEC2とGithubの間で本来の手順でSSHキーペア を作る感じ
以下抜粋
以下のコマンド入力して、EC2サーバのSSH鍵ペアを作成しましょう
途中で passphrase
など3段階ほど入力を求められることがありますが、全て何も入力せずにEnterキーで進んでください。
※EC2サーバにログインしていない場合はログインしてから以下の作業を行なってください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[ec2-user@ip-172-31-23-189 ~]$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ec2-user/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ec2-user/.ssh/id_rsa.
Your public key has been saved in /home/ec2-user/.ssh/id_rsa.pub.
The key fingerprint is:
3a:8c:1d:d1:a9:22:c7:6e:6b:43:22:31:0f:ca:63:fa ec2-user@ip-172-31-23-189
The key's randomart image is:
+--[ RSA 4096]----+
| + |
| . . = |
| = . o . |
| * o . o |
|= * S |
|.* + . |
| * + |
| .E+ . |
| .o |
+-----------------+
|
次に、以下のコマンドで生成されたSSH公開鍵を表示し、値をコピーします。
1 2 |
本来の手順通りキーペア を作成して公開鍵.pubの方の中身を覗いてコピーしてる。これをgithubに渡す感じ
github側でやること
personal settingsの部分にSSH and GPG keysの項目があるから
タイトルには適当なもをつけて
keyの部分にさっきcatで覗いてコピーしたSSH公開鍵を貼り付けて
Add SSH key を押して保存
ここまできたらEC2からGithubにSSH接続できるかを確認する
[ec2-user@ip-172-31-23-189 ~]$ ssh -T git@github.com Hi <Githubユーザー名>! You've successfully authenticated, but GitHub does not provide shell access.
途中何か聞かれたらyesで進んで上のようにsuccessしてるのを確認する。これでgitからクローンできるようになってるので、とりあえずアプリケーションサーバーの設定に進む。
アプリケーションサーバーの設定
ローカルではrails s でpumaが起動し、ブラウザから自身のPCを指すドメインであるlocalhost:3000にアクセスしている。って感じなんだけど、そこはあんま気にせんでいいかな。擬似的なもんだから実際との違いが逆に理解の妨げになるかも。結局大事なのは本番環境がどうなってるかってことだからね。で、実際はpumaじゃなくてunicornをアプリケーションサーバーとして使うのでそれを設定していく。
Unicornの設定
1.まず普通にローカルのgemに'Unicorn'入れてbundle installする。本番だけでいい。
2. config.unicorn.rbを作成し、設定を書く。ここも抜粋する
#サーバ上でのアプリケーションコードが設置されているディレクトリを変数に入れておく
app_path = File.expand_path('../../', __FILE__)
#アプリケーションサーバの性能を決定する
worker_processes 1
#アプリケーションの設置されているディレクトリを指定
working_directory app_path
#Unicornの起動に必要なファイルの設置場所を指定
pid "#{app_path}/tmp/pids/unicorn.pid"
#ポート番号を指定
listen 3000
#エラーのログを記録するファイルを指定
stderr_path "#{app_path}/log/unicorn.stderr.log"
#通常のログを記録するファイルを指定
stdout_path "#{app_path}/log/unicorn.stdout.log"
#Railsアプリケーションの応答を待つ上限時間を設定
timeout 60
#以下は応用的な設定なので説明は割愛
preload_app true
GC.respond_to?(:copy_on_write_friendly=) && GC.copy_on_write_friendly = true
check_client_connection false
run_once = true
before_fork do |server, worker|
defined?(ActiveRecord::Base) &&
ActiveRecord::Base.connection.disconnect!
if run_once
run_once = false # prevent from firing again
end
old_pid = "#{server.config[:pid]}.oldbin"
if File.exist?(old_pid) && server.pid != old_pid
begin
sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
Process.kill(sig, File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH => e
logger.error e
end
end
end
after_fork do |_server, _worker|
defined?(ActiveRecord::Base) && ActiveRecord::Base.establish_connection
end
|
worker_processes
ワーカーの数決める。workerはプロセスが分裂した物らしい。まあ数増やせば処理速度あがるよくらいに思っとく。
pid
プロセスidが書かれたファイルが生成される場所の指定
uglifierのコメントアウト
config/environments/production.rbに
config.assets.js_compressor = :uglifier があるのでコメントアウトする。
js軽量化のための物だがテンプレートリテラルに対応してないのでエラーの元になる。個人アプリで作ったレベルであれば軽量化してなくてもほとんど変わらない。
追記予定
AWS 環境構築その2
データベースサーバの設定
MySQLのインストール
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install mysql56-server mysql56-devel mysql56
上の例だとバージョン5.6
MySQLの起動
ec2-user@ip-172-31-25-189 ~]$ sudo service mysqld start
serviceコマンド
Amazon LinuxやCentOSで使えるコマンド。インストールしたソフトウェアの起動を一括して行える
daemonデーモン
Linux用語でサーバを意味する。上の例だとmysqldのdはdaemonのd
確認
sudo service mysqld status と打ち runningであることを確認する
MySQLのrootパスワードの設定
yumインストールしたMYSQLにはデフォルトではrootというユーザーで接続できるが、パスワードは設定されていないので、パスワード設定しとく。
[ec2-user@ip-172-31-25-189 ~]$ sudo /usr/libexec/mysql56/mysqladmin -u root password 'ここを設定したいパスワードにする。ただし0から始まる物は避ける'
Railsからアクセスする時にも利用するので覚えとく。
設定したパスワードで入れるか確認
AWS 環境構築
結構定型文的な呪文が多そうなのでカリキュラムからの抜粋が多い。
sudoよく使ってるので一応
https://eng-entrance.com/linux-root
最初はLinuxOS以外何も入ってないので色々と入れてく。yumコマンドを使う。
yumはLinuxOSのパッケージ(ソフトウェアでもライブラリでもいいけどLinuxは行為言うのをパッケージって読んでる)管理のための仕組み。
MacOSのhomebrewみたいなもん。
以下抜粋
環境構築で最初にやること
サーバーに接続したターミナルで
[ec2-user@ip-172-31-25-189 ~]$ sudo yum -y update
でまずパッケージをアップデート
ec2-user@ip-172-31-25-189 ~]$ 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
|
で必要な物をインストール。まぁとりま呪文でいいかなぁ。
#cとc++のコンパイラ、gitの差分をpatchファイルに変更する、らしい
あとのは調べてないがyamlだのxmlだのopensslだのちょこちょこ何のための物か想像つく奴があるし、本当に環境構築って感じなんだろう。libとかdevelをとったもん調べれば何のためのもんかはわかりそうな気がする
yumコマンド
https://www.atmarkit.co.jp/ait/articles/1608/29/news019.html
-yは全てにyesで答えるオプション。
node.jsをインストールする
抜粋
[ec2-user@ip-172-31-25-189 ~]$ sudo curl -sL https://rpm.nodesource.com/setup_6.x | sudo bash - [ec2-user@ip-172-31-25-189 ~]$ sudo yum -y install nodejs
Curl(カール)とは、URLを使用してデータ転送するためのコマンドラインツールです。ライブラリ「libCurl」をベースとして動作します。多くのプロトコルに対応して、さまざまなソフトウェアのデータ転送バックボーンとして利用されています。
らしい。-sLは-sが進捗やエラーを表示しない。-Lが
curlでGoogle ( http://www.google.com/ ) にアクセスすると分かりますが、別のページに飛ばされます。HTTPには、別のページへ飛ばすためのいくつかの方法がありますが、その指定に従って飛んでいくには、「 -L 」を書いておきます。特別なことが無い限りは、常に書いておいた方がよいでしょう。
ということらしいので併せたような感じなんかなぁ
rbenvとruby-buildのインストール
rubyいれる前にこれ入れとかないとだめ
また抜粋
1 2 3 4 5 6 7 8 9 10 11 12 |
#rbenvのインストール
[ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
#パスを通す
[ec2-user@ip-172-31-25-189 ~]$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
#rbenvを呼び出すための記述
[ec2-user@ip-172-31-25-189 ~]$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
#.bash_profileの読み込み
[ec2-user@ip-172-31-25-189 ~]$ source .bash_profile
#ruby-buildのインストール
[ec2-user@ip-172-31-25-189 ~]$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
#rehashを行う
[ec2-user@ip-172-31-25-189 ~]$ rbenv rehash
|
コマンドを一つずつ見ていきましょう。
1つ目のコマンドは、gitからrbenvをクローンしています。
2つ目と3つ目のコマンドは、パスを通す際に必要なコマンドです。パスを通すとは、どのディレクトリからもアプリケーションを呼び出せる状態にするということです。
そして、4つ目のコマンドで、設定したパスを読み込んでいます。
5つ目のコマンドは、gitからruby-buildをクローンしています。
最後のコマンドは、使用しているRubyのバージョンにおいて、gemのコマンドを使えるようにするために必要なコマンドです。
これでrbenvとruby-buildのインストールは完了です。
補足
.bash_profile
https://wa3.i-3-i.info/word13650.html
export
https://www.atmarkit.co.jp/ait/articles/1801/12/news015.html
eval
https://www.atmarkit.co.jp/ait/articles/1712/22/news019.html
まぁとりあえず呪文だと思っとくかなぁ。この辺りは自分の力だと生兵法になりそうだし。わからんくなったら都度調べるくらいの方がいいかも。
Rubyのインストール
抜粋
ec2-user@ip-172-31-25-189 ~]$ rbenv install 2.5.1 [ec2-user@ip-172-31-25-189 ~]$ rbenv global 2.5.1 [ec2-user@ip-172-31-25-189 ~]$ rbenv rehash #rehashを行う [ec2-user@ip-172-31-25-189 ~]$ ruby -v # バージョンを確認
バージョンの指定は例だから特に2.5.1である必要はない
AWS EC2インスタンスにログインする。ポートを開放しておく。
Amazon EC2は仮想サーバ
Amazon RDSはデータベース
https://it-trend.jp/database/article/89-0058
まず前提としてリージョンは最初に選ぼうね。
EC2(Amazon Elastic Compute Cloud)
仮想マシン(ソフトウェア)が仮想的なlinuxサーバーを使えるようにしてくれる。このLInuxサーバー1つ分のことをEC2インスタンスと呼ぶ。あくまで仮想的な物だから物理的に一台という訳ではない。
AMI (Amazon Machine Image)
サーバーのデータを丸ごと保存したデータ。OSやwebサーバー等が事前にインストールされてる物もある。今はとりあえずAmazon Linux AMI を使ってる(2じゃない方)。クイックスタートからAmazon Linux AMI を選択したら、
インスタンスタイプ(スペックが違う。要はサーバーのスペック選べ)の選択に移るので、
無料枠のt2.microを選択して確認と作成ボタンを押して、インスタンス作成の確認ページに移る
間違いがなければ起動ボタンを押す
するとキーペア のダウンロードができるのでする。インスタンス毎にキーペア を作成しといた方が理論上は安全そう。鍵管理の煩雑さとの兼ね合いではあるので、どの程度そのサーバーにアクセスされたら困るかでレベル分けしてもいいかもしれない。
注意すべきポイントとして
この時ダウンロードしてるのは秘密鍵であるということ。
これは本来はおかしいのだが(本来秘密鍵はローカルで生成して、公開鍵だけをリモートに追記する。詳しくは前にまとめたSSH参照)、AWSは信頼できるのでコンソールで作成した物をダウンロードしてる。もちろんAWSは秘密鍵は持たずに破棄してくれる。
ユーザーが簡単にSSHできるようにというAWS側の配慮である。
当然他人に知られてはいけないし、無くすとログイン出来なくなってしまうので必ずダウンロードして保存しておくこと。キーペア の名前は何でもいいが、エラーのもとなのでスペースは含まないこと。
拡張子が.pemというファイルでダウンロードされる。
鍵名.pemってやつ。普通にdownload内にダウンロードされるので.sshディレクトリに移動させる。ディレクトリが無ければ作る。
chmod 600 ダウンロードした鍵の名前.pem
で権限設定しとく。
ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したインスタンと紐付けたElastic IP
でログイン可能だが、普段はec2-userではログインしない。あと説明する。
ここまでやって初めてEC2インスタンスの作成ができるようになる。
作成したらIDをメモっとく。(次のElastic IP 取得に必要なため)
Elastic IP
インスタンス作っただけだとサーバー起動時にIPアドレスが変わってしまうのでその都度設定を変える必要が出てくるので大変。Elastic IPを取得して紐づけることで、インスタンの起動停止にかかわらず固定のIPアドレスを使える。
まずElastic IPを取得。取得出来たら
アクションからアドレスの関連付けを選ぶ、
次のページでインスタンスを選ぶプルダウンがあるから、メモっといたインスタンスIDのインスタンスを選んで関連付ける。(プライベートI Dは入力しない)
取得したElastic IPと作成したインスタンスのパブリックIPが同一の物になってることを確認する
ポート開放
普通のhttp接続とかも出来ないので必要なポートを開放していく
設定はセキュリティグループで行う
セキュリティグループ
EC2インスタンスが属するまとまり。複数のEC2インスタンスのネットワーク設定を一括で行うためのもの。EC2インスタンス一覧のぺーじにセキュリティーグループのリンクも書いてあるから、インスタンの属するセキュリティグループの設定ページに飛んで編集を選択する。
モーダルが開くので、「ルールの追加」ポートを開く
タイプ HTTP
ポート範囲 「80」
送信元「カスタム/0.0.0.0, ::/0」
等としてhttpのポートを開いておく。それぞれの意味は気になったら調べるべし。普通はこれにしとけばいいと思う。
この時にルールの追加で開くこと。もともとあるSSHのポート閉じたりしないようにね。
EC2インスタンへのログイン
抜粋
$ chmod 600 ダウンロードした鍵の名前.pem
$ ssh -i ダウンロードした鍵の名前.pem ec2-user@作成したEC2インスタンスと紐付けたElastic IP
#(例えばElastic IPが123.456.789であれば、ssh -i ダウンロードした鍵の名前.pem ec2-user@123.456.789 というコマンドになります)
#(ダウンロードした鍵を用いて、ec2-userとしてログイン)
以下の様なメッセージが表示されることがありますが、「yes」と入力して下さい。
1 2 3 4 |
左側が[ec2-user]になれば成功。
ssh接続は一定時間でタイムアウトするので、切れたら同じようにまたログインする。
-i はidentigyのi 秘密鍵ファイルのことを言ってる。
https://webkaru.net/linux/ssh-command/
ただしec2-userは権限が大きいため、権限を小さくしたユーザーを作成してそちらでログインするのが普通
追記予定
SSH 自分にとって大事なとこ
前にもSSHについて何か書いたような気もするけど今の自分にとって何が大事、どこがポイントなのか整理しとく。
何故使うか
割りと安全にリモートサーバーを動かせる。
ファイルの操作や編集とかこれでできる。
リモートにSSHサーバがインストールされてる必要がある(LinuxOSなら入ってる)
ローカルにSSHクライアントがインストールされてる必要がある(MacOSなら入ってる)
要は普通に使えて安全なssh通信でリモートの設定しようねって話。
どうやって使うか
ターミナルからサーバーにログインして、ターミナルから遠隔操作するわけなんだけれども、どうやってsshログインするかについては2通り方法があり、2つ目が推奨される。
1パスワード認証でログインする
IPアドレスは前にまとめたから大丈夫だと思う。
192.168.***.***的なやつだったからプライベートIPだろう。リモートのIPでいいと思う。
ちょっとこのあたりは後で確定してから修正しよう。
初めてログインする時は本当に接続するか聞かれるのでyesと入力する
するとパスワードを求められるので入力する
これでリモートサーバにsshログイン出来た。
特徴
デフォルの認証方法なので、明示的に無効にしない限りはこれで入れる。
ユーザー名とパスワードは接続先OSのユーザーアカウントの情報が使われる。
セキュリティ的に脆弱なので無効にしてることも多い。
参考記事
https://qiita.com/tag1216/items/5d06bad7468f731f590e
2公開鍵でログインする
抑えておくべきとこ
公開鍵と秘密鍵の理解は別の話になりそうだから一旦置いといて
パスワード認証は危ないので普通こっちにする。
公開鍵はサーバーへのSSH通信を始める時に一緒に送る。
秘密鍵は、ローカル環境内に保存しておく(絶対。gitとかにあげんなよ)
実際のログイン手順
①公開鍵と秘密鍵を生成(ローカル環境側)
②公開鍵をサーバ側に設置(ローカル環境側→サーバ側)
③公開鍵認証でログイン
詳しくみていく
①公開鍵と秘密鍵を生成
2 ssh-keygen -t rsa で公開鍵と秘密鍵を作成
3 上のコマンドを実行すると
(上のは抜粋)、という画面になるので
ローカル環境の公開鍵と秘密鍵の保存場所はデフォルトで決まっていて。
に保存される
catコマンドで中も覗けるけど見ても意味はわからん。
②公開鍵をサーバ側に設置
1リモートサーバにローカル環境の公開鍵のファイル(id_rsa.pub)をコピーする
scpコマンドを使う。
scpコマンドは、送信先のディクトリを指定してファイルを送ることができるコマンド。このあたりちょこちょこ抜粋使いながら注釈入れてく
※ただしAWSではpemを使うのでこのコマンドとは異なる。AWSの記事の方で説明する。
2ローカル環境の公開鍵のファイル(id_rsa.pub)の中身をリモートサーバの公開鍵ファイル(~/.ssh/authorized_keys)に保存。
ここ要暗記。
ローカル環境では公開鍵はid_rsa.pubに保存してた。リモートでは.sshディレクトリ内なのは同じだがauthorized_keysというファイルを作って、そこに公開鍵の中身を追記する。
# リモートサーバにログイン $ ssh [ユーザー名]@ [IPアドレス] # .sshディレクトリへ移動 $ cd ~/.ssh # リモートサーバの公開鍵のファイル(~/.ssh/authorized_keys)を作成 touch .ssh/authorized_keys # 公開鍵の中身を追記 $ cat ~/id_rsa.pub >> authorized_keys
ちょっとわかりづらいがLinuxでは
>で上書き
>>でファイルへの追記
で、矢印が刺さってる側に書き込まれるみたい。
catで中身みてそれを追記してるって解釈でええんやろう。
https://qiita.com/i35_267/items/a19f065691fdc17ae476
最後にauthorized_keysファイルの権限を設定する。
authorized_keysファイルには読み・書きの権限を設定
もちろん所有者だけね
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
③公開鍵認証でログインできるか確認
秘密鍵が~/.ssh/id_rsaに保存されていればリモートサーバにログインする時に自動的に鍵をしようした接続を行うようになってる。
1リモートサーバにログインする
パスワード入力求められるので秘密鍵に設定してたやつを入力する
2ログインを確認
ログイン出来たら
[ユーザー名]@[IPアドレス]%
となってるはず
おしまい。ざっくりまとめても長かったけどこの辺りしっかりわかってないと自分が何やってるかわかんなくなるのでちゃんと理解しとく。
データベース設定
後で追記予定とりあえず最初に参考にしたのはこれ↓
https://qiita.com/YJ2222/items/f07f01c03b681d7a2eb9
このあたりは後で読んどくか。どっかでdatabase.ymlの設定について調べてまとめるべきだろう。