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

2025-06-10

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

概述

Composer 是 PHP 应用程序事实上的依赖管理器,最初于 2012 年 3 月发布,距今已有 8 年。

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

Composer 可能会变慢

这篇文章将重点介绍如何使 Composer 运行得更快,并且无需在每次部署应用程序时安装新的 Composer 软件包。

Magento 是一个需要大量内存的 Composer 项目的例子。你能想象如果每次部署都需要安装 Composer,会需要多少内存吗?Composer 可能会因内存不足错误而失败,详情请见这篇Stack Overflow 文章

虽然将包添加到您的项目很容易,但在 Amezmo 我们采取保守的方式添加新的项目依赖项,原因如下。

  • 减慢初始 Composer 的安装速度
  • 每个 Composer 软件包都会增加出现新安全问题的可能性

最佳实践

这个很简单。检查一下我们的 composer.json 文件,当然,删除所有不需要的包引用。

第二个,也是我发表这篇文章的原因是为了确保您使用以下标志运行作曲家。

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

此命令记录在 Amezmo 关于使用部署钩子安装 Composer 软件包的文档中。让我们逐一介绍这些标志

--no-ansi

此标志禁用 ANSI 输出,这意味着将禁用彩色输出。彩色输出指的是使用绿色和红色字体以及令人赏心悦目的背景颜色。这对于手动运行 Composer 非常有用,但对于自动化部署,我们不希望日志文件中充斥着奇怪的字符。

--无交互

再次强调,在自动化部署中,我们不希望部署因等待用户输入而停滞。此标志可防止 Composer 请求用户输入。

--优化自动加载器

此标志指示 Composer自动执行生成的自动加载器代码。当您的入口点确实需要“vendor/autoload.php”时,就会调用自动加载器;

--无进展

由于进度报告使用特殊的终端 ANSI 代码,我们不想报告进度,因为这会使我们的日志文件变得混乱。在进行非交互式部署和 Composer 安装时,这完全没有必要。

--no-dev

这一点至关重要。我们永远不想把开发包安装到生产服务器上。像 phpunit 这样的包,以及其他不应该在生产环境中使用的包,都被视为“dev”包。它们在 composer.json 文件的“require-dev”属性下有一个特殊的条目。

- 轮廓

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

如何在部署时缓存 Composer 包

现在我们已经定义了生产级 composer install 命令,让我们通过一种简单的方法让 Composer 在部署时更快。

步骤 1.
在完全位于您的 webroot 之外的某个地方创建一个全局 Composer 供应商目录,当然该目录是不可公开访问的。

注意:Amezmo 使用如下所示的根目录布局,因此我们将在下面的 bash 命令中使用它。当然,您可以用自己的目录替换这些目录,这样也能达到预期的效果。

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

/webroot/vendor是我们全球范围的软件包目录,每个版本都会从中创建一个链接。

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

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

请注意,在从发布目录运行 composer install 之前,务必先运行上述命令。具体步骤如下:

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

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

结论

  • 定义了一个 Composer 命令来消除任何不必要的功能。
  • 强调了在部署时缓存 Composer 包的最佳实践部署模式

Amezmo 的使命是消除PHP安全托管和部署的障碍,并为像我这样的 PHP 开发者提供最佳平台。如果您喜欢这篇文章,请将您的代码托管在我们这里,以支持我们的平台。

鏂囩珷鏉ユ簮锛�https://dev.to/ryan1/php-deployment-best-practices-when-using-composer-92j
PREV
用于 Web 开发的 (Neo)vim
NEXT
使用 RxJS 和 <$> 片段在 React 中获取数据