ぬにょす(挨拶)。
自動デプロイツールのCapistranoを使って、ステージング環境にデプロイしてみます。
前提条件
- デプロイ元
- Railsアプリケーションを構築済み。
- デプロイ先へのSSH疎通確認済み。
- GitHubへのSSH疎通確認済み。
- GitHubにRailsアプリケーションのリポジトリを作成済み。
- デプロイ先
- Railsアプリケーションの稼働環境(Ruby, MariaDB, Nginx等)を構築済み。
- Railsアプリケーションが使用するデータベースを作成済み。
- GitHubへのSSH疎通確認済み。
Capistranoのインストール
RailsプロジェクトのGemfileを編集します。
group :development do
# 追記ここから
gem "capistrano", "~> 3.11"
gem "capistrano-rails", "~> 1.4"
gem 'capistrano-rbenv', '~> 2.1'
gem 'capistrano-bundler', '~> 1.5'
gem "capistrano3-puma"
gem 'ed25519'
gem 'bcrypt_pbkdf'
# 追記ここまで
end
Code language: Ruby (ruby)
Bundlerでインストールします。
Code language: plaintext (plaintext)$ bundle install
基本的な設定ファイルを生成します。
Code language: plaintext (plaintext)$ bundle exec cap install $ echo "require 'capistrano/rails'" >> Capfile $ echo "require 'capistrano/rbenv'" >> Capfile $ echo "require 'capistrano/bundler'" >> Capfile $ echo "require 'capistrano/puma'" >> Capfile $ echo "install_plugin Capistrano::Puma" >> Capfile
deploy.rbの編集
config/deploy.rbを編集します。
set :application, "my_app_name"
set :repo_url, "git@example.com:me/my_app_name.git"
set :deploy_to, "/var/www/my_app_name"
set :format, :airbrusshset :log_level, :debug
set :format_options, truncate: false
append :linked_files, 'config/database.yml', 'config/master.key'
append :linked_dirs, 'log', 'tmp/pids', 'tmp/cache', 'tmp/sockets', 'vendor/bundle', '.bundle', 'public/system', 'public/uploads'
set :rbenv_type, :user
set :rbenv_ruby, '2.6.2'
namespace :deploy do
desc "Make sure local git is in sync with remote."
task :confirm do
on roles(:app) do
puts "This stage is '#{fetch(:stage)}'. Deploying branch is '#{fetch(:branch)}'."
puts 'Are you sure? [y/n]'
ask :answer, 'n'
if fetch(:answer) != 'y'
puts 'deploy stopped'
exit
end
end
end
desc "Push shared files"
task :init_files do
on roles(:app) do
fetch(:linked_files).each do |file|
unless test "[ -f #{shared_path.join file} ]"
upload! file, "#{shared_path.join file}"
end
end
end
end
desc "Initial Deploy"
task :initial do
on roles(:app) do
before 'deploy:check:linked_files', :init_files
invoke 'deploy'
end
end
before :starting, :confirm
end
Code language: Ruby (ruby)
デプロイ先への接続情報の設定
config/deploy 配下の staging.rb を編集します。
server "example.com", user: "deploy", roles: %w{app db web}
set :ssh_options, keys: %w(/home/deploy/.ssh/id_rsa)
Code language: Ruby (ruby)
その他のファイルの準備
config/environments/production.rb を staging.rb としてコピーします。
Code language: plaintext (plaintext)$ cp -a config/environments/production.rb config/environments/staging.rb
config/database.yml にステージング環境のDB情報を追加します。
staging:
<<: *default
database: my_app_name
Code language: YAML (yaml)
デプロイの実行
ファイル一式をGitHubにプッシュしてから実行します。
Code language: plaintext (plaintext)$ bundle exec cap staging deploy:initial
2回目以降は deploy だけで良い。
Code language: plaintext (plaintext)$ bundle exec cap staging deploy
staging を production に変えれば本番環境へのデプロイになるはずです。
コメント