manage and deploy your sites with drush

40
Bastian Widmer / @dasrecht Manage and Deploy your sites with Drush

Upload: amazee-labs

Post on 08-May-2015

2.916 views

Category:

Internet


4 download

DESCRIPTION

Drush is not only awesome for managing your local Drupal site, with site aliases you can manage Drupal sites on remote servers without logging in via SSH! With Drush Deploy you even can deploy sites on multiple servers fully automated with one tool we all aready know: Drush, no other additional library like Capistrano needed! In this Session we will present how to setup Drush to work with remote sites, what is possible and what we use in our daily business. Then we will dig deeper into Drush Deploy: how it works, what it does and show how to set it up to deploy a drupal site on multiple servers with a single command, with automated backups, database updates, cache clears and even rollback functionalities.

TRANSCRIPT

Page 1: Manage and Deploy your sites with Drush

Bastian Widmer / @dasrecht

Manage and Deploy your sites with Drush

Page 2: Manage and Deploy your sites with Drush

Who are you?

Bastian Widmer

@dasrecht / bastianwidmer.ch

Switzerland

DevOps @ Amazee Labs

Page 3: Manage and Deploy your sites with Drush

Agenda 1 Introduction2

3

4

5

Where we want to go!Where we are today?

Putting it togetherOutlook to D8

Page 4: Manage and Deploy your sites with Drush

Where we are today

• 3rd party deployment frameworks (e.g. capistrano, idephix)

• Deployment „Strategies“

• rsync

• scp

• ftp upload

• git pull (and pray)

Page 5: Manage and Deploy your sites with Drush

Cluster SSH, anyone?

„the DevOps way to kill 5 servers with one keystroke“

Page 6: Manage and Deploy your sites with Drush

Where we want to go!• Deploying with a tool we know at heart : DRUSH

• Multi Server Deployments

• Running Tasks

• Git Remote cache

• Possibility to rollback a release

Page 7: Manage and Deploy your sites with Drush

Where we want to go!• Deploying with a tool we know at heart : DRUSH

• Multi Server Deployments

• Running Tasks

• Git Remote cache

• Possibility to rollback a release

More Automation leaves less room to human error

Page 8: Manage and Deploy your sites with Drush

Look at your future deployment

Page 9: Manage and Deploy your sites with Drush

Now, back to me…Putting the parts together, shall we?

Page 10: Manage and Deploy your sites with Drush

Parts 1 Installing Drush Deploy2

3

4

Drush Deploy ConfigurationDrush Aliases

The first deployment

Page 11: Manage and Deploy your sites with Drush

Installing drush-deploy• cd ~/.drush

• git clone --branch 7.x-1.x http://git.drupal.org/project/drush_deploy.git

Page 12: Manage and Deploy your sites with Drush

Now getting your Drupal site ready

Page 13: Manage and Deploy your sites with Drush

Standardisation!• Cleanup your environments

• Establish standards for

• Configurations (e.g. settings.php)

• File paths (/sites/defaults/files)

• Webroot paths

Page 14: Manage and Deploy your sites with Drush

aliases.drushrc.php 1 <?php! 2 $aliases['web1'] = array(! 3 'root' => '/var/www/drupal',! 4 'remote-user' => 'www-data',! 5 'remote-host' => 'web1.example.com',! 6 );! 7 $aliases['web2'] = $aliases['web1'];! 8 $aliases['web2']['remote-host'] = 'web2.example.com';! 9 ?>!

Page 15: Manage and Deploy your sites with Drush

1 <?php! 2 $aliases['web1'] = array(! 3 'root' => '/var/www/drupal',! 4 'remote-user' => 'www-data',! 5 'remote-host' => 'web1.example.com',! 6 );! 7 $aliases['web2'] = $aliases['web1'];! 8 $aliases['web2']['remote-host'] = 'web2.example.com';! 9 ?>!

drush @web1 user-login drush sql-sync @web1 default

aliases.drushrc.php

Page 16: Manage and Deploy your sites with Drush

Drush Deploy Configuration

Page 17: Manage and Deploy your sites with Drush

deploy.drushrc.php 1 <?php! 2 $options['application'] = 'drupal';! 3 $options['deploy-repository'] = '[email protected]:AmazeeLabs/new-site.git';! 4 $options['branch'] = "live";! 5 $options['keep-releases'] = 3;! 6 $options['deploy-via'] = 'RemoteCache';! 7 $options['docroot'] = '/var/www/drupal';! 8 $options['git_enable_submodules'] = TRUE;! 9 ?>!

Page 18: Manage and Deploy your sites with Drush

deploy.drushrc.php 1 <?php! 2 $options['application'] = 'drupal';! 3 $options['deploy-repository'] = '[email protected]:AmazeeLabs/new-site.git';! 4 $options['branch'] = "live";! 5 $options['keep-releases'] = 3;! 6 $options['deploy-via'] = 'RemoteCache';! 7 $options['docroot'] = '/var/www/drupal';! 8 $options['git_enable_submodules'] = TRUE;! 9 ?>!

Page 19: Manage and Deploy your sites with Drush

deploy.drushrc.php 1 <?php! 2 $options['application'] = 'drupal';! 3 $options['deploy-repository'] = '[email protected]:AmazeeLabs/new-site.git';! 4 $options['branch'] = "live";! 5 $options['keep-releases'] = 3;! 6 $options['deploy-via'] = 'RemoteCache';! 7 $options['docroot'] = '/var/www/drupal';! 8 $options['git_enable_submodules'] = TRUE;! 9 ?>!

