Hirony Blog

またーりと

Nginx + Puma + Rails5 本番環境メモ

実行環境


ローカルマシーンでの作業

  • config/puma.rbに追記
# ファイルの先頭に追記
_proj_path = "#{File.expand_path("../..", __FILE__)}"
_proj_name = File.basename(_proj_path)
_home = ENV.fetch("HOME") { "/home/ubuntu" } # homeディレクトリ
pidfile "#{_home}/run/#{_proj_name}.pid"
bind "unix://#{_home}/run/#{_proj_name}.sock"
directory _proj_path 

さくらやAWSなどでの作業

  • git nginxのインストール
    $ sudo apt-get install git nginx -y

  • rbenvのインストール

# 段取り
sudo apt-get install -y git autoconf bison build-essential \
libssl-dev libyaml-dev libreadline6-dev \
zlib1g-dev libncurses5-dev libffi-dev \
libgdbm3 libgdbm-dev libsqlite3-dev

# install
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

vim ~/.bashrc
# 追記
export PATH=${HOME}/.rbenv/bin:${PATH}
eval "$(rbenv init -)"

source ~/.bashrc

# ruby install
rbenv install 2.4.1
rbenv global 2.4.1
ruby -v
  • yarnのインストール
$ curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
$ echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
$ sudo apt-get update && sudo apt-get install yarn

  • Nginxの設定ファイル、APP_NAME.confを作成。
# APP_NAMEを各々のRailsアプリケーション名へ変更

upstream APP_NAME {
    # railsのアプリケーション名とhome/ubuntuを編集
    server unix:/home/ubuntu/run/APP_NAME.sock fail_timeout=0;
}
 
server {
    listen 80;
    server_name 127.0.0.1;  # 本番環境のipアドレス、またはホスト名に変更
 
    root /home/ubuntu/APP_NAME/public;
 
    try_files $uri/index.html $uri @APP_NAME;
 
    location / {
        proxy_pass http://0.0.0.0:3000/;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
    }
 
    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}
  • mkdirコマンドでホームディレクトリにrunディレクトリを作る
    $ mkdir -pv ~/run
  • githubからRailsAppをクローン
    $ git clone Railsアプリのリポジトリ名.git
  • Gemfileを編集し以下の項目を有効
    gem 'therubyracer', platforms: :ruby
  • インストール
    $ bundle install
  • Nginxを再起動
    $ sudo service nginx restart
  • pumaを起動し動作確認
    $ puma -w 4

  • 本番環境用にassetsをコンパイル
    $ RAILS_ENV=production rails assets:precompile
  • 本番環境用にデータベースをマイグレーション
    $ RAILS_ENV=production bundle exec rails db:migrate
  • 本番環境用にPumaをデーモンで起動
    $ RAILS_ENV=production RAILS_SERVE_STATIC_FILES=true SECRET_KEY_BASE=$(rails secret) puma -w 4 -d

終わりに

次はこれをDockerでどっか〜んと、セットアップできるようにする。 これは最適解ではなく「とりあえず」動くって感じです。あーもっと勉強しなきゃ。