SlideShare a Scribd company logo
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
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
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 contains its files and directories, 
including Drupal's index.php, includes directory, and modules directory.
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 integrate the work of multiple people? 
How to merge and integrate the work of multiple teams?
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 not respected 
Modules in /all or in /default? 
No team discipline (features are overridden, environments omitted, 
etc)
PROBLEM 3: 
Governance
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?
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: 
PROFILES
! 
! 
! 
! 
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
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
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
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
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)
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://github.com/Adyax/docman-sites
REPOSITORIES: PROJECT 
PROJECT A 
/modules 
/themes 
/libraries 
Branches: 
develop 
master 
state_stable 
https://github.com/Adyax/docman-project
! 
! 
! 
! 
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 websites code in multisite environments 
Incremental pushes of the finished docroot to the cloud hosting 
Code separation for easy deployment
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
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
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 repo 
automatically generated with the 
latest version (all branches) 
! 
info.yaml files everywhere helps 
you with what is what
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 to maintain 
Standards? Which one? 
Code duplication
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 shops independently delivering websites 
constantly
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
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
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 with configs 
@Todo: Documentation
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)
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

More Related Content

What's hot

Docker 導入:障礙與對策
Docker 導入:障礙與對策Docker 導入:障礙與對策
Docker 導入:障礙與對策
William Yeh
 
Docker and DevOps --- new IT culture
Docker and DevOps --- new IT cultureDocker and DevOps --- new IT culture
Docker and DevOps --- new IT culture
Terry Chen
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
Pablo Godel
 
DCSF19 Tips and Tricks of the Docker Captains
DCSF19 Tips and Tricks of the Docker Captains  DCSF19 Tips and Tricks of the Docker Captains
DCSF19 Tips and Tricks of the Docker Captains
Docker, Inc.
 
Rh developers fat jar smackdown
Rh developers   fat jar smackdownRh developers   fat jar smackdown
Rh developers fat jar smackdown
Red Hat Developers
 
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
Erich Beyrent
 
Ansible project-deploy
Ansible project-deployAnsible project-deploy
Ansible project-deploy
Ramon de la Fuente
 
T3CON12 Flow and TYPO3 deployment with surf
T3CON12 Flow and TYPO3 deployment with surfT3CON12 Flow and TYPO3 deployment with surf
T3CON12 Flow and TYPO3 deployment with surf
Tobias Liebig
 
Developing and Deploying PHP with Docker
Developing and Deploying PHP with DockerDeveloping and Deploying PHP with Docker
Developing and Deploying PHP with DockerPatrick Mizer
 
Lessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In ProductionLessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In Production
Shingo Omura
 
手把手帶你學Docker 03042017
手把手帶你學Docker 03042017手把手帶你學Docker 03042017
手把手帶你學Docker 03042017
Paul Chao
 
Modernize Your Drupal Development
Modernize Your Drupal DevelopmentModernize Your Drupal Development
Modernize Your Drupal DevelopmentChris Tankersley
 
Drupal Best Practices
Drupal Best PracticesDrupal Best Practices
Drupal Best Practices
Mukesh Agarwal
 
Docker workshop
Docker workshopDocker workshop
Docker workshopEvans Ye
 
Pp docker-swarm-doxlon-28th-march-2017
Pp docker-swarm-doxlon-28th-march-2017Pp docker-swarm-doxlon-28th-march-2017
Pp docker-swarm-doxlon-28th-march-2017
Bobby DeVeaux, DevOps Consultant
 
Puppeteerのお話
Puppeteerのお話Puppeteerのお話
Puppeteerのお話
Shinji Kobayashi
 
Locally it worked! virtualizing docker
Locally it worked! virtualizing dockerLocally it worked! virtualizing docker
Locally it worked! virtualizing docker
Sascha Brinkmann
 
Composer JSON kills make files
Composer JSON kills make filesComposer JSON kills make files
Composer JSON kills make files
ropsu
 
Dockercon EU 2014
Dockercon EU 2014Dockercon EU 2014
Dockercon EU 2014
Rafe Colton
 

What's hot (20)

Docker 導入:障礙與對策
Docker 導入:障礙與對策Docker 導入:障礙與對策
Docker 導入:障礙與對策
 
Docker and DevOps --- new IT culture
Docker and DevOps --- new IT cultureDocker and DevOps --- new IT culture
Docker and DevOps --- new IT culture
 
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony AppsSymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
 
DCSF19 Tips and Tricks of the Docker Captains
DCSF19 Tips and Tricks of the Docker Captains  DCSF19 Tips and Tricks of the Docker Captains
DCSF19 Tips and Tricks of the Docker Captains
 
