10

Capistrano を使用して DigitalOcean サーバーにアプリケーションをデプロイしようとしています。

Capistrano デプロイを使用して DigitalOcean で RoR サーバーを構成したのはこれが初めてではないため、混乱しています。ワークフローは何も変更していません。

これが私のカピストラーノ構成ファイルです:

require 'bundler/capistrano'
require 'rvm/capistrano'

set :application, "foobar"
set :repository,  "git@bitbucket.org:sergiotapia/foobar.git"
set :ping_url, "http://192.168.1.1/"
set :scm, :git
set :scm_verbose, true
default_run_options[:pty] = true

set :user, "sergiotapia" # The user on the VPS server.
set :password, "hunter2"
set :use_sudo, false
set :deploy_to, "/home/sergiotapia/www/#{application}"
set :deploy_via, :remote_cache
set :keep_releases, 1
set :rails_env, "production"
set :migrate_target, :latest

role :web, "192.168.1.1"
role :app, "192.168.1.1"

namespace :deploy do
  task :start do ; end
  task :stop do ; end
  task :restart, roles: :app, except: { no_release: true } do
    run "sudo touch #{File.join(current_path,'tmp','restart.txt')}"
  end
end

# Add this to add the `deploy:ping` task:
namespace :deploy do
  task :ping do
    system "curl --silent #{fetch(:ping_url)}"
  end
end

namespace :gems do
  task :bundle, :roles => :app do
    run "cd #{release_path} && bundle install --without development && rake db:migrate RAILS_ENV=production"
  end
end

after "deploy:update_code", "gems:bundle"

# Add this to automatically ping the server after a restart:
after "deploy:restart", "deploy:ping"

a を実行するcap deploy:setupと、cap deploy:checkすべてが青信号 (正常に動作) に戻ります。

実際のcap deployコマンドでは失敗します。

** [192.168.1.1 :: out] Enter passphrase for key '/home/sergiotapia/.ssh/id_rsa':
Password: 
** [192.168.1.1 :: out]
** [192.168.1.1 :: out] Permission denied (publickey).
** [192.168.1.1 :: out]
** [192.168.1.1 :: out] fatal: Could not read from remote repository.
** [192.168.1.1 :: out]
** [192.168.1.1 :: out]
** [192.168.1.1 :: out] Please make sure you have the correct access rights
** [192.168.1.1 :: out]
** [192.168.1.1 :: out] and the repository exists.
** [192.168.1.1 :: out]

既にid_rsa.pubファイルを BitBucket に追加しており、ssh-add -lコマンドを使用して SSH エージェントに追加されていることも確認しました。

リモート サーバーから SSH をテストしても問題なく動作します。

sergiotapia@tappia:~/www$ ssh -T git@bitbucket.org
logged in as sergiotapia.

You can use git or hg to connect to Bitbucket. Shell access is disabled.

では、なぜ BitBucket のリポジトリへのアクセスが拒否されるのでしょうか?

Capistrano は 以外のユーザーとして実行されていますsergiotapiaか? それが原因だろうか。

4

2 に答える 2

9

必ず ssh キーを認証エージェントに追加してください。

ssh-add ~/.ssh/id_rsa

deploy.rbで確認します

ssh_options[:forward_agent] = true

編集: 再起動時に ssh-add 構成が失われている場合は、次の手順を実行する必要があります。

macOS Sierra 10.12.2 の時点で、Apple は UseKeychain と呼ばれる ssh_config オプションを追加しました。これにより、問題の「適切な」解決が可能になります。~/.ssh/config以下をファイルに追加します。

Host *
   AddKeysToAgent yes
   UseKeychain yes 
于 2015-11-11T12:23:11.147 に答える
3
  1. :app サーバーで SSH エージェントをセットアップできます。
  2. :app サーバーと bitbucket の間でパスフレーズを必要としないキーをセットアップします。
  3. deploy_via を :deploy_via, :copy に変更します (デプロイされたサーバーがファイルをチェックアウトする必要はありませんが、遅くなる可能性があります)。
于 2013-10-15T16:16:48.550 に答える