sourcebroker / deployer-extended-media
用于管理应用实例之间媒体同步的 Deployer 任务。
Requires
- deployer/deployer: ^7.0.0
- sourcebroker/deployer-instance: ^6.0.0 || dev-master
- sourcebroker/deployer-loader: ^4.0.0 || dev-master
README
它做了什么?
该软件包为 Deployer (deployer.org) 提供了额外的任务,用于在实例之间同步媒体。
这对我的用处是什么?
最有用的是 dep media:pull [source] 任务,它允许您使用 rsync 从源实例拉取媒体到当前实例。
还有两个额外的有用任务,允许在远程实例之间复制或创建符号链接。例如,您可以使用 dep media:link [source] --options=target:[target] 为每个单独的文件创建符号链接(相当于 cp -Rs)。
安装
使用 composer 安装软件包
composer require sourcebroker/deployer-extended-media
如果您使用 deployer 作为 composer 软件包,只需在您的 deploy.php 中添加以下行
new \SourceBroker\DeployerLoader\Load([['path' => 'vendor/sourcebroker/deployer-extended-media/deployer']]);
如果您使用 deployer 作为 phar,请在您的 deploy.php 中添加以下行
require_once(__DIR__ . '/vendor/sourcebroker/deployer-loader/autoload.php'); new \SourceBroker\DeployerLoader\Load([['path' => 'vendor/sourcebroker/deployer-extended-media/deployer']]);
重要提示!不要在您的 deploy.php 中放置require('/vendor/autoload.php'),因为您可能会遇到依赖问题。使用require_once(__DIR__ . '/vendor/sourcebroker/deployer-loader/autoload.php');代替,如建议。在 deploy.php 中设置您想要同步的文件夹
set('media_custom', [ 'filter' => [ '+ /public/', '+ /public/fileadmin/', '- /public/fileadmin/_processed_/*', '+ /public/fileadmin/**', '+ /public/uploads/', '+ /public/uploads/**', '- *' ] ]);运行任务
dep media:pull [source]
选项
-
exclude 默认值: null
包含要排除的模式数组的对象。
-
exclude-case-insensitive 默认值: null
包含要排除的模式数组的对象。由于 rsync 不支持不区分大小写的排除,因此数组中的每个值都设置为状态大写/小写。这意味着如果您有['*.mp4', '*.zip'],则最终排除将是--exclude '*.[mM][pP]4' --exclude '*.[zZ][iI][pP]'
-
exclude-file 默认值: null
包含排除模式的文件的绝对路径字符串。
-
include 默认值: null
包含要包含的模式数组的对象。
-
include-file 默认值: null
包含包含模式的文件的绝对路径字符串。
-
filter 默认值: null
包含 rsync 过滤规则的数组。
-
filter-file 默认值: null
包含合并文件文件名的字符串。
-
filter-perdir 默认值: null
包含要扫描和合并的每个目录的合并文件文件名的字符串。
-
flags 默认值: rz
添加到 rsync 命令的标志。
-
options 默认值: ['copy-links', 'keep-dirlinks', 'safe-links']
要添加到 rsync 命令的选项数组。
-
timeout 默认值: 0
rsync 任务的超时时间。零表示没有超时。
任务的默认配置
set('media_default',
[
'exclude' => [],
'exclude-case-insensitive' => [
'*.mp4',
'*.zip',
'*.pdf',
'*.exe',
'*.doc',
'*.docx',
'*.pptx',
'*.ppt',
'*.xls',
'*.xlsx',
'*.xlsm',
'*.tiff',
'*.tif',
'*.potx',
'*.mpg',
'*.mp3',
'*.avi',
'*.wmv',
'*.flv',
'*.eps',
'*.ai',
'*.mov',
],
'exclude-file' => false,
'include' => [],
'include-file' => false,
'filter' => [],
'filter-file' => false,
'filter-perdir' => false,
'flags' => 'rz',
'options' => ['copy-links', 'keep-dirlinks', 'safe-links'],
'timeout' => 0,
]);
在您的 deploy.php 中,您应该设置 media_custom,它将与 media_default 配置合并。有关如何设置 media_custom 配置的说明,请参阅“管理媒体配置”部分。
任务
media:copy
在实例之间(远程)复制媒体。
dep media:copy [source] --options=target:[target]
命令在目标远程实例上执行。如果实例放置在同一远程服务器上,则调用本地文件的 rsync。如果实例放置在不同的远程服务器上,则在目标实例上执行 media:pull [source]。
将内容复制到在instance_live_name(默认为live)中定义的实例是特殊情况。如果您复制到最高实例,则默认情况下您将两次被询问是否真的想这样做。您可以通过将media_allow_copy_live_force设置为true来禁用询问。您还可以通过将media_allow_copy_live设置为false来禁止复制到直播实例。
示例:dep media:copy live --options=target:beta
media:link
仅适用于放置在同一台机器上的远程实例。该命令在目标实例上创建指向源机器上文件的符号链接。
media:link [source] --options=target:[target]
对于源实例中不存在于目标实例的每个文件:1. 递归创建目录树。2. 从源实例创建指向文件的符号链接。
因此,目标实例上的每个文件都可以修改/删除,而不会影响源实例。
链接到在instance_live_name(默认为live)中定义的实例是特殊情况。如果您链接到最高实例,则默认情况下您将两次被询问是否真的想这样做。您可以通过将media_allow_link_live_force设置为true来禁用询问。您还可以通过将media_allow_link_live设置为false来禁止链接到直播实例。
示例:dep media:link live --options=target:beta
media:pull
使用rsync和媒体配置中的选项从源实例拉取媒体到当前实例。
dep media:pull [source]
示例:dep media:pull live
拉取到在instance_live_name(默认为live)中定义的实例是特殊情况。如果您拉取到最高实例,则默认情况下您将两次被询问是否真的想这样做。您可以通过将media_allow_pull_live_force设置为true来禁用询问。您还可以通过将media_allow_pull_live设置为false来禁止拉取到直播实例。
media:push
使用rsync和媒体配置中的选项从当前实例拉取媒体到目标实例。
dep media:push [target]
推送到在instance_live_name(默认为live)中定义的实例是特殊情况。如果您推送到最高实例,则默认情况下您将两次被询问是否真的想这样做。您可以通过将media_allow_push_live_force设置为true来禁用询问。您还可以通过将media_allow_push_live设置为false来禁止推送到直播实例。
示例:dep media:push beta
管理媒体配置
- 最终的媒体配置是合并三个数组的结果
media_default(来自deployer-extended-media)media(来自deployer-extended-typo3)media_custom(来自用户的deploy.php文件)
合并函数具有一些特殊功能
- 在合并过程中使用特殊的
__UNSET表示法来从数组中删除特定的项。 - 空数组将覆盖我们合并到的数组。
配置最终调整示例
示例 1:删除特定选项
set('media_custom', [ 'options' => [ '__UNSET' => ['safe-links'], ], ]);
在上面的示例中,如果media_default数组中的options包含['copy-links', 'safe-links'],则在与media_custom合并后,options将仅包含['copy-links']。
示例 2:从排除列表中删除特定文件类型
set('media_custom', [ 'exclude-case-insensitive' => [ '__UNSET' => ['*.pdf', '*.exe'], ], ]);
在这个示例中,从大小写不敏感的排除文件类型列表中删除了*.pdf和*.exe。
示例 3:完全清空数组并添加一个新选项
set('media_custom', [ 'exclude-case-insensitive' => [ '__UNSET' => get('media_default')['exclude-case-insensitive'], '*.mp4' ], ]);
在这个示例中,使用__UNSET完全清空了media_default设置中的exclude数组,并仅添加了*.mp4。
如果您只想清除,只需设置空数组
set('media_custom', [ 'exclude-case-insensitive' => [] ]);
示例 4:扩展现有的过滤器配置
set('media_custom', [ 'filter' => [ '__UNSET' => ['- *'], '+ /' . get('web_path') . 'public/pim/', '+ /' . get('web_path') . 'public/pim/**', '- *', ], ]);
在这个示例中,使用__UNSET从过滤器数组中删除了- *选项,然后添加了用于同步的public/pim文件夹。最后,将- *放在过滤器数组的末尾。
变更日志
见https://github.com/sourcebroker/deployer-extended-media/blob/master/CHANGELOG.rst