Adopt a GIT Workflow Git Flow : http://s.nrdy.ch/git-flow

Page 20: Manage and Deploy your sites with Drush

deploy.drushrc.php 1 <?php! 2 $options['application'] = 'drupal';! 3 $options['deploy-repository'] = '[email protected]:AmazeeLabs/new-site.git';! 4 $options['branch'] = "live";! 5 $options['keep-releases'] = 3;! 6 $options['deploy-via'] = 'RemoteCache';! 7 $options['docroot'] = '/var/www/drupal';! 8 $options['git_enable_submodules'] = TRUE;! 9 ?>!

Page 21: Manage and Deploy your sites with Drush

deploy.drushrc.php 1 <?php! 2 $options['application'] = 'drupal';! 3 $options['deploy-repository'] = '[email protected]:AmazeeLabs/new-site.git';! 4 $options['branch'] = "live";! 5 $options['keep-releases'] = 3;! 6 $options['deploy-via'] = 'RemoteCache';! 7 $options['docroot'] = '/var/www/drupal';! 8 $options['git_enable_submodules'] = TRUE;! 9 ?>!

keep-releases allows you to roll back to the last state

Page 22: Manage and Deploy your sites with Drush

deploy.drushrc.php 1 <?php! 2 $options['application'] = 'drupal';! 3 $options['deploy-repository'] = '[email protected]:AmazeeLabs/new-site.git';! 4 $options['branch'] = "live";! 5 $options['keep-releases'] = 3;! 6 $options['deploy-via'] = 'RemoteCache';! 7 $options['docroot'] = '/var/www/drupal';! 8 $options['git_enable_submodules'] = TRUE;! 9 ?>!

Page 23: Manage and Deploy your sites with Drush

Filesystem Structure

Prepare your server :

drush deploy-setup @web1

Page 24: Manage and Deploy your sites with Drush

Filesystem Structure

Current ReleaseIs a symlink to the latest release directory

Page 25: Manage and Deploy your sites with Drush

Filesystem Structure

Releases

Page 26: Manage and Deploy your sites with Drush

Filesystem Structure

Shared (Git Cache / Configuration)

Page 27: Manage and Deploy your sites with Drush

Filesystem Structure

Webroot (symlink to current)

Page 28: Manage and Deploy your sites with Drush

• updates your remote cache

• initializes and updates git submodules

• creates a new release directory

• copies your current codebase to the release directory

• executes your tasks

• links the ‚current‘ directory with your new deployed code

drush deploy @web1

Page 29: Manage and Deploy your sites with Drush

drush deploy-rollback @web1

• relinks the current directory with the last release

• removes the faulty release

Page 30: Manage and Deploy your sites with Drush

Nice but what about drush deploy @live

Page 31: Manage and Deploy your sites with Drush

aliases.drushrc.php• Multi Server Deployments? Alias Lists!

10 $aliases['live'] = array(! 11 'site-list' => array('@web1', '@web2');! 12 );

http://drush.ws/examples/example.aliases.drushrc.php

Page 32: Manage and Deploy your sites with Drush

Automated aliases!• aliases are built on the fly

• information about servers is stored in a json file

• server groups are built automatically

Page 33: Manage and Deploy your sites with Drush

Automated aliases! 1 <?php! 2 ! 3 $sitename = 'CHANGEME';! 4 ! 5 // - DO NOT make changes below this Comment! 6 ! 7 // Basic error handling! 8 if($sitename == 'CHANGEME')! 9 die("[ERROR] - Luke, you should change the Sitename in aliases.drushrc.php!\n“);! 10 …!

http://s.nrdy.ch/drush-aliases

Page 34: Manage and Deploy your sites with Drush

Time to Implement?

Page 35: Manage and Deploy your sites with Drush

Deployment Tasks• Before or after moving to new version

• on one or all servers 1 $options['before']['deploy-symlink'][] = 'deploy_settings_php_task';! 2 /**! 3 * The task needs to be defined with a @task "decorator" in the comment block preceding it! 4 * @task! 5 */! 6 function deploy_settings_php_task($d) {! 7 $d->run("cp /home/nfs_share/www-data/`whoami`/settings.php ~/deploy/drupal/shared/settings.php", $d->latest_release());! 8 }!

Page 36: Manage and Deploy your sites with Drush

Deployment Tasks

• update and link settings.php

• link /sites/default/files

• drush updb

• drush cc all

• notify NewRelic about the deployment

Page 37: Manage and Deploy your sites with Drush

Missing Things• „I just want to update code“ - without running

Tasks

• adding ssh known hosts - connecting to github on a new vhost

Page 38: Manage and Deploy your sites with Drush

Outlook Drupal 8• Configuration Management Initiative

www.drupal8cmi.org

• Dealing with Configuration Files

• HEAD is currently moving fast, so changes apply and deployment might not be as easy as with D7

Page 39: Manage and Deploy your sites with Drush

Take Home• You don’t have to do all at once

• Automatic aliases files are awesome

• Cleanup your environments

• Standardisation saves time

• Deployments are fun (with drush deploy)

Page 40: Manage and Deploy your sites with Drush

Thank you for having me here!

Slides : http://s.nrdy.ch/drush-deploy