sourcebroker / deployer-extended-media

用于管理应用实例之间媒体同步的 Deployer 任务。

12.0.1 2023-06-18 14:06 UTC

This package is auto-updated.

Last update: 2024-09-18 17:02:11 UTC


README

https://scrutinizer-ci.com/g/sourcebroker/deployer-extended-media/badges/quality-score.png?b=master http://img.shields.io/packagist/v/sourcebroker/deployer-extended-media.svg?style=flat https://img.shields.io/badge/license-MIT-blue.svg?style=flat

它做了什么?

该软件包为 Deployer (deployer.org) 提供了额外的任务,用于在实例之间同步媒体。

这对我的用处是什么?

最有用的是 dep media:pull [source] 任务,它允许您使用 rsync 从源实例拉取媒体到当前实例。

还有两个额外的有用任务,允许在远程实例之间复制或创建符号链接。例如,您可以使用 dep media:link [source] --options=target:[target] 为每个单独的文件创建符号链接(相当于 cp -Rs)。

安装

  1. 使用 composer 安装软件包

    composer require sourcebroker/deployer-extended-media
    
  2. 如果您使用 deployer 作为 composer 软件包,只需在您的 deploy.php 中添加以下行

    new \SourceBroker\DeployerLoader\Load([['path' => 'vendor/sourcebroker/deployer-extended-media/deployer']]);
    
  3. 如果您使用 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'); 代替,如建议。
  4. 在 deploy.php 中设置您想要同步的文件夹

    set('media_custom',
        [
         'filter' => [
             '+ /public/',
             '+ /public/fileadmin/',
             '- /public/fileadmin/_processed_/*',
             '+ /public/fileadmin/**',
             '+ /public/uploads/',
             '+ /public/uploads/**',
             '- *'
        ]
    ]);
    
  5. 运行任务

    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文件)

合并函数具有一些特殊功能

  1. 在合并过程中使用特殊的__UNSET表示法来从数组中删除特定的项。
  2. 空数组将覆盖我们合并到的数组。

配置最终调整示例

示例 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