Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
DOCMAN 
The swiss army knife for Drupal multisite 
http://corp.adyax.com/themes/adyax/logo.png 
docroot management and dep...
WHO AM I 
Oleksiy Tkachenko 
http://corp.adyax.com/themes/adyax/logo.png 
PM, Drupal architect 
With Drupal from 2007 
Wit...
LARGEST DRUPAL SHOP IN EUROPE 
350 PROJECTS 
150 DRUPALERS 
7 YEARS OF GROWTH 
10K HOURS PROJECTS
http://corp.adyax.com/themes/adyax/logo.png BEFORE WE START
/ VAR / WWW 
DOCROOT? 
Acquia: your docroot folder is the root-level of your Drupal 
installation and its websites and con...
PROBLEM 1: 
Multiple suppliers need to work with one multisite installation
PROBLEM 1: 
Deployment is painful - fatal errors, incompatibility 
Production environment - never stable 
How to merge and...
PROBLEM 2: 
Standard modules, best practices and team discipline
PROBLEM 2: 
No development standards. Panels? Contexts? 
Standards exists, but not respected 
Drupal best-practices are no...
PROBLEM 3: 
Governance
PROBLEM 3: 
Who should update Drupal? 
What modules needs to be updated? 
What is happening in my docroot? 
What are the l...
PROBLEM 4: 
How and when?
PROBLEM 4: 
When to run tests? 
How to run tests? 
In which environment?
PROBLEM 5: 
Cloud hosting usually is very limited in multisite management
INTRODUCING DOCMAN 
http://adyax.github.io/docman/ 
# gem install docman
SCHEMA 
GIT: 
PROJECT A 
DOCROOT 
GIT: 
CORE GIT: 
SITES 
GIT: 
CLOUD 
HOOKS 
DOCMAN 
GIT: 
PROJECT B 
GIT: 
COMMON 
GIT: ...
! 
! 
! 
! 
REPOSITORIES: CONFIG 
/master 
config.yaml 
|-­‐-­‐ 
config.yaml 
(environments 
config) 
|-­‐-­‐ 
master 
|-­...
REPOSITORIES: CONFIG 
config.yaml 
--- 
environments: 
dev: 
deploy_target: git_target 
state: development 
target_checker...
REPOSITORIES: CONFIG 
master/common/info.yaml 
status: enabled 
type: repo 
repo: git@this-is-your-git-host:common/common....
REPOSITORIES: CONFIG 
master/docroot/info.yaml 
type: repo 
repo: git@this-is-your-git-host:common/drupal-core.git # This ...
master/projects/project1/ 
info.yaml 
REPOSITORIES: CONFIG 
type: repo 
repo: git@this-is-your-git-host:project1.git # Edi...
REPOSITORIES: CORE 
Drupal 7 
! 
! 
! 
Branches: 
develop 
master 
state_stable
REPOSITORIES: SITES 
SITES 
/all 
/default 
/site_a 
/site_b 
sites.php 
Branches: 
develop 
master 
state_stable 
https:/...
REPOSITORIES: PROJECT 
PROJECT A 
/modules 
/themes 
/libraries 
Branches: 
develop 
master 
state_stable 
https://github....
! 
! 
! 
! 
REPOSITORIES: CLOUD HOOKS 
/common 
/dev 
/prod 
/samples 
/scripts 
/test 
README.md
FEATURES 
Focused on cloud hosting: Acquia Cloud, Pantheon and others, but not 
limited to. 
Clear separation of the websi...
FEATURES 
Drupal version agnostic Drupal 8 ready! 
Force people to keep features by default, updb, features revert, regist...
FEATURES 
Multiple docroots to support? Not a problem! 
Stable & versioned production environment 
Jenkins friendly workfl...
LOCAL ENVIRONMENT 
# docman build local development
DEV + STAGE ENVIRONMENT 
# docman build git_target staging 
# docman build git_target development
LIVE ENVIRONMENT 
# docman build git_target stable
AVAILABLE COMMANDS 
$ docman init <dir> <config-repo> 
! 
$ docman build <target> <env> 
! 
$ docman bump stable 
!
AVAILABLE HELPERS 
CHANGELOG file in each repo 
automatically generated using 
commit comments 
! 
VERSION file in each re...
CASE STUDY 1: BEFORE 
INITIAL CODEBASE 
CLONE 
SITE 2 CODEBASE SITE 3 CODEBASE
CASE STUDY 1: PROBLEMS 
Conflict with Features (modules) on the cloned website 
Manual deployment for each website 
Pain t...
CASE STUDY 1: AFTER 
GIT: 
SITE A 
DOCROOT docman 
GIT: 
SITE B 
! 
GIT: 
CORE СOMMON 
git GIT: 
SITES
CASE STUDY 2: SERIOUS 
Global company 
Drupal is a company level standard for websites (yay!) 
At least 3 different Drupal...
CASE STUDY 2: PROBLEMS 
At least 3 different Drupal shops independently delivering websites. 
Maintenance? Each agency def...
CASE STUDY 2: SOLUTION 
GIT: 
SITE A 
GIT: 
SITE B 
DOCROOT Acquia Cloud 
! 
GIT: 
CORE COMMON GIT: 
SITES 
GIT: 
CLOUD 
H...
http://corp.adyax.com/themes/adyax/logo.png DEMO TIME
ROADMAP 
@Todo: Vagrant image generation per website for easy local 
development 
@Todo: wizard to generate repository wit...
NEED HELP 
@Todo: Config templates for various cloud hosting systems 
@Todo: Better config error handling 
@Todo: More dep...
http://corp.adyax.com/themes/adyax/logo.png WHAT DID YOU THINK? 
E VA LUAT E T H I S S E S S I O N - http://bit.ly/docman2...
Upcoming SlideShare
Loading in …5
×

