【问题标题】:Capistrano deploy from local machineCapistrano 从本地机器部署
【发布时间】:2013-03-31 05:03:18
【问题描述】:

我正在尝试创建一个新用户来将我的应用程序从我的本地计算机部署到我的外部服务器。

我已经使用 root 运行它,但知道使用 root 不安全,因此我想创建一个名为“部署者”的用户。我已将此用户添加到我的外部服务器并将我的本地 is_rsa.pub 密钥复制到服务器上的 /.ssh/authorized_keys,但是当我运行 cap development deploy 时,我不断收到以下错误:

failed: "sh -c 'if [ -d /var/www/vhosts/xyz.co.uk/shared/cached-copy ]; then cd
  /var/www/vhosts/xyz.co.uk/shared/cached-copy && git fetch -q origin && git fetch --
tags -q origin && git reset -q --hard 2b738f4ca8008dcf9e84c4be5d63d906a7bfd760 && git clean 
-q -d -x -f; else git clone -q git@github.com:xyz/xyz.co.uk.git 
/var/www/vhosts/xyz.co.uk/shared/cached-copy && cd /var/www/vhosts/xyz.co.uk/shared/cached-
copy && git checkout -q -b deploy 2b738f4ca8008dcf9e84c4be5d63d906a7bfd760; fi'" on 
x.xx.xx.xxx

如果我在外部服务器上运行 ssh -T git@github.com 它会说:

Hi username! You've successfully authenticated, but GitHub does not provide shell access.

这个用户名不是部署者,我假设它是 github 帐户的用户名。

任何想法我需要做什么?我是否也需要在本地机器上创建部署者用户?

这是我的 deploy.rb 文件:

set :stage_dir, 'app/config/deploy' # needed for Symfony2 only
set :stages, %w(production staging development)
require 'capistrano/ext/multistage'

set :application,           "xyz.co.uk"
set :user,                  "deployer"  # The server's user for deploys

set :normalize_asset_timestamps, false

set :repository,            "git@github.xyz/xyz.co.uk.git"
set :scm,                   :git
set :keep_releases,         3
after "deploy:update",      "deploy:cleanup"
set :use_sudo,              false
set :web_path,              "web"
set :shared_files,          ["app/config/parameters.yml"]
set :shared_children,       [app_path + "/logs", web_path + "/uploads"]
set :use_composer,          true
set :update_vendors,        true
set :dump_assetic_assets,   true
set :deploy_via,            :remote_cache

#logger.level = Logger::MAX_LEVEL

after "deploy:update_code" do
  capifony_pretty_print "--> Ensuring cache directory permissions"
  run "setfacl -R -m u:www-data:rwX -m u:`whoami`:rwX #{latest_release}/#{cache_path}"
  run "setfacl -dR -m u:www-data:rwX -m u:`whoami`:rwX #{latest_release}/#{cache_path}"
  capifony_puts_ok
end

开发.rb 文件:

server 'x.xx.xx.xxx', :app, :web, :db, :primary => true
ssh_options[:port] = 1234
ssh_options[:forward_agent] = true
default_run_options[:pty] = true
set :deploy_to, "/var/www/vhosts/xyz.co.uk"
set :symfony_env_prod, "dev"
set :branch, "develop"

# Need to clear *_dev controllers
set :clear_controllers,     false

谢谢

【问题讨论】:

    标签: deployment github ssh capistrano ssh-keys


    【解决方案1】:

    您想让目标机器使用您的本地 SSH 凭据向 Github 进行身份验证。通过将以下两个条目放入您的 deploy.rb 来做到这一点

    ssh_options[:forward_agent] = true
    default_run_options[:pty] = true
    

    或者,另一种方法是转到您的 Github 存储库并将目标服务器的公共 SSH 密钥添加为 部署密钥

    https://github.com/your_github/your_repo/settings/keys
    

    这使目标服务器可以仅访问指定的存储库,而无需使用您的个人 SSH 密钥。

    【讨论】:

    • 我的 development.rb 文件中有这些内容,我已将其添加到我的原始问题中,但仍然无法正常工作。我对 set:user 指的是什么感到困惑。这是本地用户、服务器用户还是github用户?!
    • 没关系,我现在已经修好了。 “部署者”用户在服务器上没有写入权限。
    【解决方案2】:

    问题是因为“部署者”用户在服务器上没有写入权限。

    【讨论】:

      猜你喜欢
      • 2012-08-06
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-18
      • 1970-01-01
      相关资源
      最近更新 更多