1

我正准备部署到真正的生产环境。当我说真的时,我的意思是我当前的生产环境现在将进行暂存,因为服务器上还有其他垃圾,我正在为我的生产机器创建一个更大的新切片。

capistrano-ext gem 使得分离部署配方变得非常容易。但是,我遇到的一个问题是将我的代码从一个切片转移到另一个切片。我在我的暂存切片上设置了一个 git repo,我将用于生产。流程将是:

本地开发 本地测试 从本地推送到舞台 舞台测试 从舞台推送到生产 ...

因此,我显然需要一种方法来在登台和生产之间建立安全连接。部署到生产环境时,我收到“权限被拒绝(公钥)”。错误,因为这没有设置。我怎样才能建立这种连接?我是否需要在我的生产服务器上生成密钥并将公众放在我的登台上?我如何知道我的生产服务器上的哪个用户正在尝试连接到我的登台服务器?

4

4 回答 4

2

Branches 和capistrano multistage是您的朋友。

要解决生产无法访问 git repo 的问题,请尝试……</p>

set :deploy_via, :copy

...这通过在本地检查并推动 tar 球来部署。

于 2009-10-12T22:33:49.687 回答
1

我发现在使用 Capistrano 时,分支或版本标记对于区分暂存与生产效果更好。

例如,为您的应用程序设置一个“暂存”和“生产”分支,并使用您的源代码控制工具来管理从一个迁移到另一个的更改。在部署期间,只需像往常一样部署,但使用特定分支而不是主分支。

没有必要直接从登台升级到生产,事实上,这可能被认为是一个坏主意,因为任何可以访问登台机器的人都可能可以访问生产服务器。在大多数环境中,暂存服务器的处理方式比生产站点更随意,因此安全配置文件通常完全不同。

于 2009-10-12T21:58:52.537 回答
1

我是否需要在我的生产服务器上生成密钥并将公众放在我的登台上?

是的。

我如何知道我的生产服务器上的哪个用户正在尝试连接到我的登台服务器?

生产用户将是您连接的任何用户(请参阅:用户)。staginguser 将来自 git url(参见 :repository)。

当你使用

set :deploy_via, :remote_cache

(这是默认设置),实际上发生了两个 ssh 连接。第一个是从本地机器到生产,它使用配方中配置的“用户”。

set :user, 'www-data'

第二个 ssh 连接是由该用户在生产中连接到您的 git 源的。因此,如果 git origin 处于暂存状态,则生产用户正在尝试连接回暂存以从 git 中提取代码。

set :repository, "staginguser@staging.com:project.git"

试试这个:作为用户 ssh 到生产环境。然后手动运行失败的命令。您会看到“权限被拒绝”,并且可能会提示输入密码。将登台服务器用户的公钥添加到生产盒中,事情应该会更好。

于 2009-11-04T20:59:26.030 回答
0

还有:

set :gateway, 'staging server ip'

这应该允许您通过隧道一直到您的防火墙生产箱。但是,如果您从 staging 进行部署,则需要在 staging box 上设置密钥(如果您打算通过这种方式进行部署)。

附带说明一下,能够在您的家庭盒子中完成整个过程很重要,舞台真的不需要拥有 capistrano gem,希望您可以完成整个过程而无需实际登录服务器。这包括登录到您的登台服务器。:)

如果两者之间存在数据推送问题,则可以轻松地将其添加到生产配置中,以便它自动从暂存和 rsync 中获取数据。

于 2009-11-05T17:43:08.977 回答