Docman - The swiss army knife for Drupal multisite docroot management and deployment

657 views

Published on

Introducing Docman (available on github, alpha state, but used already in production environment): the Swiss Army Knife for Drupal multisite docroot management and deployment. Docman acts as a layer between your docroot – usually a git repository somewhere, but not limited to it– and multiple vendors working on different websites using your standards and predefined sets of modules.

Published in: Software
  • Be the first to comment

Docman - The swiss army knife for Drupal multisite docroot management and deployment

  1. 1. DOCMAN The swiss army knife for Drupal multisite http://corp.adyax.com/themes/adyax/logo.png docroot management and deployment A L E K S E Y T KAC H E N KO A N D A L E K S A N D R T O L S T I KOV D E VO P S H T T P : / / B I T. LY /DOCMAN20 1 4
  2. 2. WHO AM I Oleksiy Tkachenko http://corp.adyax.com/themes/adyax/logo.png PM, Drupal architect With Drupal from 2007 With Adyax from 2009 France / Ukraine
  3. 3. LARGEST DRUPAL SHOP IN EUROPE 350 PROJECTS 150 DRUPALERS 7 YEARS OF GROWTH 10K HOURS PROJECTS
  4. 4. http://corp.adyax.com/themes/adyax/logo.png BEFORE WE START
  5. 5. / VAR / WWW DOCROOT? Acquia: your docroot folder is the root-level of your Drupal installation and its websites and contains its files and directories, including Drupal's index.php, includes directory, and modules directory.
  6. 6. PROBLEM 1: Multiple suppliers need to work with one multisite installation
  7. 7. PROBLEM 1: Deployment is painful - fatal errors, incompatibility Production environment - never stable How to merge and integrate the work of multiple people? How to merge and integrate the work of multiple teams?
  8. 8. PROBLEM 2: Standard modules, best practices and team discipline
  9. 9. PROBLEM 2: No development standards. Panels? Contexts? Standards exists, but not respected Drupal best-practices are not respected Modules in /all or in /default? No team discipline (features are overridden, environments omitted, etc)
  10. 10. PROBLEM 3: Governance
  11. 11. PROBLEM 3: Who should update Drupal? What modules needs to be updated? What is happening in my docroot? What are the latest changes and stable versions?
  12. 12. PROBLEM 4: How and when?
  13. 13. PROBLEM 4: When to run tests? How to run tests? In which environment?
  14. 14. PROBLEM 5: Cloud hosting usually is very limited in multisite management
  15. 15. INTRODUCING DOCMAN http://adyax.github.io/docman/ # gem install docman
  16. 16. SCHEMA GIT: PROJECT A DOCROOT GIT: CORE GIT: SITES GIT: CLOUD HOOKS DOCMAN GIT: PROJECT B GIT: COMMON GIT: PROFILES
  17. 17. ! ! ! ! REPOSITORIES: CONFIG /master config.yaml |-­‐-­‐ config.yaml (environments config) |-­‐-­‐ master |-­‐-­‐ info.yaml (Main docroot build config) |-­‐-­‐ docroot | |-­‐-­‐ info.yaml (Main docroot build config) | |-­‐-­‐ after_build.sh (executed after build) | |-­‐-­‐ profiles | |-­‐-­‐ info.yaml (Projects dir build config) | |-­‐-­‐ project_profile (if exists) | |-­‐-­‐ info.yaml (Profile build config) | |-­‐-­‐ after_build.sh (executed after build) | |-­‐-­‐ projects | |-­‐-­‐ info.yaml (Projects dir build config) | |-­‐-­‐ project_code | |-­‐-­‐ info.yaml (Code build config) | |-­‐-­‐ after_build.sh (executed after build) | |-­‐-­‐ sites | |-­‐-­‐ info.yaml (Docroot sites dir build config) | |-­‐-­‐ after_build.sh (executed after build) | |-­‐-­‐ common | |-­‐-­‐ info.yaml (SG core common files dir build config) | |-­‐-­‐ after_build.sh (executed after build) Template: https://github.com/Adyax/docman-config
  18. 18. REPOSITORIES: CONFIG config.yaml --- environments: dev: deploy_target: git_target state: development target_checker: handler: :ssh file_path: /mnt/www/html/subscription_name_dev # Edit this! ssh_host: staging-xxxx.prod.hosting.acquia.com # Edit this! ssh_user: subscription_name # Edit this! test: deploy_target: git_target state: staging target_checker: handler: :ssh file_path: none file_path: /mnt/www/html/subscription_name_dev # Edit this! ssh_host: staging-xxxx.prod.hosting.acquia.com # Edit this! ssh_user: subscription_name # Edit this! prod: deploy_target: git_target state: stable tagger: enabled: true handler: :option
  19. 19. REPOSITORIES: CONFIG master/common/info.yaml status: enabled type: repo repo: git@this-is-your-git-host:common/common.git # Edit this. This is your repository with common modules for everyone. order: 30 states: # Git flow! development: type: branch version: develop staging: type: branch version: master stable: source: type: :retrieve_from_repo repo: :project_repo branch: state_stable file: info.yaml hooks: builder: after_execute: - type: :script location: $INFO$/after_build.sh execution_dir: $PROJECT$ params: - environment Common code repo described
  20. 20. REPOSITORIES: CONFIG master/docroot/info.yaml type: repo repo: git@this-is-your-git-host:common/drupal-core.git # This is your Drupal repo. order: 1 states: development: type: branch version: master staging: type: branch version: master stable: type: branch version: master hooks: builder: after_execute: - type: :script location: $INFO$/after_build.sh execution_dir: $PROJECT$ params: - environment Drupal core repo described
  21. 21. master/projects/project1/ info.yaml REPOSITORIES: CONFIG type: repo repo: git@this-is-your-git-host:project1.git # Edit this. This is your project repository with custom code. states: development: type: branch version: develop staging: type: branch version: master stable: source: type: :retrieve_from_repo repo: :project_repo branch: state_stable file: info.yaml location: $PROJECT$/tools/deploy/$ENVIRONMENT$/after/after.sh execution_dir: $ROOT$/docroot params: - environment - type: :script location: $PROJECT$/tools/deploy/common/after/after.sh execution_dir: $ROOT$/docroot params: - environment Project code repo described (not fully)
  22. 22. REPOSITORIES: CORE Drupal 7 ! ! ! Branches: develop master state_stable
  23. 23. REPOSITORIES: SITES SITES /all /default /site_a /site_b sites.php Branches: develop master state_stable https://github.com/Adyax/docman-sites
  24. 24. REPOSITORIES: PROJECT PROJECT A /modules /themes /libraries Branches: develop master state_stable https://github.com/Adyax/docman-project
  25. 25. ! ! ! ! REPOSITORIES: CLOUD HOOKS /common /dev /prod /samples /scripts /test README.md
  26. 26. FEATURES Focused on cloud hosting: Acquia Cloud, Pantheon and others, but not limited to. Clear separation of the websites code in multisite environments Incremental pushes of the finished docroot to the cloud hosting Code separation for easy deployment
  27. 27. FEATURES Drupal version agnostic Drupal 8 ready! Force people to keep features by default, updb, features revert, registry rebuild on each push to environments IF SOMETHING HURTS, DO IT MORE OFTEN. http://evan.bottch.com/2010/05/26/continuous-integration-if-something-hurts-do-it-more- often
  28. 28. FEATURES Multiple docroots to support? Not a problem! Stable & versioned production environment Jenkins friendly workflow Deployment pipelines organisation (with Jenkins integration) http://www.infoq.com/minibooks/continuous-delivery-overview Different deployment scenarios achievable through config: Continuous integration Continuous delivery Continuous deployment
  29. 29. LOCAL ENVIRONMENT # docman build local development
  30. 30. DEV + STAGE ENVIRONMENT # docman build git_target staging # docman build git_target development
  31. 31. LIVE ENVIRONMENT # docman build git_target stable
  32. 32. AVAILABLE COMMANDS $ docman init <dir> <config-repo> ! $ docman build <target> <env> ! $ docman bump stable !
  33. 33. AVAILABLE HELPERS CHANGELOG file in each repo automatically generated using commit comments ! VERSION file in each repo automatically generated with the latest version (all branches) ! info.yaml files everywhere helps you with what is what
  34. 34. CASE STUDY 1: BEFORE INITIAL CODEBASE CLONE SITE 2 CODEBASE SITE 3 CODEBASE
  35. 35. CASE STUDY 1: PROBLEMS Conflict with Features (modules) on the cloned website Manual deployment for each website Pain to maintain Standards? Which one? Code duplication
  36. 36. CASE STUDY 1: AFTER GIT: SITE A DOCROOT docman GIT: SITE B ! GIT: CORE СOMMON git GIT: SITES
  37. 37. CASE STUDY 2: SERIOUS Global company Drupal is a company level standard for websites (yay!) At least 3 different Drupal shops independently delivering websites constantly
  38. 38. CASE STUDY 2: PROBLEMS At least 3 different Drupal shops independently delivering websites. Maintenance? Each agency defines. Standards? Each agency defines. (Panels? Context?) Deployment? Approach is different per agency (capistrano, manual, ftp, you name it). Hosting is in the same place but each time configured differently
  39. 39. CASE STUDY 2: SOLUTION GIT: SITE A GIT: SITE B DOCROOT Acquia Cloud ! GIT: CORE COMMON GIT: SITES GIT: CLOUD HOOKS INTEGRATION PLATFORM git hooks > Jenkins > docman Gitlab
  40. 40. http://corp.adyax.com/themes/adyax/logo.png DEMO TIME
  41. 41. ROADMAP @Todo: Vagrant image generation per website for easy local development @Todo: wizard to generate repository with configs @Todo: Documentation
  42. 42. NEED HELP @Todo: Config templates for various cloud hosting systems @Todo: Better config error handling @Todo: More deployment targets @Todo: More docroot templates (Pantheon, Aberdeen Cloud, etc)
  43. 43. http://corp.adyax.com/themes/adyax/logo.png WHAT DID YOU THINK? E VA LUAT E T H I S S E S S I O N - http://bit.ly/docman2014 FOLLOW US @ADYAX FOLLOW ME @SHUMUSHIN

×