【问题标题】:How to deploy with Composer and Git without downtime?如何在不停机的情况下使用 Composer 和 Git 进行部署?
【发布时间】:2015-02-23 08:24:27
【问题描述】:

对于我们的项目,我们使用 Git 来对代码进行版本控制,并使用 Composer 来处理依赖项。这工作得很好,但是对于更新或添加依赖项,我还没有找到一个好的工作流程。

假设,我们想要添加需要一些新依赖的特性。我们将在功能分支中实现和测试它。在这个分支中,我们将更新 composer.json 文件。完成该功能后,我们使用拉取请求将其合并,并将其与git pull 部署在服务器上。我们将执行composer install 在服务器上安装新的依赖项。此工作流程的问题:在 Git 和 Composer 更新之间的时间段内,系统可能由于缺少依赖项而损坏。

您将如何在没有停机和维护模式的工作流程中解决这个问题?

【问题讨论】:

    标签: git deployment workflow composer-php


    【解决方案1】:

    我想手动执行,一种解决方案是部署到服务器上的版本化文件夹,然后在composer install 完成后将该文件夹软链接到实际生产文件夹。这样,您的站点的停机时间基本上为零。例如,您的文件夹结构可能如下所示:

    ./
    ../
    app/
        /current --> app/versions/01
        /versions
            /01
    

    然后您将该网站的文档根目录指向app/current。那么部署过程可能是这样的(您需要更改路径以匹配您的情况):

    $ cp -r app/versions/01 app/versions/02  # make a new version
    $ cd app/versions/02
    $ git pull                               # update the new version
    $ composer install                       # update new version dependencies
    $ ln -sfn app/versions/02 app/current    # make new version live
    

    请注意,必须将 Web 服务器设置为遵循符号链接。之后,您的文件夹结构将如下所示:

    ./
    ../
    app/
        /current --> app/versions/02
        /versions
            /01
            /02
    

    作为此方法的一个好处:如果新版本出现问题,您可以在进行故障排除时将符号链接指向原始版本。

    如果你想自动化这个过程,还有一些部署工具可以为你处理这种事情,比如CapistranoMina

    【讨论】:

    • 这是一个非常聪明的想法,可以真正实现“接近零”的停机时间。我们甚至可以在更新符号链接之前测试新部署的版本。非常感谢。
    【解决方案2】:

    听起来您可能希望将continuous integrationbuild automation 集成到您的工作流程中。

    首先,请务必查看 PHP: The Right Way: http://www.phptherightway.com/#building_and_deploying_your_application 中的每个部分。

    您可能还想研究:

    【讨论】:

    • 他们如何处理此类更新?我可以考虑解决这种情况的唯一方法是使用 composer.json 更新来挑选提交并在合并功能分支之前运行安装。但是,当将依赖项更新到没有向后兼容性的新版本时,这可能仍然是一个问题。
    • 我相信这些工具的重点是自动化填补您上面提到的空白的过程。理想情况下,您将生产就绪提交推/拉到该环境,它应该自动进行测试并更新依赖关系。
    • 但是merge和composer更新之间还是有时间间隔的。据我了解,持续集成服务更多的是用于测试构建,而不是用于将它们部署到生产中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 1970-01-01
    • 2019-05-01
    • 2018-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多