digitalerase/deployer-extended-media

部署任务,用于管理应用实例间的媒体同步。

11.0.1.6 2023-04-12 09:29 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.org)提供了额外的任务,用于在实例之间同步媒体。

这对我有何用处?

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

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

安装

  1. 使用composer安装包

    composer require digitalerase/deployer-extended-media
    
  2. 如果您将部署器用作composer包,只需在您的deploy.php中添加以下行

    new \SourceBroker\DeployerLoader\Load([['path' => 'vendor/digitalerase/deployer-extended-media/deployer']]);
    
  3. 如果您将部署器用作phar,请在您的deploy.php中添加以下行

    require_once(__DIR__ . '/vendor/digitalerase/deployer-loader/autoload.php');
    new \SourceBroker\DeployerLoader\Load([['path' => 'vendor/digitalerase/deployer-extended-media/deployer']]);
    
    重要提示!不要在deploy.php中放置require('/vendor/autoload.php'),因为您可能会遇到依赖问题。请使用require_once(__DIR__ . '/vendor/digitalerase/deployer-loader/autoload.php');代替,如建议。
  4. 在deploy.php中设置您想要同步的文件夹

    set('media',
        [
         'filter' => [
             '+ /fileadmin/',
             '- /fileadmin/_processed_/*',
             '+ /fileadmin/**',
             '+ /uploads/',
             '+ /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
    包含要扫描并合并rsync列表中每个目录的文件的合并文件名称的字符串。
  • 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,
 ]);

在您的项目中,您应该设置"media",它将与"media_default"配置合并。

TYPO3 CMS(typo3.org)的示例配置

set('media',
    [
     'filter' => [
         '+ /fileadmin/',
         '- /fileadmin/_processed_/*',
         '+ /fileadmin/**',
         '+ /uploads/',
         '+ /uploads/**',
         '- *'
    ]
]);

任务

media:copy

在(远程)实例之间复制媒体。

dep media:copy [source] --options=target:[target]

命令在目标远程实例上执行。如果实例位于同一远程服务器上,则调用本地文件的rsync。如果实例位于不同的远程服务器上,则在目标实例上执行media:pull [source]

复制到在 instance_live_name 中定义的实例(默认为 production)是特殊情况。如果您复制到最高实例,则默认情况下您将被询问两次是否真的想要这样做。您可以通过将 media_allow_copy_live_force 设置为 true 来禁用询问。您还可以通过将 media_allow_copy_live 设置为 false 来禁止复制到实时实例。

示例:dep media:copy production --options=target:staging

media:link

仅适用于放置在同一台机器上的远程实例。命令在目标实例上创建指向源机器上文件的符号链接。

media:link [source] --options=target:[target]

对于源实例中不存在于目标实例的每个文件:1. 递归创建目录树。2. 从源实例创建符号链接到文件。

因此,目标实例上的每个文件可能被修改/删除,而不会影响源实例。

链接到在 instance_live_name 中定义的实例(默认 production)是特殊情况。如果您链接到最高实例,则默认情况下您将被询问两次是否真的想要这样做。您可以通过将 media_allow_link_live_force 设置为 true 来禁用询问。您还可以通过将 media_allow_link_live 设置为 false 来禁止链接到实时实例。

示例:dep media:link production --options=target:staging

media:pull

使用 rsync 和 "media_default" 以及 "media" 中的选项,从源实例将媒体拉取到当前实例。

dep media:pull [source]

示例:dep media:pull production

将媒体从源实例拉取到在 instance_live_name 中定义的实例(默认 production)是特殊情况。如果您将媒体拉取到最高实例,则默认情况下您将被询问两次是否真的想要这样做。您可以通过将 media_allow_pull_live_force 设置为 true 来禁用询问。您还可以通过将 media_allow_pull_live 设置为 false 来禁止拉取到实时实例。

media:push

使用 rsync 和 "media_default" 以及 "media" 中的选项,将当前实例的媒体拉取到目标实例。

dep media:push [target]

将媒体推送到在 instance_live_name 中定义的实例(默认 production)是特殊情况。如果您将媒体推送到最高实例,则默认情况下您将被询问两次是否真的想要这样做。您可以通过将 media_allow_push_live_force 设置为 true 来禁用询问。您还可以通过将 media_allow_push_live 设置为 false 来禁止推送至实时实例。

示例:dep media:push staging

变更日志

请参阅 https://github.com/digitalerase/deployer-extended-media/blob/master/CHANGELOG.rst