diff --git a/docs/recipe/magento2.md b/docs/recipe/magento2.md index c8afed08d..e69de29bb 100644 --- a/docs/recipe/magento2.md +++ b/docs/recipe/magento2.md @@ -1,327 +0,0 @@ - - - - -# How to Deploy a Magento 2 Project - -```php -require 'recipe/magento2.php'; -``` - -[Source](/recipe/magento2.php) - -Deployer is a free and open source deployment tool written in PHP. -It helps you to deploy your Magento 2 application to a server. -It is very easy to use and has a lot of features. - -Three main features of Deployer are: -- **Provisioning** - provision your server for you. -- **Zero downtime deployment** - deploy your application without a downtime. -- **Rollbacks** - rollback your application to a previous version, if something goes wrong. - -Additionally, Deployer has a lot of other features, like: -- **Easy to use** - Deployer is very easy to use. It has a simple and intuitive syntax. -- **Fast** - Deployer is very fast. It uses parallel connections to deploy your application. -- **Secure** - Deployer uses SSH to connect to your server. -- **Supports all major PHP frameworks** - Deployer supports all major PHP frameworks. - -You can read more about Deployer in [Getting Started](/docs/getting-started.md). - -The [deploy](#deploy) task of **Magento 2** consists of: -* [deploy:prepare](/docs/recipe/common.md#deployprepare) – Prepares a new release - * [deploy:info](/docs/recipe/deploy/info.md#deployinfo) – Displays info about deployment - * [deploy:setup](/docs/recipe/deploy/setup.md#deploysetup) – Prepares host for deploy - * [deploy:lock](/docs/recipe/deploy/lock.md#deploylock) – Locks deploy - * [deploy:release](/docs/recipe/deploy/release.md#deployrelease) – Prepares release - * [deploy:update_code](/docs/recipe/deploy/update_code.md#deployupdate_code) – Updates code - * [deploy:shared](/docs/recipe/deploy/shared.md#deployshared) – Creates symlinks for shared files and dirs - * [deploy:writable](/docs/recipe/deploy/writable.md#deploywritable) – Makes writable dirs -* [deploy:vendors](/docs/recipe/deploy/vendors.md#deployvendors) – Installs vendors -* [deploy:clear_paths](/docs/recipe/deploy/clear_paths.md#deployclear_paths) – Cleanup files and/or directories -* [deploy:magento](/docs/recipe/magento2.md#deploymagento) – Magento2 deployment operations - * [magento:build](/docs/recipe/magento2.md#magentobuild) – Magento2 build operations - * [magento:compile](/docs/recipe/magento2.md#magentocompile) – Compiles magento di - * [magento:deploy:assets](/docs/recipe/magento2.md#magentodeployassets) – Deploys assets - * [magento:config:import](/docs/recipe/magento2.md#magentoconfigimport) – Config Import - * [magento:upgrade:db](/docs/recipe/magento2.md#magentoupgradedb) – Upgrades magento database - * [magento:cache:flush](/docs/recipe/magento2.md#magentocacheflush) – Flushes Magento Cache -* [deploy:publish](/docs/recipe/common.md#deploypublish) – Publishes the release - * [deploy:symlink](/docs/recipe/deploy/symlink.md#deploysymlink) – Creates symlink to release - * [deploy:unlock](/docs/recipe/deploy/lock.md#deployunlock) – Unlocks deploy - * [deploy:cleanup](/docs/recipe/deploy/cleanup.md#deploycleanup) – Cleanup old releases - * [deploy:success](/docs/recipe/common.md#deploysuccess) – - - -The magento2 recipe is based on the [common](/docs/recipe/common.md) recipe. - -## Configuration -### static_content_locales -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L20) - -By default setup:static-content:deploy uses `en_US`. -To change that, simply put `set('static_content_locales', 'en_US de_DE');` -in you deployer script. - -```php title="Default value" -'en_US' -``` - - -### magento_themes -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L26) - -You can also set the themes to run against. By default it'll deploy -all themes - `add('magento_themes', ['Magento/luma', 'Magento/backend']);` - -```php title="Default value" -[ - -] -``` - - -### static_content_jobs -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L34) - -Also set the number of conccurent jobs to run. The default is 1 -Update using: `set('static_content_jobs', '1');` - -```php title="Default value" -'1' -``` - - -### content_version -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L36) - - - -```php title="Default value" -return time(); -``` - - -### shared_files -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L40) - -Overrides [shared_files](/docs/recipe/deploy/shared.md#shared_files) from `recipe/deploy/shared.php`. - - - -```php title="Default value" -[ - 'app/etc/env.php', - 'var/.maintenance.ip', -] -``` - - -### shared_dirs -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L44) - -Overrides [shared_dirs](/docs/recipe/deploy/shared.md#shared_dirs) from `recipe/deploy/shared.php`. - - - -```php title="Default value" -[ - 'var/composer_home', - 'var/log', - 'var/export', - 'var/report', - 'var/import', - 'var/import_history', - 'var/session', - 'var/importexport', - 'var/backups', - 'var/tmp', - 'pub/sitemap', - 'pub/media', - 'pub/static/_cache' -] -``` - - -### writable_dirs -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L59) - -Overrides [writable_dirs](/docs/recipe/deploy/writable.md#writable_dirs) from `recipe/deploy/writable.php`. - - - -```php title="Default value" -[ - 'var', - 'pub/static', - 'pub/media', - 'generated', - 'var/page_cache' -] -``` - - -### clear_paths -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L66) - -Overrides [clear_paths](/docs/recipe/deploy/clear_paths.md#clear_paths) from `recipe/deploy/clear_paths.php`. - - - -```php title="Default value" -[ - 'generated/*', - 'pub/static/_cache/*', - 'var/generation/*', - 'var/cache/*', - 'var/page_cache/*', - 'var/view_preprocessed/*' -] -``` - - -### magento_version -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L75) - - - -```php title="Default value" -// detect version -$versionOutput = run('{{bin/php}} {{release_or_current_path}}/bin/magento --version'); -preg_match('/(\d+\.?)+(-p\d+)?$/', $versionOutput, $matches); -return $matches[0] ?? '2.0'; -``` - - -### maintenance_mode_status_active -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L82) - - - -```php title="Default value" -// detect maintenance mode active -$maintenanceModeStatusOutput = run("{{bin/php}} {{release_or_current_path}}/bin/magento maintenance:status"); -return strpos($maintenanceModeStatusOutput, MAINTENANCE_MODE_ACTIVE_OUTPUT_MSG) !== false; -``` - - -### enable_zerodowntime -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L89) - -Deploy without setting maintenance mode if possible - -```php title="Default value" -true -``` - - - -## Tasks - -### magento:compile -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L93) - -Compiles magento di. - -Tasks - - -### magento:deploy:assets -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L100) - -Deploys assets. - - - - -### magento:sync:content_version -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L113) - -Syncs content version. - - - - -### magento:maintenance:enable -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L123) - -Enables maintenance mode. - - - - -### magento:maintenance:disable -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L128) - -Disables maintenance mode. - - - - -### magento:config:import -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L133) - -Config Import. - - - - -### magento:upgrade:db -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L168) - -Upgrades magento database. - - - - -### magento:cache:flush -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L195) - -Flushes Magento Cache. - - - - -### deploy:magento -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L200) - -Magento2 deployment operations. - - - - -This task is group task which contains next tasks: -* [magento:build](/docs/recipe/magento2.md#magentobuild) -* [magento:config:import](/docs/recipe/magento2.md#magentoconfigimport) -* [magento:upgrade:db](/docs/recipe/magento2.md#magentoupgradedb) -* [magento:cache:flush](/docs/recipe/magento2.md#magentocacheflush) - - -### magento:build -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L208) - -Magento2 build operations. - - - - -This task is group task which contains next tasks: -* [magento:compile](/docs/recipe/magento2.md#magentocompile) -* [magento:deploy:assets](/docs/recipe/magento2.md#magentodeployassets) - - -### deploy -[Source](https://github.com/deployphp/deployer/blob/master/recipe/magento2.php#L214) - -Deploys your project. - - - - -This task is group task which contains next tasks: -* [deploy:prepare](/docs/recipe/common.md#deployprepare) -* [deploy:vendors](/docs/recipe/deploy/vendors.md#deployvendors) -* [deploy:clear_paths](/docs/recipe/deploy/clear_paths.md#deployclear_paths) -* [deploy:magento](/docs/recipe/magento2.md#deploymagento) -* [deploy:publish](/docs/recipe/common.md#deploypublish) - - diff --git a/recipe/magento2.php b/recipe/magento2.php index 8b71f0fb3..440f0a273 100644 --- a/recipe/magento2.php +++ b/recipe/magento2.php @@ -2,7 +2,10 @@ namespace Deployer; require_once __DIR__ . '/common.php'; +require_once __DIR__ . '/../contrib/cachetool.php'; + +use Deployer\Exception\GracefulShutdownException; use Deployer\Exception\RunException; use Deployer\Host\Host; @@ -220,3 +223,130 @@ ]); after('deploy:failed', 'magento:maintenance:disable'); + +// artifact deployment section +// settings section +set('artifact_file', 'artifact.tar.gz'); +set('artifact_dir', 'artifacts'); +set('artifact_excludes_file', 'artifacts/excludes'); + +set('artifact_path', function () { + if (!test('[ -d {{artifact_dir}} ]')) { + run('mkdir {{artifact_dir}}'); + } + return get('artifact_dir') . '/' . get('artifact_file'); +}); + +set('bin/tar', function () { + if (commandExist('gtar')) { + return which('gtar'); + } else { + return which('tar'); + } +}); + +// tasks section +desc('Packages all relevant files in an artifact.'); +task('artifact:package', function() { + if (!test('[ -f {{artifact_excludes_file}} ]')) { + throw new GracefulShutdownException( + "No artifact excludes file provided, provide one at artivacts/excludes or change location" + ); + } + run('{{bin/tar}} --exclude-from={{artifact_excludes_file}} -czf {{artifact_path}} .'); +}); + +desc('Uploads artifact in release folder for extraction.'); +task('artifact:upload', function () { + upload(get('artifact_path'), '{{release_path}}'); +}); + +desc('Extracts artifact in release path.'); +task('artifact:extract', function () { + run('{{bin/tar}} -xzpf {{release_path}}/{{artifact_file}} -C {{release_path}}'); + run('rm -rf {{release_path}}/{{artifact_file}}'); +}); + +desc('Clears generated files prior to building.'); +task('build:remove-generated', function() { + run('rm -rf generated/*'); +}); + +desc('Prepare local artifact build'); +task('build:prepare', function() { + if(! currentHost()->get('local')) { + { + throw new GracefulShutdownException("Artifact can only be built locally, you provided a non local host"); + } + } + set('deploy_path', '.'); + set('release_path', '.'); + set('current_path', '.'); +}); + +desc('Builds an artifact.'); +task( + 'artifact:build', + [ + 'build:prepare', + 'build:remove-generated', + 'deploy:vendors', + 'magento:compile', + 'magento:deploy:assets', + 'artifact:package', + ] +); + +// Array of shared files that will be added to the default shared_files without overriding +set('additional_shared_files', []); +// Array of shared directories that will be added to the default shared_dirs without overriding +set('additional_shared_dirs', []); + + +desc('Adds additional files and dirs to the list of shared files and dirs'); +task('deploy:additional-shared', function () { + add('shared_files', get('additional_shared_files')); + add('shared_dirs', get('additional_shared_dirs')); +}); + + +desc('Prepares an artifact on the target server'); +task( + 'artifact:prepare', + [ + 'deploy:info', + 'deploy:setup', + 'deploy:lock', + 'deploy:release', + 'artifact:upload', + 'artifact:extract', + 'deploy:additional-shared', + 'deploy:shared', + 'deploy:writable', + ] +); + +desc('Executes the tasks after artifact is released'); +task( + 'artifact:finish', + [ + 'magento:cache:flush', + 'cachetool:clear:opcache', + 'deploy:cleanup', + 'deploy:unlock', + ] +); + +desc('Actually releases the artifact deployment'); +task( + 'artifact:deploy', + [ + 'artifact:prepare', + 'magento:upgrade:db', + 'magento:config:import', + 'deploy:symlink', + 'artifact:finish' + ] +); + +fail('artifact:deploy', 'deploy:failed');