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