【问题标题】:Deploying rails application to multiple environments将 Rails 应用程序部署到多个环境
【发布时间】:2009-10-12 20:36:04
【问题描述】:

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

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

本地开发 本地测试 从本地推送到舞台 舞台测试 从舞台推到制作 ...

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

【问题讨论】:

    标签: ruby-on-rails deployment capistrano production-environment


    【解决方案1】:

    分支机构和capistrano multistage 是你的朋友。

    要解决生产无法访问 git repo 的问题,请尝试...

    set :deploy_via, :copy
    

    ...这是通过在本地签出并推送 tar 球来部署的。

    【讨论】:

      【解决方案2】:

      我发现在使用 Capistrano 时,分支或版本标记在区分登台与生产方面效果更好。

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

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

      【讨论】:

      • 这些是一些优点,但即使我使用标签,我仍然需要将我的生产服务器连接到我的暂存服务器,因为我的 git 存储库托管在我的暂存服务器上。
      【解决方案3】:

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

      是的。

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

      生产用户将是您连接的任何用户(请参阅 :user)。 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 到生产环境。然后手动运行失败的命令。您会看到“权限被拒绝”,并且可能会提示输入密码。将登台服务器用户的公钥添加到生产盒中,事情应该会更好。

      【讨论】:

        【解决方案4】:

        还有:

        set :gateway, 'staging server ip'

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

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

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

        【讨论】:

        • 我可以在家里的盒子里做。问题是存储库位于与生产不同的服务器上。我通过为我的生产箱设置密钥来访问暂存箱上的 git 存储库来解决了这个问题。
        猜你喜欢
        • 1970-01-01
        • 2016-07-22
        • 2014-09-16
        • 1970-01-01
        • 2020-10-08
        • 1970-01-01
        • 1970-01-01
        • 2018-08-02
        • 1970-01-01
        相关资源
        最近更新 更多