Composer是PHP应用程序的事实依赖管理器,最初在大约8年前于2012年3月发布。

在PHP中使用Composer可用于提高代码的可重用性,并使您的项目能够轻松地集成来自主要PHP Composer仓库Packagist的维护的PHP库。今天,我们将重点介绍一些部署最佳实践。

composer会变慢

这篇文章将重点介绍如何使Composer更快,以及在每次部署应用程序时无需重新安装Composer就可以安装软件包。

Magento是需要大量内存的Composer项目的一个示例。您能想象如果需要为每个部署进行composer安装时需要多少内存?Composer可能会因“内存不足”错误而失败,此错误将在此Stack Overflow帖子中进行介绍

尽管将软件包添加到项目很容易,但出于以下原因,在Amezmo,我们采用保守的方法添加新的项目依赖项。

  • 减慢初始 composer install
  • 每个composer软件包都会增加出现新安全问题的机会

最佳实践

这是不言而喻的。审核我们的composer.json文件,当然删除所有不需要的程序包引用。

第二个,这就是我发表这篇文章的原因,是要确保您使用以下标志运行composer。

composer
    --no-ansi \
    --no-interaction \
    --optimize-autoloader \
    --no-progress \
    --no-dev \
    --profile \
    install

该命令记录在Amezmo的有关使用部署钩子安装composer软件包的文档中。让我们一一浏览这些标志

--no-ansi

该标志禁用ANSI输出,这意味着将禁用彩色输出。彩色输出以令人愉悦的绿色和红色字体颜色和背景色为准。当我们手动运行composer时,这非常有用,但是对于自动部署,我们不想使日志文件中出现奇怪的字符。

--no-interaction

再次,在自动化部署的上下文中,我们不希望部署停止等待输入。此标志可防止composer要求用户输入。

--optimize-autoloader

此标志告诉Composer 自动生成自动加载器代码。当您的入口点执行require 'vendor/autoload.php';时,将会调用自动加载器

--no-progress

由于进度报告使用特殊的ANSI终端代码,因此我们不希望报告进度,因为它会使日志文件混乱。在进行非交互式部署和作曲家安装时,这是完全不必要的。

--no-dev

这一点至关重要。我们从不希望将开发包安装到生产服务器上。诸如phpunit之类的东西和其他不应让其投入生产环境的软件包都被视为“ dev”软件包。它们在composer.json文件中的“ require-dev”属性下。

--profile

这个是可选的,但是我总是喜欢包含它,因为它显示了Composer用于安装单个依赖项的内存量。

如何在部署时缓存Composer程序包

现在,我们已经定义了生产级composer install命令,下面让我们简单地介绍一下在部署时使Composer更快的方法。

第1步。

在完全不在您的Webroot之外的某个地方创建一个全局Composer vendor目录,当然该目录不能公开访问

注意:Amezmo使用如下所示的根目录布局,因此我们将在下面的bash命令中使用它。当然,您可以用自己的目录替换这些目录,并且可以实现所需的结果。

/webroot
|----logs
|----vendor
|----storage
|----current -> /webroot/release/${TIMESTAMP}.${COMMIT_ID}
|----release
|-------${TIMESTAMP}.${COMMIT_ID}
|-------${TIMESTAMP}.${COMMIT_ID

/ webroot / vendor是我们的全局软件包目录,将从中为每个发行版创建链接。

运行以下命令以创建vendor从发行目录到全局vendor目录的链接目录。每次部署时都必须执行此操作,并且在从发行目录运行composer安装之前。

ln -sT /webroot/vendor webroot/release/${TIMESTAMP}.${COMMIT_ID}/vendor

请注意,composer install从发行版目录运行之前,运行上述命令至关重要。以下是步骤:

  • 应该创建发布目录
  • 运行Git获取源代码
  • 执行以上命令,
  • 最后运行composer install

按照上述顺序完成所有操作后,您的软件包将被“缓存”到/ webroot / vendor目录中,并且您无需在每次部署应用程序时重新安装软件包。

结论

  • 定义了一个Composer命令,该命令消除了所有不必要的功能。
  • 重点介绍了在部署时缓存Composer软件包的最佳实践部署模式

Amezmo的使命是消除安全的PHP托管和部署过程中的麻烦,并为像我这样的PHP开发人员提供最佳的平台。如果您喜欢这篇文章,请通过与我们托管代码来支持平台。

via https://www.amezmo.com/blog/php-deployment-best-practices-when-using-composer/

使用Composer时的PHP部署最佳实践
标签: