Symfony Apache 和 Deployer - 将资产位置从 Symfony Web 目录下修改到另一个文件系统位置
Symfony Apache and Deployer - modify assets location from under Symfony Web directory to another filesystem location
Symfony 2.8
阿帕奇 2.4
Apache 用户:www-data
目前上传图片的assets目录在Symfony web目录下:/var/www/html/project/current/web/assets/items
.
当我使用 Deployer 部署新版本时,我必须将所有图像移动到新的资产目录中。虽然目前不是什么大任务(有 16,000 多张图片),但随着我们的成长,这可能会导致问题。此外,由于路径中的 current
目录是一个符号 link,似乎 apache/php 将旧位置保留在内存中并从中提供数据,这意味着对这些图像的请求会产生 404 错误。
将此目录移动到另一个位置(甚至另一个硬盘驱动器)将解决这些烦恼。如果不首先咨询一些最佳实践,我觉得我没有安全地执行此操作的经验。我确定我可以弄清楚如何在 apache 配置中添加 Alias
,但我担心安全性以及 Symfony 的运行方式。
那么我的问题是资产目录应该在文件系统中放在哪里,有什么权限,应该应用什么 Apache 配置,这样 Symfony 才不会受到负面影响?
谢谢
您可以将您的资产目录添加到 "shared_dirs" 变量,该变量用于在版本之间保留您的 shared/common 文件和目录。在这种情况下,您的资产目录将存储在 /var/www/html/project/shared 文件夹中,并链接到每个版本。
set('shared_dirs', [
'app/sessions',
'app/logs',
'web/assets/items',
]);
关于 Apache 符号链接问题,请尝试在部署过程中重新加载 Apache 服务器的配置。
// Reload Apache configuration to avoid symlink issue
task('apache:reload', function () {
run('sudo /etc/init.d/apache2 reload');
})->desc('Reload Apache configuration');
after('cleanup', 'apache:reload');
Symfony 2.8
阿帕奇 2.4
Apache 用户:www-data
目前上传图片的assets目录在Symfony web目录下:/var/www/html/project/current/web/assets/items
.
当我使用 Deployer 部署新版本时,我必须将所有图像移动到新的资产目录中。虽然目前不是什么大任务(有 16,000 多张图片),但随着我们的成长,这可能会导致问题。此外,由于路径中的 current
目录是一个符号 link,似乎 apache/php 将旧位置保留在内存中并从中提供数据,这意味着对这些图像的请求会产生 404 错误。
将此目录移动到另一个位置(甚至另一个硬盘驱动器)将解决这些烦恼。如果不首先咨询一些最佳实践,我觉得我没有安全地执行此操作的经验。我确定我可以弄清楚如何在 apache 配置中添加 Alias
,但我担心安全性以及 Symfony 的运行方式。
那么我的问题是资产目录应该在文件系统中放在哪里,有什么权限,应该应用什么 Apache 配置,这样 Symfony 才不会受到负面影响?
谢谢
您可以将您的资产目录添加到 "shared_dirs" 变量,该变量用于在版本之间保留您的 shared/common 文件和目录。在这种情况下,您的资产目录将存储在 /var/www/html/project/shared 文件夹中,并链接到每个版本。
set('shared_dirs', [
'app/sessions',
'app/logs',
'web/assets/items',
]);
关于 Apache 符号链接问题,请尝试在部署过程中重新加载 Apache 服务器的配置。
// Reload Apache configuration to avoid symlink issue
task('apache:reload', function () {
run('sudo /etc/init.d/apache2 reload');
})->desc('Reload Apache configuration');
after('cleanup', 'apache:reload');