Skip to main content
Version: 7.x

rsync

Source

IMPORTANT

This must not be confused with /src/Utility/Rsync.php, deployer's built-in rsync. Their configuration options are also very different, read carefully below.

Installing

Add to your deploy.php

require 'contrib/rsync.php';

Configuration options

  • rsync: Accepts an array with following rsync options (all are optional and defaults are ok):
    • exclude: accepts an array with patterns to be excluded from sending to server
    • exclude-file: accepts a string containing absolute path to file, which contains exclude patterns
    • include: accepts an array with patterns to be included in sending to server
    • include-file: accepts a string containing absolute path to file, which contains include patterns
    • filter: accepts an array of rsync filter rules
    • filter-file: accepts a string containing merge-file filename.
    • filter-perdir: accepts a string containing merge-file filename to be scanned and merger per each directory in rsync list on files to send
    • flags: accepts a string of flags to set when calling rsync command. Please avoid flags that accept params, and use options instead.
    • options: accepts an array of options to set when calling rsync command. DO NOT prefix options with -- as it's automatically added.
    • timeout: accepts an int defining timeout for rsync command to run locally.

Sample Configuration:

Following is default configuration. By default rsync ignores only git dir and deploy.php file.

deploy.php

set('rsync',[
'exclude' => [
'.git',
'deploy.php',
],
'exclude-file' => false,
'include' => [],
'include-file' => false,
'filter' => [],
'filter-file' => false,
'filter-perdir'=> false,
'flags' => 'rz', // Recursive, with compress
'options' => ['delete'],
'timeout' => 60,
]);

If You have multiple excludes, You can put them in file and reference that instead. If You use deploy:rsync_warmup You could set additional options that could speed-up and/or affect way things are working. For example:

deploy.php

set('rsync',[
'exclude' => ['excludes_file'],
'exclude-file' => '/tmp/localdeploys/excludes_file', //Use absolute path to avoid possible rsync problems
'include' => [],
'include-file' => false,
'filter' => [],
'filter-file' => false,
'filter-perdir' => false,
'flags' => 'rzcE', // Recursive, with compress, check based on checksum rather than time/size, preserve Executable flag
'options' => ['delete', 'delete-after', 'force'], //Delete after successful transfer, delete even if deleted dir is not empty
'timeout' => 3600, //for those huge repos or crappy connection
]);

Parameter

  • rsync_src: per-host rsync source. This can be server, stage or whatever-dependent. By default it's set to current directory
  • rsync_dest: per-host rsync destination. This can be server, stage or whatever-dependent. by default it's equivalent to release deploy destination.

Sample configurations:

This is default configuration:

set('rsync_src', __DIR__);
set('rsync_dest','{{release_path}}');

If You use local deploy recipe You can set src to local release:

host('hostname')
->hostname('10.10.10.10')
->port(22)
->set('deploy_path','/your/remote/path/app')
->set('rsync_src', '/your/local/path/app')
->set('rsync_dest','{{release_path}}');

Usage

  • rsync task

    Set rsync_src to locally cloned repository and rsync to rsync_dest. Then set this task instead of deploy:update_code in Your deploy task if Your hosting provider does not allow git.

  • rsync:warmup task

    If Your deploy task looks like:

    task('deploy', [
    'deploy:prepare',
    'deploy:release',
    'rsync',
    'deploy:vendors',
    'deploy:symlink',
    ])->desc('Deploy your project');

    And Your rsync_dest is set to {{release_path}} then You could add this task to run before rsync task or after deploy:release, whatever is more convenient.

Configuration

rsync

Source

Default value
[
'exclude' => [
'.git',
'deploy.php',
],
'exclude-file' => false,
'include' => [],
'include-file' => false,
'filter' => [],
'filter-file' => false,
'filter-perdir' => false,
'flags' => 'rz',
'options' => ['delete'],
'timeout' => 300,
]

rsync_src

Source

Default value
__DIR__

rsync_dest

Source

Default value
'{{release_path}}'

rsync_excludes

Source

rsync_includes

Source

rsync_filter

Source

rsync_options

Source

Tasks

rsync:warmup

Source

Warmups remote Rsync target.

rsync

Source

Rsync local->remote.



Support Deployer โค๏ธ

Hello, my name is Anton Medvedev (@antonmedv). I'm the creator of the Deployer. I maintain this open source project in my spare time. Supporters on GitHub give me extra motivation to work on the project.

Consider supporting Deployer via GitHub Sponsors.

Also, please, nominate me for GitHub Stars award. Thanks!