Centos7 + Nginx + Ruby on Rails をVPSにセットアップ その2
独自ドメイン化 SSL + Http2化
ConoHa + お名前.com に独自ドメイン設定
お名前.comで,DNSレコード設定で 登録したいURL Type A で ConoHa の ip を設定する. VPS設定 で IPアドレス の逆引きホスト名に登録したいURLを登録します.
SSL + Http2化
参考文献
SSLは,Let's Encrypt で発行してもらいます.
その為,準備としてNginx を止めます.
systemctl stop nginx
そして ipv6 も無効化しておきます.
ipv6 の ConoHa でポートを閉じておきましょう.
cerbot をインストールして自動設定してもらいます.
メールアドレスを聞かれるので設定するのはそこだけです.
yum install epel-release yum install certbot certbot-auto certonly --standalone -d URL
次に Nginx の設定です. etc/sysctl.conf に設定した.
server{ listen 443 ssl http2; server_name URL; ssl on; ssl_certificate /etc/letsencrypt/live/URL/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/URL/privkey.pem; location / { proxy_pass http://unicorn; } }
あとはこのサイトで HTTP2 をテストすることができます.
HTTP/2 Test | A simple HTTP/2.0 test tool
Capistrano で自動デプロイ
Gemfile に追加
group :development, :test do gem 'capistrano'#, '~> 3.2.1' gem 'capistrano-rails' gem 'capistrano-rbenv' gem 'capistrano-bundler' gem 'capistrano3-unicorn' #Unicornの起動を簡単に行える end
Capistrano の設定
初期テンプレートファイルを作ってくれるコマンドを叩きます.
bundle exec cap install
作られた Capfile に以下を追記します.
# Load DSL and Setup Up Stages require 'capistrano/setup' # Includes default deployment tasks require 'capistrano/deploy' require 'capistrano/setup' require 'capistrano/deploy' # rbenvを使用している場合 require 'capistrano/rbenv' # デプロイ先のサーバで、ユーザディレクトリでrbenvをインストールしている場合 set :rbenv_type, :user set :rbenv_ruby, '2.5.0' require 'capistrano/bundler' require 'capistrano/rails/assets' require 'capistrano/rails/migrations' require 'capistrano3/unicorn'
デプロイ設定
共通部分の設定を config/deploy.rb に記述する
lock '3.10.1' set :application, "sample" set :repo_url, "https://GitHub_Personal access tokens:@github.com/GitHub_User/sample.git" set :deploy_to, '/var/www/sample' set :rbenv_ruby, '2.5.0' set :scm, :git set :log_level, :debug set :pty, true set :linked_dirs, %w{bin log tmp/pids tmp/cache tmp/sockets bundle public/system public/assets} set :default_env, { path: "/usr/local/rbenv/shims:/usr/local/rbenv/bin:$PATH" } set :keep_releases, 5 after 'deploy:publishing', 'deploy:restart' namespace :deploy do desc 'Restart application' task :restart do invoke 'unicorn:restart' end end
Railsアプリの稼働ディレクトリである/var/www/sampleと設定 config/unicorn/staging.rb
@app_path = '/var/www/sample' working_directory @app_path + "/current" worker_processes 2 preload_app true timeout 30 listen "/tmp/unicorn.sock", :backlog => 64 pid "/var/www/sample/shared/tmp/pids/unicorn.pid" stderr_path "#{@app_path}/log/unicorn.stderr.log" stdout_path "#{@app_path}/log/unicorn.stdout.log" before_fork do |server, worker| ENV['BUNDLE_GEMFILE'] = File.expand_path('Gemfile', ENV['RAILS_ROOT']) end before_fork do |server, worker| if defined?(ActiveRecord::Base) ActiveRecord::Base.connection.disconnect! end old_pid = "#{server.config[:pid]}.oldbin" if File.exists?(old_pid) && server.pid != old_pid begin Process.kill("QUIT", File.read(old_pid).to_i) rescue Errno::ENOENT, Errno::ESRCH end end end after_fork do |server, worker| if defined?(ActiveRecord::Base) ActiveRecord::Base.establish_connection end end
/config/environments/staging.rbは、production.rbをコピー
cp /config/environments/production.rb /config/environments/staging.rb
/config/deploy/staging.rbに対象のサーバとSSHの設定を記述
set :rails_env, "staging" set :unicorn_rack_env, "staging" role :app, %w{IP:PORT} role :web, %w{IP:PORT} server 'ip', user: 'USER', roles: %w{app web}, port: PORT set :ssh_options, { keys: %w(~/.ssh/SSH_RSA), forward_agent: false, auth_methods: %w(publickey) }
最後にデプロイコマンドです.
bundle exec cap staging deploy