ポートフォリオをデプロイしたときのEC2の設定2(EC2+RDS+NGINX+Puma)

その1から続いています

16:GithubとSSHを接続するために鍵を作成

※EC2内で行います。(sshコマンドで接続してからだよ)

cd ~/.ssh

ssh-keygen -t rsa

例としてrsa_portfolioで作成

17:設定ファイルを作成

vim config

#以下を記述してセーブ

ここから==========================
Host github

  Hostname github.com

  User git

  IdentityFile ~/.ssh/rsa_portfolio

ここまで==========================

18:公開鍵を登録する

#公開鍵をコピーして控えておく一番うしろの部分はコピーしなくて良い
cat rsa_portfolio.pub

#Githubで公開鍵を登録
①GitHubにアクセスして自分のアイコンからSettingsをクリック
②SSH and GPG keysをクリック
③SSHkeyを登録する(rsa_portfolio.pub)

19:GitHubとSSH接続する

chmod 600 /home/newuser/.ssh

ssh -T github

#エラーで接続できなかった時に試します(接続できたらやらなくていいいです)
chmod 744 config

20:GitHubからクローンしてbundlerをインストールします

GitHubにてデプロイしたい自分のリポジトリのCode→SSHからコピーして

git clone git@github.com:newuser/アプリ名.git

gem install bundler -v '2.0.2'

21:gemをインストールします

cd アプリ名/

bundle install --path vendor/bundle

#エラーが出た場合バージョンを合わせる

Gemfile.lockの最下段bの BUNDLED WITH のバージョンと合わせる(例:1.16.6)

#ディレクトリは〜で行う

cd ~
gem install bundler -v '1.16.6'
bundle install --path vendor/bundle

#エラーでrmagikがインストール出来ないときのコマンド 

sudo yum -y install ImageMagick 
sudo yum -y install ImageMagick-devel
bundle install --path vendor/bundle
yarn install

22:nginxをインストールする

sudo amazon-linux-extras install nginx1

#インストールできたか確認
nginx -v

23:アプリ名.confの設定(Nginx)

sudo vim /etc/nginx/nginx.conf
#以下をコピーして貼り付けます