Rh developers fat jar smackdown
Rh developers   fat jar smackdownRh developers   fat jar smackdown
Rh developers fat jar smackdown
 
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
 
Ansible project-deploy
Ansible project-deployAnsible project-deploy
Ansible project-deploy
 
T3CON12 Flow and TYPO3 deployment with surf
T3CON12 Flow and TYPO3 deployment with surfT3CON12 Flow and TYPO3 deployment with surf
T3CON12 Flow and TYPO3 deployment with surf
 
Developing and Deploying PHP with Docker
Developing and Deploying PHP with DockerDeveloping and Deploying PHP with Docker
Developing and Deploying PHP with Docker
 
Lessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In ProductionLessons Learned: Using Concourse In Production
Lessons Learned: Using Concourse In Production
 
手把手帶你學Docker 03042017
手把手帶你學Docker 03042017手把手帶你學Docker 03042017
手把手帶你學Docker 03042017
 
Modernize Your Drupal Development
Modernize Your Drupal DevelopmentModernize Your Drupal Development
Modernize Your Drupal Development
 
Drupal Best Practices
Drupal Best PracticesDrupal Best Practices
Drupal Best Practices
 
Docker workshop
Docker workshopDocker workshop
Docker workshop
 
Pp docker-swarm-doxlon-28th-march-2017
Pp docker-swarm-doxlon-28th-march-2017Pp docker-swarm-doxlon-28th-march-2017
Pp docker-swarm-doxlon-28th-march-2017
 
Puppeteerのお話
Puppeteerのお話Puppeteerのお話
Puppeteerのお話
 
Locally it worked! virtualizing docker
Locally it worked! virtualizing dockerLocally it worked! virtualizing docker
Locally it worked! virtualizing docker
 
Scaling Django
Scaling DjangoScaling Django
Scaling Django
 
Composer JSON kills make files
Composer JSON kills make filesComposer JSON kills make files
Composer JSON kills make files
 
Dockercon EU 2014
Dockercon EU 2014Dockercon EU 2014
Dockercon EU 2014
 

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

Learning Docker with Thomas
Learning Docker with ThomasLearning Docker with Thomas
Learning Docker with Thomas
Thomas Tong, FRM, PMP
 
Improving your Drupal 8 development workflow DrupalCampLA
Improving your Drupal 8 development workflow DrupalCampLAImproving your Drupal 8 development workflow DrupalCampLA
Improving your Drupal 8 development workflow DrupalCampLA
Jesus Manuel Olivas
 
Face your fears: Drush and Aegir
Face your fears: Drush and AegirFace your fears: Drush and Aegir
Face your fears: Drush and Aegir
Iztok Smolic
 
Lean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and DrushLean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and Drush
Pantheon
 
Using Docker For Development
Using Docker For DevelopmentUsing Docker For Development
Using Docker For Development
Laura Frank Tacho
 
Building and Maintaining a Distribution in Drupal 7 with Features
Building and Maintaining a  Distribution in Drupal 7 with FeaturesBuilding and Maintaining a  Distribution in Drupal 7 with Features
Building and Maintaining a Distribution in Drupal 7 with Features
Nuvole
 
Magento Docker Setup.pdf
Magento Docker Setup.pdfMagento Docker Setup.pdf
Magento Docker Setup.pdf
Abid Malik
 
Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned  Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned
RightScale
 
DCEU 18: Developing with Docker Containers
DCEU 18: Developing with Docker ContainersDCEU 18: Developing with Docker Containers
DCEU 18: Developing with Docker Containers
Docker, Inc.
 
Docker @ FOSS4G 2016, Bonn
Docker @ FOSS4G 2016, BonnDocker @ FOSS4G 2016, Bonn
Docker @ FOSS4G 2016, Bonn
Daniel Nüst
 
Be a better developer with Docker (revision 3)
Be a better developer with Docker (revision 3)Be a better developer with Docker (revision 3)
Be a better developer with Docker (revision 3)
Nicola Paolucci
 
Be a happier developer with Docker: Tricks of the trade
Be a happier developer with Docker: Tricks of the tradeBe a happier developer with Docker: Tricks of the trade
Be a happier developer with Docker: Tricks of the trade
Nicola Paolucci
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 application
Roman Rodomansky
 
Be a Happier Developer with Docker: Tricks of the Trade
Be a Happier Developer with Docker: Tricks of the TradeBe a Happier Developer with Docker: Tricks of the Trade
Be a Happier Developer with Docker: Tricks of the TradeDocker, Inc.
 
Drupal 8 - Improving your development workflow
Drupal 8 - Improving your development workflowDrupal 8 - Improving your development workflow
Drupal 8 - Improving your development workflow
valuebound
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
Jérôme Petazzoni
 
