部署

当您的应用程序准备好部署时,您应该做几件事。

移动文件

您可以将您的存储库克隆到您的生产服务器上,然后检出您想要运行的提交/标签。然后,运行 composer install。虽然这需要您对 git 有一定的了解以及对 gitcomposer 的现有安装,但此过程将处理库依赖项以及文件和文件夹权限。

请注意,当通过 FTP 部署时,您将不得不修复文件和文件夹权限。

您还可以使用此部署技术来设置暂存或演示服务器(预生产),并使其与您的本地环境保持同步。

调整配置

您可能需要对应用程序的配置进行一些调整以适应生产环境。debug 的值非常重要。将 debug 设置为 false 将禁用许多不应该暴露给互联网的开发功能。禁用 debug 会更改以下功能

  • 使用 pr()debug()dd() 创建的调试消息将被禁用。

  • 核心 CakePHP 缓存的持续时间默认为 365 天,而不是开发环境中的 10 秒。

  • 错误视图信息量较少,并且显示通用错误页面而不是带有堆栈跟踪的详细错误消息。

  • PHP 警告和错误不会显示。

除了以上内容之外,许多插件和应用程序扩展使用 debug 来修改其行为。

您可以针对环境变量检查以动态设置不同环境之间的调试级别。这将避免部署调试 true 的应用程序,并让您无需在每次部署到生产环境之前更改调试级别。

例如,您可以在 Apache 配置中设置环境变量

SetEnv CAKEPHP_DEBUG 1

然后,您可以在 **app_local.php** 中动态设置调试级别

$debug = (bool)getenv('CAKEPHP_DEBUG');

return [
    'debug' => $debug,
    .....
];

建议您将所有应用程序环境共享的配置放到 **config/app.php** 中。对于不同环境之间不同的配置,可以使用 **config/app_local.php** 或环境变量。

检查您的安全

如果您要将您的应用程序发布到公共网络,那么最好确保它没有明显的漏洞

  • 确保您正在使用 跨站点请求伪造 (CSRF) 中间件 组件或中间件。

  • 您可能想要启用 FormProtection 组件。它可以帮助防止几种类型的表单篡改,并降低大规模赋值问题的可能性。

  • 确保您的模型启用了正确的 验证 规则。

  • 检查只有您的 webroot 目录是公开可见的,并且您的机密信息(例如您的应用程序盐以及任何安全密钥)是私有的且唯一的。

设置文档根目录

在您的应用程序上正确设置文档根目录是确保代码安全和应用程序更安全的重要步骤。CakePHP 应用程序的文档根目录应设置为应用程序的 webroot。这使得应用程序和配置文件通过 URL 不可访问。不同 Web 服务器设置文档根目录的方式不同。请参阅 URL 重写 文档以获取特定于 Web 服务器的信息。

在所有情况下,您都希望将虚拟主机/域的文档设置为 webroot/。这消除了执行 webroot 目录之外文件的可能性。

提高您的应用程序的性能

类加载可能占据应用程序处理时间的很大一部分。为了避免此问题,建议您在应用程序部署后在生产服务器上运行此命令

php composer.phar dumpautoload -o

由于通过 Dispatcher 处理静态资产(如图像、JavaScript 和 CSS 文件)效率极低,因此强烈建议您为生产环境创建它们。这可以通过使用 plugin 命令来完成

bin/cake plugin assets symlink

上面的命令将把所有加载的插件的 webroot 目录符号链接到应用程序 webroot 目录中的适当路径。

如果您的文件系统不允许创建符号链接,则目录将被复制而不是被符号链接。您也可以使用以下命令显式复制目录

bin/cake plugin assets copy

CakePHP 在内部使用 assert() 来提供运行时类型检查,并在开发过程中提供更好的错误消息。您可以通过更新您的 php.ini 来包含以下内容,使 PHP 跳过这些断言

; Turn off assert() code generation.
zend.assertions = -1

跳过 assert() 的代码生成将产生更快的运行时性能,并且建议用于具有良好测试覆盖率或使用静态分析器的应用程序。

部署更新

在每次部署中,您可能需要在 Web 服务器上协调一些任务。一些典型的任务是

  1. 使用 composer install 安装依赖项。在进行部署时避免使用 composer update,因为您可能会获得意外版本的包。

  2. 使用 Migrations 插件或其他工具运行数据库 迁移

  3. 使用 bin/cake schema_cache clear 清除模型模式缓存。有关此命令的更多信息,请参阅 模式缓存工具