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