user nginx;
worker_processes auto; 
error_log /var/log/nginx/error.log; 
pid /run/nginx.pid; 
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic. 
include /usr/share/nginx/modules/*.conf; 
events { 
worker_connections 1024; 
} 

http { 
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 
                '$status $body_bytes_sent "$http_referer" ' 
                '"$http_user_agent" "$http_x_forwarded_for"'; 

access_log /var/log/nginx/access.log main; 

sendfile on; 
tcp_nopush on; 
tcp_nodelay on; 
keepalive_timeout 65; 
types_hash_max_size 4096; 

include /etc/nginx/mime.types; 
default_type application/octet-stream; 

# Load modular configuration files from the /etc/nginx/conf.d directory. 
# See http://nginx.org/en/docs/ngx_core_module.html#include 
# for more information. 

include /etc/nginx/conf.d/*.conf; 
gzip on; 
gzip_http_version 1.0;
gzip_proxied any; 
gzip_min_length 500; 
gzip_disable "MSIE [1-6]\."; 
gzip_types text/plain text/xml text/css 
           text/comma-separated-values 
           text/javascript application/x-javascript 
           application/atom+xml; }

24:nginxの設定をする

cd /etc/nginx/conf.d/ 
sudo vim アプリ名.conf

#以下をすべてコピーして貼り付けます
# log directory
error_log /var/www/LifeHack-Tools/log/nginx.error.log; #自分のアプリケーション名に変更
access_log /var/www/LifeHack-Tools/log/nginx.access.log; #自分のアプリケーション名に変更
# max body size
client_max_body_size 4G;

upstream app_server {
# for UNIX domain socket setups
server unix://var/www/LifeHack-Tools/tmp/sockets/puma.sock fail_timeout=0; #自分のアプリケーション名に変更
}

server {
listen 80;
server_name suzutuki-portfolio.com; #自分のElasticIP
# nginx so increasing this is generally safe...
keepalive_timeout 5;
# path for static files
root /var/www/LifeHack-Tools/public; #自分のアプリケーション名に変更
# page cache loading
try_files $uri/index.html $uri.html $uri @app;
location @app {
# HTTP headers
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://app_server;
}
# Rails error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /var/www/LifeHack-Tools/public; #自分のアプリケーション名に変更
}
}

25:Nginxの再起動

#Nginxの再起動
sudo nginx -s reload

cd /var/www/アプリ名/
git pull origin master

26:pumaの設定をする

#pumaディレクトリがないときはmkdir /var/www/アプリ名/config/pumaで作成する
cd /var/www/アプリ名/config/puma/
sudo vim production.rb
#ここからコピーだよ↓

# bind "unix://#{Rails.root.join('tmp/sockets/puma.sock')}"だとpumactlコマンドで読み込まないため絶対パスで指定

root_dir = '/var/www/アプリ名'

max_threads_count = ENV.fetch('RAILS_MAX_THREADS', 5)

min_threads_count = ENV.fetch('RAILS_MIN_THREADS', max_threads_count)

threads min_threads_count, max_threads_count

worker_timeout 60

bind "unix://#{root_dir}/tmp/sockets/puma.sock"

environment 'production'

pidfile File.expand_path('tmp/pids/server.pid')

stdout_redirect File.expand_path('log/puma_access.log'), File.expand_path('log/puma_error.log'), true

# workerの数は適宜変更する。指定しない場合はsingle modeとなるが、指定した場合はcluster modeとなる。

plugin :tmp_restart

27:pumaの起動

cd /var/www/アプリ名

git pull origin master

bundle exec rails s -e production

28:エンドポイントの確認

まずはAWSを開き、RDSのメニューからデータベースを選択して

エンドポイントをコピーします。

29:Credentialの設定

cd /var/www/アプリ名/config

touch master.key

chmod 600 master.key

vim master.key

#ローカルにあるmaster.keyの中身をコピーして貼り付け
# 自分で作成したアプリのconfigにmaster.keyがある
# GitHubにはないので注意

30:Credentialに書き込み

cd /var/www/アプリ名

EDITOR="vi" bin/rails credentials:edit
# エラーでできない場合はこちらを試す
EDITOR='vi' bundle exec rails credentials:edit

usernameは設定からわかる。passwordはわからなくなったら変更できる。

db: 

  endpoint: ******************** #先程コピーしたエンドポイントをコピー

  user_name: ***** # マスターユーザー名

  password: ****** # RDS作成した時に作ったパスワード

# Used as the base secret for all MessageVerifiers in Rails, including the one protecting cookies.

secret_key_base: *********** #ここは特に手を加えずにそのままで

31.database.ymlの編集

ローカルでdatabase.ymlの設定
先ほどのcredentialsに記載された情報にアクセスするには Rails.application.credentials.db[:endpoint]という書き方をする必要があり、これを利用してproduction環境用のDBに関して定義。

config/database.yml

default: &default

  adapter: mysql2
 
  encoding: utf8mb4

  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

  username: root

  password: password

  socket: /tmp/mysql.sock

  host: db

development:

  <<: *default

  database: アプリ名_development

production:

  <<: *default

  database: アプリ名_production

  adapter: mysql2

  charset: utf8mb4

  host: <%= Rails.application.credentials.db[:endpoint] %>

  username: <%= Rails.application.credentials.db[:user_name] %>

  password: <%= Rails.application.credentials.db[:password] %>

32:変更した差分を反映

cd /var/www/アプリ名/
git pull origin master

33:DBの作成とmigrate

bundle exec rake db:create RAILS_ENV=production

bundle exec rake db:migrate RAILS_ENV=production

#環境の設定
export RAILS_ENV=production

34:アセットプリコンパイル

bundle exec rake assets:precompile RAILS_ENV=production

35:ブラウザで確認する

http://ElasticIPアドレス

期待していた通りになっていたらOKです。

36:本番環境でもちゃんと動いているか確認します。

レイアウトが崩れていないか

エラーが発生しないか確認します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です