mirror of
https://github.com/deployphp/deployer.git
synced 2025-02-22 08:12:29 +01:00
186 lines
5.5 KiB
PHP
186 lines
5.5 KiB
PHP
<?php
|
|
/**
|
|
* ## Usage
|
|
*
|
|
* Add `repository` to your _deploy.php_ file:
|
|
*
|
|
* ```php
|
|
* set('repository', 'git@github.com:shopware/production.git');
|
|
* ```
|
|
*
|
|
* configure host:
|
|
* ```php
|
|
* host('SSH-HOSTNAME')
|
|
* ->set('remote_user', 'SSH-USER')
|
|
* ->set('deploy_path', '/var/www/shopware') // This is the path, where deployer will create its directory structure
|
|
* ->set('http_user', 'www-data') // Not needed, if the `user` is the same user, the webserver is running with
|
|
* ->set('http_group', 'www-data')
|
|
* ->set('writable_mode', 'chmod')
|
|
* ->set('writable_recursive', true)
|
|
* ->set('become', 'www-data'); // You might want to change user to execute remote tasks because of access rights of created cache files
|
|
* ```
|
|
*
|
|
* :::note
|
|
* Please remember that the installation must be modified so that it can be
|
|
* [build without database](https://developer.shopware.com/docs/guides/hosting/installation-updates/deployments/build-w-o-db#compiling-the-storefront-without-database).
|
|
* :::
|
|
*/
|
|
namespace Deployer;
|
|
|
|
require_once __DIR__ . '/common.php';
|
|
|
|
add('recipes', ['shopware']);
|
|
|
|
set('bin/console', '{{bin/php}} {{release_or_current_path}}/bin/console');
|
|
|
|
set('default_timeout', 3600); // Increase when tasks take longer than that.
|
|
|
|
// These files are shared among all releases.
|
|
set('shared_files', [
|
|
'.env.local',
|
|
'install.lock',
|
|
'public/.htaccess',
|
|
'public/.user.ini',
|
|
]);
|
|
|
|
// These directories are shared among all releases.
|
|
set('shared_dirs', [
|
|
'config/jwt',
|
|
'files',
|
|
'var/log',
|
|
'public/media',
|
|
'public/thumbnail',
|
|
'public/sitemap',
|
|
]);
|
|
|
|
// These directories are made writable (the definition of "writable" requires attention).
|
|
// Please note that the files in `config/jwt/*` receive special attention in the `sw:writable:jwt` task.
|
|
set('writable_dirs', [
|
|
'config/jwt',
|
|
'custom/plugins',
|
|
'files',
|
|
'public/bundles',
|
|
'public/css',
|
|
'public/fonts',
|
|
'public/js',
|
|
'public/media',
|
|
'public/sitemap',
|
|
'public/theme',
|
|
'public/thumbnail',
|
|
'var',
|
|
]);
|
|
|
|
// This task remotely executes the `cache:clear` console command on the target server.
|
|
task('sw:cache:clear', static function () {
|
|
run('cd {{release_path}} && {{bin/console}} cache:clear --no-warmup');
|
|
});
|
|
|
|
// This task remotely executes the cache warmup console commands on the target server, so that the first user, who
|
|
// visits the website, doesn't have to wait for the cache to be built up.
|
|
task('sw:cache:warmup', static function () {
|
|
run('cd {{release_path}} && {{bin/console}} cache:warmup');
|
|
run('cd {{release_path}} && {{bin/console}} http:cache:warm:up');
|
|
});
|
|
|
|
// This task remotely executes the `database:migrate` console command on the target server.
|
|
task('sw:database:migrate', static function () {
|
|
run('cd {{release_path}} && {{bin/console}} database:migrate --all');
|
|
});
|
|
|
|
task('sw:plugin:refresh', function () {
|
|
run('cd {{release_path}} && {{bin/console}} plugin:refresh');
|
|
});
|
|
|
|
task('sw:scheduled-task:register', function () {
|
|
run('cd {{release_path}} && {{bin/console}} scheduled-task:register');
|
|
});
|
|
|
|
task('sw:theme:refresh', function () {
|
|
run('cd {{release_path}} && {{bin/console}} theme:refresh');
|
|
});
|
|
|
|
// This task is not used per default, but can be used, e.g. in combination with `SHOPWARE_SKIP_THEME_COMPILE=1`,
|
|
// to build the theme remotely instead of locally.
|
|
task('sw:theme:compile', function () {
|
|
run('cd {{release_path}} && {{bin/console}} theme:compile');
|
|
});
|
|
|
|
function getPlugins(): array
|
|
{
|
|
$output = run('cd {{release_path}} && {{bin/console}} plugin:list --json');
|
|
$plugins = json_decode($output);
|
|
|
|
return $plugins;
|
|
}
|
|
|
|
task('sw:plugin:update:all', static function () {
|
|
$plugins = getPlugins();
|
|
foreach ($plugins as $plugin) {
|
|
if ($plugin->installedAt && $plugin->upgradeVersion) {
|
|
writeln("<info>Running plugin update for " . $plugin->name . "</info>\n");
|
|
run("cd {{release_path}} && {{bin/console}} plugin:update " . $plugin->name);
|
|
}
|
|
}
|
|
});
|
|
|
|
task('sw:writable:jwt', static function () {
|
|
run('cd {{release_path}} && chmod -R 660 config/jwt/*');
|
|
});
|
|
|
|
/**
|
|
* Grouped SW deploy tasks.
|
|
*/
|
|
task('sw:deploy', [
|
|
'sw:database:migrate',
|
|
'sw:plugin:refresh',
|
|
'sw:theme:refresh',
|
|
'sw:scheduled-task:register',
|
|
'sw:cache:clear',
|
|
'sw:plugin:update:all',
|
|
'sw:cache:clear',
|
|
]);
|
|
|
|
desc('Deploys your project');
|
|
task('deploy', [
|
|
'deploy:prepare',
|
|
'sw:deploy',
|
|
'deploy:clear_paths',
|
|
'sw:cache:warmup',
|
|
'sw:writable:jwt',
|
|
'deploy:publish',
|
|
]);
|
|
|
|
task('deploy:update_code')->setCallback(static function () {
|
|
upload('.', '{{release_path}}', [
|
|
'options' => [
|
|
'--exclude=.git',
|
|
'--exclude=deploy.php',
|
|
'--exclude=node_modules',
|
|
],
|
|
]);
|
|
});
|
|
|
|
task('sw-build-without-db:get-remote-config', static function () {
|
|
if (!test('[ -d {{current_path}} ]')) {
|
|
return;
|
|
}
|
|
within('{{deploy_path}}/current', function () {
|
|
run('{{bin/php}} ./bin/console bundle:dump');
|
|
download('{{deploy_path}}/current/var/plugins.json', './var/');
|
|
|
|
run('{{bin/php}} ./bin/console theme:dump');
|
|
download('{{deploy_path}}/current/files/theme-config', './files/');
|
|
});
|
|
});
|
|
|
|
task('sw-build-without-db:build', static function () {
|
|
runLocally('CI=1 SHOPWARE_SKIP_BUNDLE_DUMP=1 ./bin/build-js.sh');
|
|
});
|
|
|
|
task('sw-build-without-db', [
|
|
'sw-build-without-db:get-remote-config',
|
|
'sw-build-without-db:build',
|
|
]);
|
|
|
|
before('deploy:update_code', 'sw-build-without-db');
|