構築済AWSにRuby on Rails5の環境構築(Unicorn, Nginx,DB設定等)をして公開する

構築済AWSにRuby on Rails5の環境構築(Unicorn, Nginx,DB設定等)をして公開する

このページには本線を進める為に必要な、AWSにRuby on Rails5の環境を作成する手順を記載しています。

各種インストール

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 \
mysql mysql-server mysql-devel \
ImageMagick ImageMagick-devel \
epel-release
sudo yum install nodejs npm --enablerepo=epel

rbenv, ruby-build, Ruby, railsインストール

以下のローカル開発環境と同様です。

https://normalblog.net/system/ruby-on-rails-centos7/

git clone

.gitconfig

.gitconfigに以下の内容を記載します。

[user]
 name = githubユーザ名
 email = githubメールアドレス
[url "github:"]
 InsteadOf = https://github.com/
 InsteadOf = git@github.com:

公開ディレクトリ

/var/www/railsディレクトリを作成し、ユーザの権限を与える(chown xxx rails)

github SSH接続設定

こちらの記事で同じ事をやっています。

https://normalblog.net/system/github-ssh/

git clone

cd /var/www/rails
git clone git@github.com:xxxxxxxxxxx

railtiesインストール

railsコマンドを使うためrailtiesをインストールします。

gem install railties
rbenv rehash

rails secretk_key_base

ローカル環境にて、

cd project名
rake secret

で生成されたkeyをコピーする。

本番環境で、環境変数に以下コマンドで登録する。※config/secrets.ymlにて環境変数を呼び出している為。

$export SECRET_KEY_BASE=シークレットキー

Unicorn(appサーバ)のインストール・設定

Gemfile

Gemfileに以下を追記

group :production, :staging do
 gem 'unicorn'
end

Unicornのインストール

gem install bundler
bundle install

unicorn.conf.rbの設定

/var/www/rails/project名/unicorn.conf.rbに以下を記載

  # set lets
  $worker  = 2
  $timeout = 30
  $app_dir = "/var/www/rails/project名"
  $listen  = File.expand_path 'tmp/sockets/.unicorn.sock', $app_dir
  $pid     = File.expand_path 'tmp/pids/unicorn.pid', $app_dir
  $std_log = File.expand_path 'log/unicorn.log', $app_dir
  # set config
  worker_processes  $worker
  working_directory $app_dir
  stderr_path $std_log
  stdout_path $std_log
  timeout $timeout
  listen  $listen
  pid $pid
  # loading booster
  preload_app true
  # before starting processes
  before_fork do |server, worker|
    defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!
    old_pid = "#{server.config[:pid]}.oldbin"
    if old_pid != server.pid
      begin
        Process.kill "QUIT", File.read(old_pid).to_i
      rescue Errno::ENOENT, Errno::ESRCH
      end
    end
  end
  # after finishing processes
  after_fork do |server, worker|
    defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
  end

Nginxのインストール・設定

Nginxのインストール

sudo yum install nginx

Nginxの設定

sudo vim /etc/nginx/conf.d/project名

で以下の内容記載

# log directory
error_log /var/www/rails/project名/log/nginx.error.log;
access_log /var/www/rails/project名/log/nginx.access.log;
# max body size
client_max_body_size 2G;
upstream app_server {
 # for UNIX domain socket setups
 server unix:/var/www/rails/project名/tmp/sockets/.unicorn.sock fail_timeout=0;
}
server {
 listen 80;
 server_name xxx.xxx.xxx.xxx;
 # nginx so increasing this is generally safe...
 keepalive_timeout 5;
 # path for static files
 root /var/www/rails/project名/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/rails/project名/public;
 }
}

Nginxディレクトリpermission設定

sudo chmod -R 775 /var/lib/nginx

DB接続情報設定

project名/config/database.yml

上記ファイルのproduction情報を記載

production:
 <<: *default
 database: project名_production
 username: root
 password:
 socket: /var/lib/mysql/mysql.sock
 host: RDSのエンドポイント

mysqld起動

sudo service mysqld start

mysqlソケットリンク

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

rails migration

rake db:setup RAILS_ENV=production

schema.rb, seeds.rbが実行されます。

プリコンパイル

調査中

$ rake assets:precompile RAILS_ENV=production
rake aborted!
Sass::SyntaxError: Invalid CSS after "...rgin-left: auto": expected "{", was "; margin-right:..."
(sass):578
Tasks: TOP => assets:precompile
(See full trace by running task with --trace)

https://qiita.com/mochikana/items/0b87222e1463a201885f

各種起動

Nginx起動

sudo service nginx start

unicorn起動

unicorn_rails -c /var/www/rails/project名/config/unicorn.conf.rb -D -E production

Nginx再起動

sudo nginx -s reload

参考サイト様

ほぼほぼこちらの情報通りでしたので、上記で出来なかった場合はこちらを見た方が良いです。

https://qiita.com/naoki_mochizuki/items/814e0979217b1a25aa3e

http://tetsuyai.hatenablog.com/entry/20110920/1316504421

https://qiita.com/mochikana/items/0b87222e1463a201885f

.

Comments

No comments yet. Why don’t you start the discussion?

コメントを残す

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