デプロイ:Nginx、PumaおよびMina

この短い記事では、Railsの構成(Pumaを使用してNginxで実行されるアプリケーションと、Minaですべてを展開する方法)を紹介します。



上記の項目を除いて、サーバーにすべての環境が既にインストールされていると仮定します(rbenvを介してrubyをインストールすることをお勧めします。そのため、Minaの上記の構成は専用に設計されます)。



私の

Minaのインストールは非常に簡単です。gemをインストールするだけです(Gemfileにインストールする必要はありません)。

gem install mina



次に、コマンドを入力します。

ミナ初期



このコマンドは、最低限必要な構成を含むconfig / deploy.rbファイルを生成します。

gitを設定する必要があることを覚えておいてください。(極端な場合)リポジトリからのログインとパスワードは、例に示すようにMina設定ファイルに直接書き込むことができます。 データベースに適用されるすべての設定が必要です。 また、構成にリストされているフォルダー/ファイルを作成していない場合は、それらを作成する必要があることに注意してください。

完全な構成例:

deploy.rb
require 'mina/bundler' require 'mina/rails' require 'mina/git' require 'mina/rbenv' lock '3.2.1' set :user, 'admin' set :domain, '100.100.100.100' set :identity_file, "#{ENV['HOME']}/.ssh/google" set :deploy_to, '/var/www/admin_app' set :app_path, lambda { "#{deploy_to}/#{current_path}" } set :repository, 'https://admin:admin@github.com/Admin_app.git' set :branch, 'master' set :forward_agent, true set :rbenv_path, '/home/admin/.rbenv/' set :shared_paths, ['config/database.yml', 'log'] task :environment do invoke :'rbenv:load' end task :setup => :environment do queue! %[mkdir -p "#{deploy_to}/#{shared_path}/log"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/log"] queue! %[mkdir -p "#{deploy_to}/#{shared_path}/config"] queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/config"] queue! %[touch "#{deploy_to}/#{shared_path}/config/database.yml"] queue %[echo "-----> Be sure to edit '#{deploy_to}/#{shared_path}/config/database.yml'."] end desc "Deploys the current version to the server." task :deploy => :environment do to :before_hook do # Put things to run locally before ssh end deploy do invoke :'git:clone' invoke :'server:stop_server' invoke :'deploy:link_shared_paths' invoke :'bundle:install' invoke :'rails:db_migrate' invoke :'rails:assets_precompile' invoke :'deploy:cleanup' to :launch do queue "mkdir -p #{deploy_to}/#{current_path}/tmp/" queue "touch #{deploy_to}/#{current_path}/tmp/restart.txt" invoke :'server:start_server' end end end namespace :server do desc 'Stop server' task :stop_server do queue 'echo "-----> Stop Server"' queue 'kill -9 $(lsof -i :3000 -t) || true' queue '[ -f /var/www/admin/admin_app.pid ] && rm /var/www/admin/admin_app.pid || echo "File admin_app.pid not exist"' end desc 'Start server' task :start_server do queue 'echo "-----> Start Server"' queue! 'rails s -b 0.0.0.0 -e production -P /var/www/admin/admin_app.pid -d &' end end
      
      







deploy.rbファイルが真実に似ていて機能するはずだと確信したら、次のコマンドを入力する必要があります。

ミナのセットアップ



このコマンドは、アプリケーションのルートフォルダー内に必要なフォルダーインフラストラクチャを作成します(構成では/ var / www / admin_appです)。

database.ymlファイルに情報が含まれており、正しいことを確認してください。 ファイルは/ var / www / myapp / shared / configにあります。

次に入力します:

ミナデプロイ



この操作が成功した場合、アプリケーションは/ var / www / admin_appのパスに沿って待機します。



deploy.rbにタスクを記述し、内部でそれらを呼び出すことにより、デプロイを簡単に拡張できます:deploy =>:environment。

たとえば、レスキューワーカーを開始および停止する2つのタスクを作成します。

依頼のタスク
 desc 'Start resque-workers' task :start_workers do queue 'echo "-----> Start resque-workers"' queue "cd #{app_path} && RAILS_ENV=#{stage} && touch resque.pid" queue "cd #{app_path} && bundle exec rake resque:work QUEUE=contacts_adder BACKGROUND=yes TERM_CHILD=1" queue "cd #{app_path} && bundle exec rake resque:work QUEUE=photo_downloader BACKGROUND=yes TERM_CHILD=1" #      queue 'echo "-----> Start resque-scheduler"' queue "cd #{app_path} && rake resque:scheduler BACKGROUND=yes VERBOSE=yes RAILS_ENV=production " end desc 'Stop resque-workers' task :stop_workers do queue 'echo "-----> Stop resque-workers"' queue 'kill -9 `ps aux | grep [r]esque | grep -v grep | cut -c 10-16` || true' end
      
      







次のコマンドを使用して、使用可能なタスクのリストを表示できます。

ミナタスク



プーマ

Pumaを構成するには、puma.rb構成ファイルとシェル-Pumaを開始/停止/再起動するように設計されたスクリプトの2つのファイルが必要です。



config /にpuma.rbファイルを作成します。 そして、次の情報を入力します。

puma.rb
 #!/usr/bin/env puma environment ENV['RAILS_ENV'] || 'production' pidfile "/var/www/admin/current/shared/tmp/pids/puma.pid" stdout_redirect "/var/www/admin/current/shared/tmp/log/stdout", "/var/www/admin/current/shared/tmp/log/stderr" threads 2, 16 workers 2 bind "unix:///var/www/admin/current/shared/tmp/sockets/puma.sock" daemonize true
      
      







構成を記入する際にパスを慎重に確認してください!



bin / puma.shファイルを作成します。 記入してください:

puma.sh
 #! /bin/sh PUMA_CONFIG_FILE=/var/www/admin/current/config/puma.rb PUMA_PID_FILE=/var/www/admin/current/shared/tmp/pids/puma.pid PUMA_SOCKET=/var/www/admin/current/shared/tmp/sockets/puma.sock # check if puma process is running puma_is_running() { if [ -e $PUMA_SOCKET ] ; then if [ -r $PUMA_PID_FILE ] ; then if ps -p `cat $PUMA_PID_FILE` > /dev/null; then return 0 else echo "No puma process found" fi else echo "No puma pid file found" fi else echo "No puma socket found" fi return 1 } case "$1" in start) echo "Starting puma..." if [ -e $PUMA_SOCKET ] ; then # if socket exists rm -f $PUMA_SOCKET echo "removed $PUMA_SOCKET" fi if [ -e $PUMA_CONFIG_FILE ] ; then echo "config" bundle exec puma -C $PUMA_CONFIG_FILE else echo "socket" bundle exec puma --daemon --bind unix://$PUMA_SOCKET --pidfile $PUMA_PID_FILE fi echo "done" ;; stop) echo "Stopping puma..." kill -s SIGTERM `cat $PUMA_PID_FILE` rm -f $PUMA_PID_FILE rm -f $PUMA_SOCKET echo "done" ;; restart) if puma_is_running ; then echo "Hot-restarting puma..." kill -s SIGUSR2 `cat $PUMA_PID_FILE` echo "Doublechecking the process restart..." sleep 5 if puma_is_running ; then echo "done" exit 0 else echo "Puma restart failed :/" exit 1 fi fi echo "Trying cold reboot" bin/puma.sh start ;; *) echo "Usage: script/puma.sh {start|stop|restart}" >&2 ;; esac
      
      







次に、Puma設定を使用してdeploy.rbファイルを展開します。

プーマのタスク
 namespace :puma do desc 'Start the application' task :start do queue 'echo "-----> Start Puma"' queue "cd #{app_path} && RAILS_ENV=#{stage} && bin/puma.sh start" , :pty => false end desc 'Stop the application' task :stop do queue 'echo "-----> Stop Puma"' queue "cd #{app_path} && RAILS_ENV=#{stage} && bin/puma.sh stop" end desc 'Restart the application' task :restart do queue 'echo "-----> Restart Puma"' queue "cd #{app_path} && RAILS_ENV=#{stage} && bin/puma.sh restart" end end
      
      







「to:launch do」(サーバーを起動する前)ブロック内に、次のように記述します。

 invoke :'puma:restart'
      
      





puma.shファイルを実行可能にすることを忘れないでください:

chmod + x bin / puma.sh



そして、デプロイを再現します。

ミナデプロイ



Nginx

Nginxは、パッケージマネージャーから直接インストールできます。

sudo apt-get install nginx



nginxをインストールしたら、デフォルトサイトを削除する必要があります。

sudo rm /etc/nginx/conf.d/sites-enabled/default



ファイル/etc/nginx/sites-available/my_app.confを作成します。

Nginx'a config
 upstream my_app { server unix:///var/www/admin/current/shared/tmp/sockets/puma.sock; } server { listen 80; server_name 100.100.100.100; # change to match your URL root /var/www/admin/current/public; location / { root /var/www/admin/current/public; try_files $uri @app; gzip_static on; expires max; proxy_read_timeout 150; add_header Cache-Control public; } location @app { proxy_pass http://my_app; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto http; proxy_set_header Host $http_host; proxy_redirect off; proxy_next_upstream error timeout invalid_header http_502; }
      
      







突然問題が発生した場合は、これらの行を/etc/nginx/nginx.confファイルに直接登録してみてください。 サーバー情報(サーバー{})は、http(http {})ブロック内にある必要があります。



次に、リンクを作成します。

sudo ln -sf /etc/nginx/sites-available/my_app.conf /etc/nginx/sites-enabled/my_app.conf



そして、nginx'aを再起動します。

sudoサービスnginxの再起動



それだけです。 うまく展開できます:)



All Articles