Composer tools and frameworks for Drupal
Composer tools and frameworks for DrupalComposer tools and frameworks for Drupal
Composer tools and frameworks for Drupal
Promet Source
 
Docker Dhahran Nov 2016 meetup
Docker Dhahran Nov 2016 meetupDocker Dhahran Nov 2016 meetup
Docker Dhahran Nov 2016 meetup
Walid Shaari
 
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik DornJDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
PROIDEA
 
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHPHands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Dana Luther
 

Similar to Docman - The swiss army knife for Drupal multisite docroot management and deployment (20)

Learning Docker with Thomas
Learning Docker with ThomasLearning Docker with Thomas
Learning Docker with Thomas
 
Improving your Drupal 8 development workflow DrupalCampLA
Improving your Drupal 8 development workflow DrupalCampLAImproving your Drupal 8 development workflow DrupalCampLA
Improving your Drupal 8 development workflow DrupalCampLA
 
Face your fears: Drush and Aegir
Face your fears: Drush and AegirFace your fears: Drush and Aegir
Face your fears: Drush and Aegir
 
Lean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and DrushLean Drupal Repositories with Composer and Drush
Lean Drupal Repositories with Composer and Drush
 
Using Docker For Development
Using Docker For DevelopmentUsing Docker For Development
Using Docker For Development
 
Building and Maintaining a Distribution in Drupal 7 with Features
Building and Maintaining a  Distribution in Drupal 7 with FeaturesBuilding and Maintaining a  Distribution in Drupal 7 with Features
Building and Maintaining a Distribution in Drupal 7 with Features
 
Magento Docker Setup.pdf
Magento Docker Setup.pdfMagento Docker Setup.pdf
Magento Docker Setup.pdf
 
Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned  Real-World Docker: 10 Things We've Learned
Real-World Docker: 10 Things We've Learned
 
DCEU 18: Developing with Docker Containers
DCEU 18: Developing with Docker ContainersDCEU 18: Developing with Docker Containers
DCEU 18: Developing with Docker Containers
 
Docker @ FOSS4G 2016, Bonn
Docker @ FOSS4G 2016, BonnDocker @ FOSS4G 2016, Bonn
Docker @ FOSS4G 2016, Bonn
 
Be a better developer with Docker (revision 3)
Be a better developer with Docker (revision 3)Be a better developer with Docker (revision 3)
Be a better developer with Docker (revision 3)
 
Be a happier developer with Docker: Tricks of the trade
Be a happier developer with Docker: Tricks of the tradeBe a happier developer with Docker: Tricks of the trade
Be a happier developer with Docker: Tricks of the trade
 
Dockerizing a Symfony2 application
Dockerizing a Symfony2 applicationDockerizing a Symfony2 application
Dockerizing a Symfony2 application
 
Be a Happier Developer with Docker: Tricks of the Trade
Be a Happier Developer with Docker: Tricks of the TradeBe a Happier Developer with Docker: Tricks of the Trade
Be a Happier Developer with Docker: Tricks of the Trade
 
Drupal 8 - Improving your development workflow
Drupal 8 - Improving your development workflowDrupal 8 - Improving your development workflow
Drupal 8 - Improving your development workflow
 
Docker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los AngelesDocker 0.11 at MaxCDN meetup in Los Angeles
Docker 0.11 at MaxCDN meetup in Los Angeles
 
Composer tools and frameworks for Drupal
Composer tools and frameworks for DrupalComposer tools and frameworks for Drupal
Composer tools and frameworks for Drupal
 
Docker Dhahran Nov 2016 meetup
Docker Dhahran Nov 2016 meetupDocker Dhahran Nov 2016 meetup
Docker Dhahran Nov 2016 meetup
 
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik DornJDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
 
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHPHands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
Hands on Docker - Launch your own LEMP or LAMP stack - SunshinePHP
 

Recently uploaded

Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Shahin Sheidaei
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
Globus
 
De mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEDe mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FME
Jelle | Nordend
 
Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024
Sharepoint Designs
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
NaapbooksPrivateLimi
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Globus
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
Max Andersen
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
XfilesPro
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
XfilesPro
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
Ortus Solutions, Corp
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
KrzysztofKkol1
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
Matt Welsh
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
Paco van Beckhoven
 
Why React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdfWhy React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdf
ayushiqss
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
Globus
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar
 
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Hivelance Technology
 
Strategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptxStrategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptx
varshanayak241
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
Globus
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
WSO2
 

Recently uploaded (20)

Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
Gamify Your Mind; The Secret Sauce to Delivering Success, Continuously Improv...
 
Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024Globus Compute Introduction - GlobusWorld 2024
Globus Compute Introduction - GlobusWorld 2024
 
De mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FMEDe mooiste recreatieve routes ontdekken met RouteYou en FME
De mooiste recreatieve routes ontdekken met RouteYou en FME
 
Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024Explore Modern SharePoint Templates for 2024
Explore Modern SharePoint Templates for 2024
 
Visitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.appVisitor Management System in India- Vizman.app
Visitor Management System in India- Vizman.app
 
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data AnalysisProviding Globus Services to Users of JASMIN for Environmental Data Analysis
Providing Globus Services to Users of JASMIN for Environmental Data Analysis
 
Quarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden ExtensionsQuarkus Hidden and Forbidden Extensions
Quarkus Hidden and Forbidden Extensions
 
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, BetterWebinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
Webinar: Salesforce Document Management 2.0 - Smarter, Faster, Better
 
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
How Does XfilesPro Ensure Security While Sharing Documents in Salesforce?
 
Into the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdfInto the Box 2024 - Keynote Day 2 Slides.pdf
Into the Box 2024 - Keynote Day 2 Slides.pdf
 
Designing for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web ServicesDesigning for Privacy in Amazon Web Services
Designing for Privacy in Amazon Web Services
 
Large Language Models and the End of Programming
Large Language Models and the End of ProgrammingLarge Language Models and the End of Programming
Large Language Models and the End of Programming
 
Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024Cracking the code review at SpringIO 2024
Cracking the code review at SpringIO 2024
 
Why React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdfWhy React Native as a Strategic Advantage for Startup Innovation.pdf
Why React Native as a Strategic Advantage for Startup Innovation.pdf
 
First Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User EndpointsFirst Steps with Globus Compute Multi-User Endpoints
First Steps with Globus Compute Multi-User Endpoints
 
SOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBrokerSOCRadar Research Team: Latest Activities of IntelBroker
SOCRadar Research Team: Latest Activities of IntelBroker
 
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
Multiple Your Crypto Portfolio with the Innovative Features of Advanced Crypt...
 
Strategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptxStrategies for Successful Data Migration Tools.pptx
Strategies for Successful Data Migration Tools.pptx
 
How to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good PracticesHow to Position Your Globus Data Portal for Success Ten Good Practices
How to Position Your Globus Data Portal for Success Ten Good Practices
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 

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

  • 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. 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. LARGEST DRUPAL SHOP IN EUROPE 350 PROJECTS 150 DRUPALERS 7 YEARS OF GROWTH 10K HOURS PROJECTS
  • 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. PROBLEM 1: Multiple suppliers need to work with one multisite installation
  • 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. PROBLEM 2: Standard modules, best practices and team discipline
  • 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)
  • 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. PROBLEM 4: How and when?
  • 13. PROBLEM 4: When to run tests? How to run tests? In which environment?
  • 14. PROBLEM 5: Cloud hosting usually is very limited in multisite management
  • 16. SCHEMA GIT: PROJECT A DOCROOT GIT: CORE GIT: SITES GIT: CLOUD HOOKS DOCMAN GIT: PROJECT B GIT: COMMON GIT: PROFILES
  • 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. 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. 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. 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. 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. REPOSITORIES: CORE Drupal 7 ! ! ! Branches: develop master state_stable
  • 23. REPOSITORIES: SITES SITES /all /default /site_a /site_b sites.php Branches: develop master state_stable https://github.com/Adyax/docman-sites
  • 24. REPOSITORIES: PROJECT PROJECT A /modules /themes /libraries Branches: develop master state_stable https://github.com/Adyax/docman-project
  • 25. ! ! ! ! REPOSITORIES: CLOUD HOOKS /common /dev /prod /samples /scripts /test README.md
  • 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. 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. 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. LOCAL ENVIRONMENT # docman build local development
  • 30. DEV + STAGE ENVIRONMENT # docman build git_target staging # docman build git_target development
  • 31. LIVE ENVIRONMENT # docman build git_target stable
  • 32. AVAILABLE COMMANDS $ docman init <dir> <config-repo> ! $ docman build <target> <env> ! $ docman bump stable !
  • 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. CASE STUDY 1: BEFORE INITIAL CODEBASE CLONE SITE 2 CODEBASE SITE 3 CODEBASE
  • 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. CASE STUDY 1: AFTER GIT: SITE A DOCROOT docman GIT: SITE B ! GIT: CORE СOMMON git GIT: SITES
  • 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. 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. 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
  • 41. ROADMAP @Todo: Vagrant image generation per website for easy local development @Todo: wizard to generate repository with configs @Todo: Documentation
  • 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. 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