AWS 環境構築その3

アプリケーションサーバーの設定の前に

 

アプリケーションサーバーいれる前にそもそもアプリがないと意味ないのでgitからコードをクローンできるようにしとく。

 

githubSSH鍵を登録

EC2インスタンスSSH公開鍵をGithubに登録しないと誰だかわかんないのでclone出来ない。

まずSSH鍵ペアを作る。

注意点としては

SSHログインする時にパソコンとEC2の間にペア鍵を作ったのを思い出して欲しい。

AWSの場合はpemファイルをダウンロードすることで秘密鍵をgetしていたが、

本来であれば秘密鍵はローカルで作成して、公開鍵だけをあげるはずだった。(SSHの記事参照)

今回はEC2とGithubの間で本来の手順でSSHキーペア を作る感じ

 

以下抜粋

以下のコマンド入力して、EC2サーバのSSH鍵ペアを作成しましょう

途中で passphrase など3段階ほど入力を求められることがありますが、全て何も入力せずにEnterキーで進んでください。
※EC2サーバにログインしていない場合はログインしてから以下の作業を行なってください。

ターミナル(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公開鍵を表示し、値をコピーします。

ターミナル(EC2サーバ)
1
2
[ec2-user@ip-172-31-23-189 ~]$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2E......

 

 本来の手順通りキーペア を作成して公開鍵.pubの方の中身を覗いてコピーしてる。これをgithubに渡す感じ

 

github側でやること

personal settingsの部分にSSH and GPG keysの項目があるから

タイトルには適当なもをつけて

keyの部分にさっきcatで覗いてコピーしたSSH公開鍵を貼り付けて

Add SSH key を押して保存

 

ここまできたらEC2からGithubSSH接続できるかを確認する

[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軽量化のための物だがテンプレートリテラルに対応してないのでエラーの元になる。個人アプリで作ったレベルであれば軽量化してなくてもほとんど変わらない。

 

 

 

追記予定