Minaを使用してRubyonRailsアプリケーションをデプロイする方法
ステータス:非推奨
この記事では、サポートされなくなったバージョンのUbuntuについて説明します。 現在Ubuntu12.04を実行しているサーバーを運用している場合は、サポートされているバージョンのUbuntuにアップグレードまたは移行することを強くお勧めします。
理由: Ubuntu 12.04は2017年4月28日に保守終了(EOL)に達し、セキュリティパッチまたはアップデートを受信しなくなりました。 このガイドはもう維持されていません。
代わりに参照してください:
このガイドは参考として役立つかもしれませんが、他のUbuntuリリースでは機能しない可能性があります。 可能な場合は、使用しているUbuntuのバージョン用に作成されたガイドを使用することを強くお勧めします。 ページ上部の検索機能を使用して、より新しいバージョンを見つけることができます。
赤の意味
このチュートリアルでは、ユーザーが入力またはカスタマイズする必要のある行は赤になります。
序章
Minaは、SSH経由でサーバーへの展開を管理するためのスクリプトを作成および実行できる展開ツールです。 CapistranoやVladとは異なり、minaはデプロイごとに1つのSSHセッションのみを作成します。 MinaはRake上に構築されています。つまり、YAMLファイルはありません。すべてがRubyで記述されているため、構成ファイルは単純にRakeファイルです。SSH経由でデプロイ可能な任意のタイプのプロジェクトでMinaを使用できます。
ステップ1:ミナをインストールする
Rubyをインストールすると、コマンドラインのRubyGemsを使用して、他のgemと同じようにminaをインストールできます。
gem install mina
または、現在のRailsアプリケーションのGemfileの下部にminaを追加することもできます。
nano Gemfile
gem 'mina'
注:システムにrubyがインストールされていない場合は、次のチュートリアルを確認できます:rbenvを使用してUbuntu12.04LTSにRubyOnRailsをインストールする方法
ステップ2:deploy.rbを作成および編集する
ファイルdeploy.rbは、Rakeによって呼び出されるRakefileです。 このファイルでは、サーバーを構成し、後でminaを使用して呼び出すタスクを定義する必要があります。
deploy.rbファイルを作成する前に、ファイルで使用されているいくつかのコマンドを理解しましょう。
Queueは、リモートサーバーで実行されるbashコマンドをキューに入れることができる非常に便利なコマンドです。
Invokeコマンドは、タスクから他のタスクを呼び出すために使用されるヘルパーコマンドです。 たとえば、deploy.rbに次のようなものがあるとします。
<pre>
set :domain, 'myserver.com'
set :user, 'myuser'
task :down do
invoke :restart
invoke :logs
end
task :restart do
queue 'sudo service nginx restart'
end
task :logs do
queue 'tail -f /var/log/nginx/error.log'
end
</pre>
ターミナルでminarestartを実行する場合、minaはrestartという名前のタスクを検索し、SSH経由でset:domainで指定されたリモートサーバーでキューに入れられたコマンドを実行します。 したがって、この場合、minarestartはmyserver.com上のnginxサーバーを再起動します
minaログでも同じことが起こります。[email protected]を使用して、サーバー上でリモートでキューコマンド(tail -f /var/log/nginx/error.log)を呼び出します。また、minaダウンの場合は、サブタスク(restartおよびログ)コマンドをキューに入れます。
deploy.rbファイルを生成しましょう。 このためには、railsアプリケーションフォルダーでminainitを実行します。
mina init
ファイルを開いてサーバーを構成しましょう。
nano config/deploy.rb
ご覧のとおり、サンプルファイルにはコメントが付けられているため、そこで何が起こっているのかを非常に簡単に理解できます。
ファイルの先頭で、minaにはbundler、rails、およびgitが必要です。 rbenvまたはrvmを使用している場合は、4行目または5行目のコメントを解除する必要があります。
<pre>
require 'mina/bundler'
require 'mina/rails'
require 'mina/git'
<span class="highlight">require 'mina/rbenv'
# require 'mina/rvm'</span>
</pre>
13〜16行目には、ドメインの設定、デプロイされたフォルダへのパス、リポジトリ、およびブランチがあります。
# set :rails_env, 'production'
set :domain, 'myserver.com'
set :deploy_to, '/home/myuser/myserver.com'
set :repository, 'https://github.com/my-git-user/my-repo.git'
set :branch, 'master'
:rails_envは、デプロイに使用される環境を指定します。 :domainはSSHへのホスト名またはIPアドレスです:deploy_toはデプロイ先のパスです。サーバーから任意のフォルダーをセットアップできますが、アクセス許可があることを確認してください。
chown -R user-name /var/www/mydir
:repositoryは、クローンを作成するGitリポジトリです。 HTTPクローンURLまたはSSHクローンURLを使用できますが、SSHクローンURLの場合は、サーバー上に秘密鍵を持っているか(お勧めしません)、またはいくつかのミナマジックを使用する必要があります。 :ssh_options、’-A’を設定し、ユーザー名とポートを設定するだけです。
set :user, 'myuser'
# set :port, '22'
set :ssh_options, '-A'
この後、ホストを配置し、〜/ .ssh/configでforwardagentを有効にする必要があります。
<pre>nano ~/.ssh/config</pre>
そして、この行をそこに置きます。 myserver.comをホストまたはIPアドレスに置き換えます。
<pre>
Host myserver.com
ForwardAgent yes
</pre>
最初のコマンドは、SSHにユーザー名を設定します。 sshにカスタムポートを使用している場合は、2行目のコメントを解除します。 3行目では、sshコマンドに-Aフラグを追加して、認証エージェント接続の転送を有効にします。 基本的に、最後のコマンドは、リポジトリのクローンを作成するためにサーバーにログインするために使用されるのと同じ秘密鍵を使用するようにsshに指示します。
環境タスクでは、ロードする環境のコメントを解除する必要があります。 rbenvを使用してrubyをインストールした場合は、32行目のコメントを外します。 rvmの場合、35行目のコメントを解除します。
task :environment do
invoke :'rbenv:load'
# invoke :'rvm:use[[email protected]]'
end
注: rvmを使用している場合は、ルビーバージョンを角かっこで囲んでください。 インストールしたルビーのバージョンを使用して見つけることができます ruby -v
タスク:setupで、minaはdeploy_toからのパスを使用していくつかのフォルダーとファイルを作成し、そのフォルダーとファイルへのアクセス許可を変更します。
最初は、デフォルトのフォルダ構造を使用すると非常に便利です。
ファイルの最後に、タスク:deployがあります。 mina deployを使用すると、そこに書き込まれたすべての呼び出しが実行されます。 デフォルトでは、minaはリポジトリのクローンを作成し、shared_pathsをデプロイし、バンドルインストールを実行して、必要なすべてのgemをサーバーに取得し、データベースを移行し、アセットをプリコンパイルします。
<pre>
task :deploy => :environment do
deploy do
invoke :'git:clone'
invoke :'deploy:link_shared_paths'
invoke :'bundle:install'
<span class="highlight">
#invoke :'rails:db_migrate'
#invoke :'rails:assets_precompile'
</span>
to :launch do
queue "touch #{deploy_to}/tmp/restart.txt"
end
end
end
</pre>
MySQLを使用している場合は、コメントを解除する必要があります #invoke :'rails:db_migrate'
. MySQLの詳細については、このチュートリアルを参照するか、より具体的なここを検索してください。
ステップ3:セットアップとデプロイ
deploy.rbファイルで構成されたフォルダー構造を作成するには、次のコマンドを実行します。
mina setup --verbose
詳細コマンドを使用すると、このフェーズで何が起こっているかを確認できます。ここで問題が発生した場合は、どのコマンドが失敗したかを正確に確認できます。
このステップには3秒以上かかることはありません。
アプリケーションをデプロイするには、
mina deploy --trace
トレースコマンドは、エラーが発生したときにバックトレースを表示します。
オプションのステップ4:例
Railsアプリケーションを作成します。
rails new mynewapp
ディレクトリを変更し、Gemfileにminaを追加します。
cd mynewapp && nano Gemfile
deploy.rbを作成する前に、以下を使用してRailsアプリケーションをGithubに追加します。
<pre>
git init
git remote add origin [email protected]:username/mynewapp.git
git add .
git commit -a -m 'start a new rails application'
git push origin master
</pre>
必要なコンテンツでdeploy.rbを作成します。
nano config/deploy.rb
これが私のdeploy.rbがこのプロジェクトを探す方法です:
<pre>
require 'mina/bundler'
require 'mina/rails'
require 'mina/git'
require 'mina/rbenv'
set :rails_env, 'production'
set :domain, 'ip_adress'
set :deploy_to, "/home/username/app/#{rails_env}"
set :app_path, "#{deploy_to}/#{current_path}"
set :repository, 'https://github.com/username/mynewapp.git'
set :branch, 'master'
task :environment do
invoke :'rbenv:load'
end
task deploy: :environment do
deploy do
invoke :'git:clone'
invoke :'bundle:install'
end
end
</pre>
注:sshの代わりにhttpsを使用しています。 また、これは非常に単純なdeploy.rbファイルです。タスクを自由に追加してください。
走る mina setup
すべてのフォルダを作成してから、 mina deploy
railsアプリケーションをデプロイします。
VPSにログインし、次のフォルダを確認すると、結果を確認できます。/home/username/app/production/current
.
Railsアプリケーションをテストするには、 bundle exec rails server
このフォルダでブラウザを開き、に移動します ip_adress:3000
* WEBrickは、Rubyで記述された単純なHTTPサーバーです。 本番環境でWEBrickを使用することはお勧めしません。