Skip to content

Instantly share code, notes, and snippets.

@ekandreas
Last active March 10, 2018 11:54
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ekandreas/46a6b86f505bbaff9e7d to your computer and use it in GitHub Desktop.
Save ekandreas/46a6b86f505bbaff9e7d to your computer and use it in GitHub Desktop.
PHP Deployer, Pull script example from production to my local Bedrock/Vagrant environment
<?php
/**
* Pull script example from production to my local Bedrock/Vagrant environment
* Requires PHP Deployer 3
*
* Andreas Ek, 2015-04-23
*/
date_default_timezone_set( 'Europe/Stockholm' );
server( 'development', 'my-vagrant.dev' )
->env( 'deploy_path', '/var/www/my-vagrant.dev' )
->env( 'branch', 'master' )
->user( 'vagrant', 'vagrant' );
server( 'production', 'my-prod.se' )
->env( 'deploy_path', '/var/www/my-prod.se' )
->user( 'deployuser' )
->env( 'branch', 'master' )
->pubKey();
set( 'site_name', 'my-vagrant' );
set( 'site_title', 'My Vagrant' );
set( 'site_email', 'andreas@andreasek.se' );
set( 'mysql_db', 'my-vagrant' );
set( 'mysql_user', 'root' );
set( 'mysql_password', 'some-pass-password' );
set( 'ssh_remote_temp_folder', 'deployuser@my-vagrant.se:/home/deployuser' );
set( 'ssh_remote_web_folder', 'deployuser@my-vagrant.se:/var/www/my-vagrant.se' );
/**
* Code below should be placed in a common file for reuse!
*
* Example:
* dep pull production
*
*/
argument( 'stage', \Symfony\Component\Console\Input\InputArgument::OPTIONAL,
'Run tasks only on this server or group of servers.' );
task( 'pull:dump', function () {
$mysql_db = get( 'mysql_db' );
$mysql_user = get( 'mysql_user' );
$mysql_password = get( 'mysql_password' );
writeln( 'Creating a new database dump (approx. 10s)' );
run( 'mysqldump -u ' . $mysql_user . ' -p' . $mysql_password . ' ' . $mysql_db . ' > ~/' . $mysql_db . '.sql' );
} );
task( 'pull:fetch_dump', function () {
$mysql_db = get( 'mysql_db' );
$ssh_remote_temp_folder = get( 'ssh_remote_temp_folder' );
writeln( 'Getting database dump (approx. 10s)' );
runLocally( 'scp ' . $ssh_remote_temp_folder . '/' . $mysql_db . '.sql ' . $mysql_db . '.sql' );
} );
task( 'pull:resolve_dump', function () {
$site_name = get( 'site_name' );
writeln( 'Restore database inside vagrant (approx. 10s)' );
runLocally( 'cd ../vagrant && vagrant ssh -c "mysql -u root -proot ' . $site_name . ' < /var/www/' . $site_name . '.dev/' . $site_name . '.sql" && cd ../' . $site_name . '.dev' );
} );
task( 'pull:remove_dump', function () {
$mysql_db = get( 'mysql_db' );
writeln( 'Remove sql dump' );
runLocally( 'rm ' . $mysql_db . '.sql' );
} );
task( 'pull:set_vagrant_wp', function () {
$site_name = get( 'site_name' );
writeln( 'Restore wp after pull (approx. 10s)' );
runLocally( 'cd ../vagrant && vagrant ssh -c "cd /var/www/' . $site_name . '.dev && wp --path=wp search-replace ' . $site_name . '.se ' . $site_name . '.dev && wp rewrite flush" && cd ../' . $site_name . '.dev' );
} );
task( 'pull:uploads', function () {
$ssh_remote_web_folder = get( 'ssh_remote_web_folder' );
writeln( 'Getting uploads, long duration first time! (approx. 60s)' );
runLocally( 'rsync -re ssh ' . $ssh_remote_web_folder . '/shared/wp-content/uploads wp-content' );
} );
/**
* Success message
*/
task( 'success', function () {
writeln( "<info>Successfully pulled!</info>" );
} )
->once()
->setPrivate();
task( 'pull', [
'pull:dump',
'pull:fetch_dump',
'pull:resolve_dump',
'pull:remove_dump',
'pull:set_vagrant_wp',
'pull:uploads',
'success'
] );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment