SlideShare a Scribd company logo
FLOW & TYPO3 Deployment

         with
Christopher Hlubek networkteam.com
     Tobias Liebig etobi.de



Your     Speakers
How to deploy
your code       ?
Manual
Deployment
Manual deployment
# ssh testuser@my-staging-server.example.com
user123 $ cd /var/www/project
user123 $ git pull --rebase
user123 $ git submodule init
user123 $ git submodule update
user123 $ rm -rf Data/Temporary/Production
user123 $ ./flow3 doctrine:migrate
user123 $ ./flow3 cache:warmup

# ssh user123@my-live-server1.example.com
user123 $ cd /home/myproject/public_html
user123 $ git pull --rebase
user123 $ git submodule init
user123 $ git submodule update
user123 $ rm -rf Data/Temporary/Production
user123 $ ./flow3 doctrine:migrate
user123 $ ./flow3 cache:warmup

# ssh user123@my-live-server2.example.com
user123 $ cd /home/myproject/public_html
user123 $ git pull --rebase
                                               Lot of work
user123 $ git submodule init


                                               Erroneous
user123 $ git submodule update
user123 $ rm -rf Data/Temporary/Production
user123 $ ./flow3 doctrine:migrate
user123 $ ./flow3 cache:warmup
Automated
Deployment
Possible solutions

  Bash       Phing     Ant
  Script     Script   Script



Capistrano     ...
                      PHP?
Environments

                 Integration           Load-Testing

Live   Staging

                               Development
                                 Development
Requirements

  Multiple
               Rollback     Extensibility
Environments




Smoke Tests    Clustering        ...
Meet
Where‘s the          wave
Continuous
Integration   Surf     Infrastructure




Development
Ride the           wave
                  Surf             Repository
        Your
  application   Deployment
                             SSH         Git
    Code
   Assets                           Your Server
Configuration
Build/Surf/planetflow3.php

<?php

$workflow = new TYPO3SurfDomainModelSimpleWorkflow();
$deployment->setWorkflow($workflow);

$application = new TYPO3SurfApplicationFLOW3();
$application->setDeploymentPath('/var/www/planetflow3-Integration');
$application->setOption('repositoryUrl',
  'git://github.com/chlu/Planetflow3-Distribution.git');

$node = new TYPO3SurfDomainModelNode('integration-server');
$node->setHostname('planetflow3-integration.example.com');
$application->addNode($node);




   A simple deployment
Running the deployment
Surf Architecture
Packages




           Your package

               Surf
                          Standalone
            Flow              or
                           Included
The Surf Model
              Deployment               Environments
Workflow

                Deployment




                  Application          Code / Assets


           Node                 Node   Server
Workflow
         initialize   Create release structure
         update       Code update (e.g. Git)
         migrate      Migration (e.g. Doctrine)
Stages   finalize      Finalize release (cache warmup)
           test       Test release (smoke test)
          switch      Publish release to live state
         cleanup      Cleanup old releases
Tasks
Workflow            Base Application
 initialize   Create Directories


  update      Create Symlinks      Git Checkout


  migrate


    ...


  switch      Switch Symlinks


  cleanup     Remove Releases
Adding Tasks
Workflow             Flow Application
 initialize    Create Directories


  update        Create Symlinks     Git Checkout


  migrate        Flow Migrate


    ...


  switch        Switch Symlinks


  cleanup       Remove Releases
Task

           Task


execute(...)
rollback(...)
Rollback
Workflow            Base Application
 initialize   Create Directories


  update      Create Symlinks      Git Checkout


  migrate       Flow Migrate


    ...


  switch      Switch Symlinks


  cleanup     Remove Releases
Rollback
Workflow            Base Application
 initialize   Create Directories


  update      Create Symlinks      Git Checkout


  migrate       Flow Migrate


    ...


  switch      Switch Symlinks


  cleanup     Remove Releases
Rollback
Workflow            Base Application
 initialize   Create Directories


  update      Create Symlinks      Git Checkout


  migrate       Flow Migrate


    ...


  switch      Switch Symlinks


  cleanup     Remove Releases
The    Node view
myserver1.example.com

               Apache

           www.example.com
 VHosts




  initialize
The    Node view
myserver1.example.com

               Apache          Deployment path
                             ├── cache
           www.example.com   ├── releases
 VHosts




                             └── shared




  initialize
The         Node view
myserver1.example.com

               Apache              Deployment path
                                 ├──   cache
           www.example.com       ├──   releases
 VHosts




                                 │     ├── 20120101111100
                                 │     └── next
                                 └──   shared
           next.example.com




  initialize            update
The         Node view
myserver1.example.com

               Apache              Deployment path
                                 ├──   cache
           www.example.com       ├──   releases
 VHosts




                                 │     ├── 20120101111100
                                 │     └── current
                                 └──   shared
           next.example.com




  initialize            update     ...               switch
The       Node view
                                                  Next release
myserver1.example.com

           Apache              Deployment path
                             ├──   cache
          www.example.com    ├──   releases
 VHosts




                             │     ├── 20120101111100
                             │     └── current
                             └──   shared
          next.example.com
The    Node view
myserver1.example.com

               Apache           Deployment path
                              ├──   cache
           www.example.com    ├──   releases
 VHosts




                              │     ├── 20120101111100
                              │     └── current
                              └──   shared
           next.example.com




  initialize
The         Node view
myserver1.example.com

               Apache              Deployment path
                                 ├──   cache
           www.example.com       ├──   releases
 VHosts




                                 │     ├── 20120101111100
                                 │     ├── 20120102122200
                                 │     └── current
           next.example.com      └──   shared




  initialize            update
The         Node view
myserver1.example.com

               Apache              Deployment path
                                 ├──   cache
           www.example.com       ├──   releases
 VHosts




                                 │     ├── 20120101111100
                                 │     ├── 20120102122200
                                 │     ├── current
           next.example.com      │     └── next
                                 └──   shared




  initialize            update
The         Node view
myserver1.example.com

               Apache              Deployment path
                                 ├──   cache
           www.example.com       ├──   releases
 VHosts




                                 │     ├── 20120101111100
                                 │     ├── 20120102122200
                                 │     ├── current
           next.example.com      │     └── next
                                 └──   shared




  initialize            update     ...
The         Node view
myserver1.example.com

               Apache              Deployment path
                                 ├──   cache
           www.example.com       ├──   releases
 VHosts




                                 │     ├── 20120101111100
                                 │     ├── 20120102122200
                                 │     ├── current
           next.example.com      │     └── next
                                 └──   shared




  initialize            update     ...               switch
The         Node view
myserver1.example.com

               Apache              Deployment path
                                 ├──   cache
           www.example.com       ├──   releases
 VHosts




                                 │     ├── 20120101111100
                                 │     ├── 20120102122200
                                 │     ├── previous
           next.example.com      │     └── current
                                 └──   shared




  initialize            update     ...               switch
Multiple Nodes
           myserver1   myserver2   myserver3
Workflow
Multiple Nodes
           myserver1     myserver2     myserver3
Workflow

            initialize    initialize    initialize
Multiple Nodes
           myserver1     myserver2     myserver3
Workflow

            initialize    initialize    initialize

            update         update        update
Multiple Nodes
           myserver1     myserver2     myserver3
Workflow

            initialize    initialize    initialize

            update         update        update

               ...           ...            ...
Multiple Nodes
           myserver1     myserver2     myserver3
Workflow

            initialize    initialize    initialize

            update         update        update

               ...           ...            ...

             switch        switch        switch
Multiple Nodes
           myserver1     myserver2     myserver3
Workflow

            initialize    initialize    initialize

            update         update        update

               ...           ...            ...

             switch        switch        switch

            cleanup       cleanup       cleanup
Further Features

Multi application
Simulate Deployments
Smoke tests
Custom tasks
Application
Deploying a Flow Application

          Flow Application Template


    Create       Composer         Symlink
  Directories      install         Data



   Migrate
                     ...
   Doctrine
Application


              TYPO3
Deploying a TYPO3 CMS

                  Challenges

                    Ext ension       Sym
                   Configuration           lin
                                   uploads k
    typo3_src          Assets         „sh       int
       m od ule      Templates
                                          ae o
                                  fileadminr
    sub                                       “
git

  Special Tasks
Deploying a TYPO3 CMS
                             Delete files in typo3temp
     Clear Caches                   Run Unittests (EXT:phpunit)
(all, pages, configuration)

                                                Run SQL
Execute reports
                             Special Tasks          Add (de-)activate
          Set configuration                           scheduler tasks
                                                  Extension UPDATE function
Compare Database Tool
Refresh extension list           Create sys_news record
Deploying a TYPO3 CMS
                                 Delete files in typo3temp
       Clear Caches                      Run Unittests (EXT:phpunit)
(all, pages, configuration)

 Execute reports
                                       a p i             Run SQL



                              T: co re
                                 Special Tasks              Add (de-)activate

                     E X
           Set configuration


 Compare Database Tool
                                                             scheduler tasks
                                                          Extension UPDATE function


 Refresh extension list              Create sys_news record
http://forge.typo3.org/projects/show/extension-coreapi
Project Deployment



EXT:coreapi   TYPO3 Surf   Best Practice




    ...
Budget application for sprints pending.
Join the discussion on forge.
Additional Sponsoring needed.
Talk to me.
Deploying a TYPO3 CMS

      TYPO3CMS Application Template

  Create        Symlink        Execute
Directories      Data         EXT:coreapi




    ...
Current State
Git is favored
Flexible update planned
SVN, rsync, Tar

In daily use for production
But in Beta state

Stable release in Early 2013
Questions   ?

More Related Content

PDF
Scalable Deployment Architectures with TYPO3 Surf, Git and Jenkins
PPTX
TYPO3 CMS deployment with Jenkins CI
PDF
T3DD13 - Automated deployment for TYPO3 CMS (Workshop)
PDF
Deploying TYPO3 Neos websites using Surf
PDF
TYPO3 Surf Introduction
PDF
Using docker to develop NAS applications
PDF
Capistrano deploy Magento project in an efficient way
KEY
Travis CI: Fun and easy CI for your Plone packages
Scalable Deployment Architectures with TYPO3 Surf, Git and Jenkins
TYPO3 CMS deployment with Jenkins CI
T3DD13 - Automated deployment for TYPO3 CMS (Workshop)
Deploying TYPO3 Neos websites using Surf
TYPO3 Surf Introduction
Using docker to develop NAS applications
Capistrano deploy Magento project in an efficient way
Travis CI: Fun and easy CI for your Plone packages

What's hot (17)

PPT
Python virtualenv & pip in 90 minutes
PDF
GlassFish Embedded API
PDF
Voxxed Luxembourd 2016 Jenkins 2.0 et Pipeline as code
PDF
Virtualenv
PDF
F3X12 FLOW3 Project Lifecycle
PDF
Meetup C++ Floripa - Conan.io
KEY
Travis CI
PDF
CI : the first_step: Auto Testing with CircleCI - (MOSG)
PPTX
Jenkins days workshop pipelines - Eric Long
PDF
InspiringCon15: Bringing TYPO3 Legacy Applications into the Flow
PDF
Developing and Deploying PHP with Docker
PDF
Travis-CI - Continuos integration in the cloud for PHP
PDF
Gitlab - Creating C++ applications with Gitlab CI
PPTX
PHP on Heroku: Deploying and Scaling Apps in the Cloud
PDF
DevOps: Cooking Drupal Deployment
PDF
[MeetUp][2nd] 컭on턺
PPT
Jenkins Scriptler in 90mins
Python virtualenv & pip in 90 minutes
GlassFish Embedded API
Voxxed Luxembourd 2016 Jenkins 2.0 et Pipeline as code
Virtualenv
F3X12 FLOW3 Project Lifecycle
Meetup C++ Floripa - Conan.io
Travis CI
CI : the first_step: Auto Testing with CircleCI - (MOSG)
Jenkins days workshop pipelines - Eric Long
InspiringCon15: Bringing TYPO3 Legacy Applications into the Flow
Developing and Deploying PHP with Docker
Travis-CI - Continuos integration in the cloud for PHP
Gitlab - Creating C++ applications with Gitlab CI
PHP on Heroku: Deploying and Scaling Apps in the Cloud
DevOps: Cooking Drupal Deployment
[MeetUp][2nd] 컭on턺
Jenkins Scriptler in 90mins
Ad

Viewers also liked (12)

PDF
TYPO3 Flow and the Joy of Development (FOSDEM 2013)
PDF
T3CON14EU: Migrating from TYPO3 CMS to TYPO3 Flow
PDF
TYPO3 Flow 2.0 in the field - webtech Conference 2013
PDF
TYPO3 Flow 2.0 (International PHP Conference 2013)
PDF
TYPO3 Flow a solid foundation for medialib.tv
PDF
TYPO3 Flow 2.0 Workshop T3BOARD13
PDF
TYPO3 Flow: Beyond the Blog Example (Inspiring Flow 2013)
PDF
TYPO3 5.0 Experience Concept
PDF
TYPO3 Flow - PHP Framework for Developer Happiness
PDF
Testing TYPO3 Flow Applications with Behat
PDF
TYPO3 Neos - past, present and future (T3CON14EU)
PDF
Using Document Databases with TYPO3 Flow
TYPO3 Flow and the Joy of Development (FOSDEM 2013)
T3CON14EU: Migrating from TYPO3 CMS to TYPO3 Flow
TYPO3 Flow 2.0 in the field - webtech Conference 2013
TYPO3 Flow 2.0 (International PHP Conference 2013)
TYPO3 Flow a solid foundation for medialib.tv
TYPO3 Flow 2.0 Workshop T3BOARD13
TYPO3 Flow: Beyond the Blog Example (Inspiring Flow 2013)
TYPO3 5.0 Experience Concept
TYPO3 Flow - PHP Framework for Developer Happiness
Testing TYPO3 Flow Applications with Behat
TYPO3 Neos - past, present and future (T3CON14EU)
Using Document Databases with TYPO3 Flow
Ad

Similar to T3CON12 Flow and TYPO3 deployment with surf (20)

PDF
Rock Solid Deployment of Web Applications
PDF
Deployment Tactics
PDF
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
PDF
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
PDF
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
PDF
Node.js in production
PDF
Deployment With Subversion - Lorna Mitchell
 
PDF
PHP Deployment With SVN
KEY
Full-Stack CakePHP Deployment
PDF
PuppetCamp SEA 1 - Puppet Deployment at OnApp
PDF
Puppet Deployment at OnApp
PDF
PuppetCamp SEA 1 - Puppet Deployment at OnApp
PDF
"13 ways to run web applications on the Internet" Andrii Shumada
PPTX
Linuxtag 2012 - continuous delivery - dream to reality
PPTX
Introduction to DevOps
PDF
Rise of the machines: Continuous Delivery at SEEK - YOW! Night Summary Slides
PDF
php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps
PDF
Dipping Your Toes Into Cloud Native Application Development
PDF
Deployment Nirvana
PDF
Cloud Foundry, Spring and Vaadin
Rock Solid Deployment of Web Applications
Deployment Tactics
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
Symfony Live NYC 2014 - Rock Solid Deployment of Symfony Apps
Continuous Integration with Open Source Tools - PHPUgFfm 2014-11-20
Node.js in production
Deployment With Subversion - Lorna Mitchell
 
PHP Deployment With SVN
Full-Stack CakePHP Deployment
PuppetCamp SEA 1 - Puppet Deployment at OnApp
Puppet Deployment at OnApp
PuppetCamp SEA 1 - Puppet Deployment at OnApp
"13 ways to run web applications on the Internet" Andrii Shumada
Linuxtag 2012 - continuous delivery - dream to reality
Introduction to DevOps
Rise of the machines: Continuous Delivery at SEEK - YOW! Night Summary Slides
php[architect] Summit Series DevOps 2013 - Rock solid deployment of PHP apps
Dipping Your Toes Into Cloud Native Application Development
Deployment Nirvana
Cloud Foundry, Spring and Vaadin

Recently uploaded (20)

PDF
Unlocking AI with Model Context Protocol (MCP)
PPTX
Understanding_Digital_Forensics_Presentation.pptx
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PPTX
A Presentation on Artificial Intelligence
PDF
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
PDF
CIFDAQ's Market Insight: SEC Turns Pro Crypto
PPT
Teaching material agriculture food technology
PDF
Electronic commerce courselecture one. Pdf
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Modernizing your data center with Dell and AMD
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PPTX
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
PDF
Building Integrated photovoltaic BIPV_UPV.pdf
PPT
“AI and Expert System Decision Support & Business Intelligence Systems”
Unlocking AI with Model Context Protocol (MCP)
Understanding_Digital_Forensics_Presentation.pptx
The AUB Centre for AI in Media Proposal.docx
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
A Presentation on Artificial Intelligence
Bridging biosciences and deep learning for revolutionary discoveries: a compr...
CIFDAQ's Market Insight: SEC Turns Pro Crypto
Teaching material agriculture food technology
Electronic commerce courselecture one. Pdf
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
20250228 LYD VKU AI Blended-Learning.pptx
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Modernizing your data center with Dell and AMD
Encapsulation_ Review paper, used for researhc scholars
Mobile App Security Testing_ A Comprehensive Guide.pdf
Digital-Transformation-Roadmap-for-Companies.pptx
Dropbox Q2 2025 Financial Results & Investor Presentation
PA Analog/Digital System: The Backbone of Modern Surveillance and Communication
Building Integrated photovoltaic BIPV_UPV.pdf
“AI and Expert System Decision Support & Business Intelligence Systems”

T3CON12 Flow and TYPO3 deployment with surf

  • 1. FLOW & TYPO3 Deployment with
  • 2. Christopher Hlubek networkteam.com Tobias Liebig etobi.de Your Speakers
  • 5. Manual deployment # ssh testuser@my-staging-server.example.com user123 $ cd /var/www/project user123 $ git pull --rebase user123 $ git submodule init user123 $ git submodule update user123 $ rm -rf Data/Temporary/Production user123 $ ./flow3 doctrine:migrate user123 $ ./flow3 cache:warmup # ssh user123@my-live-server1.example.com user123 $ cd /home/myproject/public_html user123 $ git pull --rebase user123 $ git submodule init user123 $ git submodule update user123 $ rm -rf Data/Temporary/Production user123 $ ./flow3 doctrine:migrate user123 $ ./flow3 cache:warmup # ssh user123@my-live-server2.example.com user123 $ cd /home/myproject/public_html user123 $ git pull --rebase Lot of work user123 $ git submodule init Erroneous user123 $ git submodule update user123 $ rm -rf Data/Temporary/Production user123 $ ./flow3 doctrine:migrate user123 $ ./flow3 cache:warmup
  • 7. Possible solutions Bash Phing Ant Script Script Script Capistrano ... PHP?
  • 8. Environments Integration Load-Testing Live Staging Development Development
  • 9. Requirements Multiple Rollback Extensibility Environments Smoke Tests Clustering ...
  • 10. Meet
  • 11. Where‘s the wave Continuous Integration Surf Infrastructure Development
  • 12. Ride the wave Surf Repository Your application Deployment SSH Git Code Assets Your Server Configuration
  • 13. Build/Surf/planetflow3.php <?php $workflow = new TYPO3SurfDomainModelSimpleWorkflow(); $deployment->setWorkflow($workflow); $application = new TYPO3SurfApplicationFLOW3(); $application->setDeploymentPath('/var/www/planetflow3-Integration'); $application->setOption('repositoryUrl', 'git://github.com/chlu/Planetflow3-Distribution.git'); $node = new TYPO3SurfDomainModelNode('integration-server'); $node->setHostname('planetflow3-integration.example.com'); $application->addNode($node); A simple deployment
  • 15. Surf Architecture Packages Your package Surf Standalone Flow or Included
  • 16. The Surf Model Deployment Environments Workflow Deployment Application Code / Assets Node Node Server
  • 17. Workflow initialize Create release structure update Code update (e.g. Git) migrate Migration (e.g. Doctrine) Stages finalize Finalize release (cache warmup) test Test release (smoke test) switch Publish release to live state cleanup Cleanup old releases
  • 18. Tasks Workflow Base Application initialize Create Directories update Create Symlinks Git Checkout migrate ... switch Switch Symlinks cleanup Remove Releases
  • 19. Adding Tasks Workflow Flow Application initialize Create Directories update Create Symlinks Git Checkout migrate Flow Migrate ... switch Switch Symlinks cleanup Remove Releases
  • 20. Task Task execute(...) rollback(...)
  • 21. Rollback Workflow Base Application initialize Create Directories update Create Symlinks Git Checkout migrate Flow Migrate ... switch Switch Symlinks cleanup Remove Releases
  • 22. Rollback Workflow Base Application initialize Create Directories update Create Symlinks Git Checkout migrate Flow Migrate ... switch Switch Symlinks cleanup Remove Releases
  • 23. Rollback Workflow Base Application initialize Create Directories update Create Symlinks Git Checkout migrate Flow Migrate ... switch Switch Symlinks cleanup Remove Releases
  • 24. The Node view myserver1.example.com Apache www.example.com VHosts initialize
  • 25. The Node view myserver1.example.com Apache Deployment path ├── cache www.example.com ├── releases VHosts └── shared initialize
  • 26. The Node view myserver1.example.com Apache Deployment path ├── cache www.example.com ├── releases VHosts │   ├── 20120101111100 │   └── next └── shared next.example.com initialize update
  • 27. The Node view myserver1.example.com Apache Deployment path ├── cache www.example.com ├── releases VHosts │   ├── 20120101111100 │   └── current └── shared next.example.com initialize update ... switch
  • 28. The Node view Next release myserver1.example.com Apache Deployment path ├── cache www.example.com ├── releases VHosts │   ├── 20120101111100 │   └── current └── shared next.example.com
  • 29. The Node view myserver1.example.com Apache Deployment path ├── cache www.example.com ├── releases VHosts │   ├── 20120101111100 │   └── current └── shared next.example.com initialize
  • 30. The Node view myserver1.example.com Apache Deployment path ├── cache www.example.com ├── releases VHosts │   ├── 20120101111100 │   ├── 20120102122200 │   └── current next.example.com └── shared initialize update
  • 31. The Node view myserver1.example.com Apache Deployment path ├── cache www.example.com ├── releases VHosts │   ├── 20120101111100 │   ├── 20120102122200 │   ├── current next.example.com │   └── next └── shared initialize update
  • 32. The Node view myserver1.example.com Apache Deployment path ├── cache www.example.com ├── releases VHosts │   ├── 20120101111100 │   ├── 20120102122200 │   ├── current next.example.com │   └── next └── shared initialize update ...
  • 33. The Node view myserver1.example.com Apache Deployment path ├── cache www.example.com ├── releases VHosts │   ├── 20120101111100 │   ├── 20120102122200 │   ├── current next.example.com │   └── next └── shared initialize update ... switch
  • 34. The Node view myserver1.example.com Apache Deployment path ├── cache www.example.com ├── releases VHosts │   ├── 20120101111100 │   ├── 20120102122200 │   ├── previous next.example.com │   └── current └── shared initialize update ... switch
  • 35. Multiple Nodes myserver1 myserver2 myserver3 Workflow
  • 36. Multiple Nodes myserver1 myserver2 myserver3 Workflow initialize initialize initialize
  • 37. Multiple Nodes myserver1 myserver2 myserver3 Workflow initialize initialize initialize update update update
  • 38. Multiple Nodes myserver1 myserver2 myserver3 Workflow initialize initialize initialize update update update ... ... ...
  • 39. Multiple Nodes myserver1 myserver2 myserver3 Workflow initialize initialize initialize update update update ... ... ... switch switch switch
  • 40. Multiple Nodes myserver1 myserver2 myserver3 Workflow initialize initialize initialize update update update ... ... ... switch switch switch cleanup cleanup cleanup
  • 41. Further Features Multi application Simulate Deployments Smoke tests Custom tasks
  • 43. Deploying a Flow Application Flow Application Template Create Composer Symlink Directories install Data Migrate ... Doctrine
  • 44. Application TYPO3
  • 45. Deploying a TYPO3 CMS Challenges Ext ension Sym Configuration lin uploads k typo3_src Assets „sh int m od ule Templates ae o fileadminr sub “ git Special Tasks
  • 46. Deploying a TYPO3 CMS Delete files in typo3temp Clear Caches Run Unittests (EXT:phpunit) (all, pages, configuration) Run SQL Execute reports Special Tasks Add (de-)activate Set configuration scheduler tasks Extension UPDATE function Compare Database Tool Refresh extension list Create sys_news record
  • 47. Deploying a TYPO3 CMS Delete files in typo3temp Clear Caches Run Unittests (EXT:phpunit) (all, pages, configuration) Execute reports a p i Run SQL T: co re Special Tasks Add (de-)activate E X Set configuration Compare Database Tool scheduler tasks Extension UPDATE function Refresh extension list Create sys_news record http://forge.typo3.org/projects/show/extension-coreapi
  • 48. Project Deployment EXT:coreapi TYPO3 Surf Best Practice ...
  • 49. Budget application for sprints pending.
  • 50. Join the discussion on forge.
  • 53. Deploying a TYPO3 CMS TYPO3CMS Application Template Create Symlink Execute Directories Data EXT:coreapi ...
  • 54. Current State Git is favored Flexible update planned SVN, rsync, Tar In daily use for production But in Beta state Stable release in Early 2013

Editor's Notes

  • #2: \n
  • #3: \n
  • #4: \n
  • #5: What does it mean to deploy your code:\n\n- Checkout or update Code from (hopefully) VCS\n- Maybe update some configuration\n- Maybe restart some service (Apache)\n- Clear some cache\n- Do some database updates\n- Follow a detailed release plan\n\nRight order, the same every time\n
  • #6: \n
  • #7: \n
  • #8: \n
  • #9: \n
  • #10: \n
  • #11: \n
  • #12: \n
  • #13: \n
  • #14: \n
  • #15: \n
  • #16: \n
  • #17: \n
  • #18: \n
  • #19: \n
  • #20: \n
  • #21: \n
  • #22: \n
  • #23: \n
  • #24: Story initial Kickoff\n
  • #25: Story initial Kickoff\n
  • #26: Story initial Kickoff\n
  • #27: Story initial Kickoff\n
  • #28: Story initial Kickoff\n
  • #29: Story initial Kickoff\n
  • #30: Surf is a TYPO3 Flow application\nSurf can be used standalone\nSurf can deploy anything\nInfluenced by Capistrano\nEspecially suited for multi-application, multi-server (clustered) deployments\nDiagram of Surf with SSH connections and Git etc.\nSurf is and can be extended with simple PHP\nDeclarative but scriptable\n
  • #31: Surf is a TYPO3 Flow application\nSurf can be used standalone\nSurf can deploy anything\nInfluenced by Capistrano\nEspecially suited for multi-application, multi-server (clustered) deployments\nDiagram of Surf with SSH connections and Git etc.\nSurf is and can be extended with simple PHP\nDeclarative but scriptable\n
  • #32: Surf is a TYPO3 Flow application\nSurf can be used standalone\nSurf can deploy anything\nInfluenced by Capistrano\nEspecially suited for multi-application, multi-server (clustered) deployments\nDiagram of Surf with SSH connections and Git etc.\nSurf is and can be extended with simple PHP\nDeclarative but scriptable\n
  • #33: Surf is a TYPO3 Flow application\nSurf can be used standalone\nSurf can deploy anything\nInfluenced by Capistrano\nEspecially suited for multi-application, multi-server (clustered) deployments\nDiagram of Surf with SSH connections and Git etc.\nSurf is and can be extended with simple PHP\nDeclarative but scriptable\n
  • #34: Surf is a TYPO3 Flow application\nSurf can be used standalone\nSurf can deploy anything\nInfluenced by Capistrano\nEspecially suited for multi-application, multi-server (clustered) deployments\nDiagram of Surf with SSH connections and Git etc.\nSurf is and can be extended with simple PHP\nDeclarative but scriptable\n
  • #35: \n
  • #36: \n
  • #37: \n
  • #38: \n
  • #39: \n
  • #40: \n
  • #41: \n
  • #42: \n
  • #43: \n
  • #44: \n
  • #45: \n
  • #46: \n
  • #47: \n
  • #48: \n
  • #49: \n
  • #50: \n
  • #51: \n
  • #52: \n
  • #53: \n
  • #54: \n
  • #55: Declarative but scriptable\n
  • #56: Declarative but scriptable\n
  • #57: Declarative but scriptable\n
  • #58: \n
  • #59: \n
  • #60: \n
  • #61: \n
  • #62: \n
  • #63: \n
  • #64: \n
  • #65: \n
  • #66: \n
  • #67: \n
  • #68: \n
  • #69: \n
  • #70: \n
  • #71: \n
  • #72: \n
  • #73: \n
  • #74: \n
  • #75: \n
  • #76: \n
  • #77: \n
  • #78: \n
  • #79: \n
  • #80: \n
  • #81: \n
  • #82: \n
  • #83: \n
  • #84: \n
  • #85: \n
  • #86: Base application is basic template\n
  • #87: Base application is basic template\n
  • #88: Base application is basic template\n
  • #89: Base application is basic template\n
  • #90: Base application is basic template\n
  • #91: Base application is basic template\n
  • #92: Base application is basic template\n
  • #93: Base application is basic template\n
  • #94: Base application is basic template\n
  • #95: Base application is basic template\n
  • #96: Base application is basic template\n
  • #97: Base application is basic template\n
  • #98: Base application is basic template\n
  • #99: Base application is basic template\n
  • #100: Base application is basic template\n
  • #101: Base application is basic template\n
  • #102: Base application is basic template\n
  • #103: Flow application is predefined for Flow\nTasks can be added to stages\nOr insert before or after other tasks\n
  • #104: \n
  • #105: \n
  • #106: \n
  • #107: \n
  • #108: \n
  • #109: \n
  • #110: \n
  • #111: \n
  • #112: \n
  • #113: \n
  • #114: \n
  • #115: \n
  • #116: \n
  • #117: \n
  • #118: \n
  • #119: \n
  • #120: \n
  • #121: \n
  • #122: \n
  • #123: \n
  • #124: \n
  • #125: \n
  • #126: \n
  • #127: \n
  • #128: \n
  • #129: * the node\n* apache webserver\n* several virtual hosts\n
  • #130: * the node\n* apache webserver\n* several virtual hosts\n
  • #131: * the node\n* apache webserver\n* several virtual hosts\n
  • #132: * the node\n* apache webserver\n* several virtual hosts\n
  • #133: * the node\n* apache webserver\n* several virtual hosts\n
  • #134: * run deployment\n* initialize create directories\n
  • #135: * run deployment\n* initialize create directories\n
  • #136: * update checks out the code\n* next points to the next release\n
  • #137: * switch\n* current points to the latest release\n* next is removed after deployment\n
  • #138: * switch\n* current points to the latest release\n* next is removed after deployment\n
  • #139: * switch\n* current points to the latest release\n* next is removed after deployment\n
  • #140: * switch\n* current points to the latest release\n* next is removed after deployment\n
  • #141: * next day, another release\n* current points to yesterdays release\n
  • #142: * initialize don&amp;#x2018;t need to do anything\n
  • #143: * update checks out the new release\n* current still points to yesterdays release\n
  • #144: * next points to the next release\n* running tests on next\n
  • #145: * next points to the next release\n* running tests on next\n
  • #146: * everything is fine\n* current point to the new release\n* previous points to yesterdays release\n* next removed\n
  • #147: * everything is fine\n* current point to the new release\n* previous points to yesterdays release\n* next removed\n
  • #148: stages executed one after the other on each host\n
  • #149: stages executed one after the other on each host\n
  • #150: stages executed one after the other on each host\n
  • #151: stages executed one after the other on each host\n
  • #152: stages executed one after the other on each host\n
  • #153: stages executed one after the other on each host\n
  • #154: stages executed one after the other on each host\n
  • #155: stages executed one after the other on each host\n
  • #156: stages executed one after the other on each host\n
  • #157: stages executed one after the other on each host\n
  • #158: stages executed one after the other on each host\n
  • #159: stages executed one after the other on each host\n
  • #160: stages executed one after the other on each host\n
  • #161: stages executed one after the other on each host\n
  • #162: stages executed one after the other on each host\n
  • #163: stages executed one after the other on each host\n
  • #164: stages executed one after the other on each host\n
  • #165: stages executed one after the other on each host\n
  • #166: \n
  • #167: \n
  • #168: \n
  • #169: \n
  • #170: \n
  • #171: \n
  • #172: Tasks can be added to stages\nInsert before or after other tasks\n
  • #173: Tasks can be added to stages\nInsert before or after other tasks\n
  • #174: Tasks can be added to stages\nInsert before or after other tasks\n
  • #175: Tasks can be added to stages\nInsert before or after other tasks\n
  • #176: Tasks can be added to stages\nInsert before or after other tasks\n
  • #177: Tasks can be added to stages\nInsert before or after other tasks\n
  • #178: \n
  • #179: * TYPO3 core\n** include in repos as submodule\n* Configuration/..\n** move as much as possible out of the database into files\n** TypoScript, TSConfig, XML-DS, Gridelements\n** versionize these files\n** app assests, templates into &amp;#x201E;site&amp;#x201C; extensions. avoid using fileadmin\n* uploads, &amp;#x201E;user space&amp;#x201C;\n** place them in the shared folder. symlink into each release\n* some special tasks needed\n
  • #180: * TYPO3 core\n** include in repos as submodule\n* Configuration/..\n** move as much as possible out of the database into files\n** TypoScript, TSConfig, XML-DS, Gridelements\n** versionize these files\n** app assests, templates into &amp;#x201E;site&amp;#x201C; extensions. avoid using fileadmin\n* uploads, &amp;#x201E;user space&amp;#x201C;\n** place them in the shared folder. symlink into each release\n* some special tasks needed\n
  • #181: * TYPO3 core\n** include in repos as submodule\n* Configuration/..\n** move as much as possible out of the database into files\n** TypoScript, TSConfig, XML-DS, Gridelements\n** versionize these files\n** app assests, templates into &amp;#x201E;site&amp;#x201C; extensions. avoid using fileadmin\n* uploads, &amp;#x201E;user space&amp;#x201C;\n** place them in the shared folder. symlink into each release\n* some special tasks needed\n
  • #182: * TYPO3 core\n** include in repos as submodule\n* Configuration/..\n** move as much as possible out of the database into files\n** TypoScript, TSConfig, XML-DS, Gridelements\n** versionize these files\n** app assests, templates into &amp;#x201E;site&amp;#x201C; extensions. avoid using fileadmin\n* uploads, &amp;#x201E;user space&amp;#x201C;\n** place them in the shared folder. symlink into each release\n* some special tasks needed\n
  • #183: * TYPO3 core\n** include in repos as submodule\n* Configuration/..\n** move as much as possible out of the database into files\n** TypoScript, TSConfig, XML-DS, Gridelements\n** versionize these files\n** app assests, templates into &amp;#x201E;site&amp;#x201C; extensions. avoid using fileadmin\n* uploads, &amp;#x201E;user space&amp;#x201C;\n** place them in the shared folder. symlink into each release\n* some special tasks needed\n
  • #184: * TYPO3 core\n** include in repos as submodule\n* Configuration/..\n** move as much as possible out of the database into files\n** TypoScript, TSConfig, XML-DS, Gridelements\n** versionize these files\n** app assests, templates into &amp;#x201E;site&amp;#x201C; extensions. avoid using fileadmin\n* uploads, &amp;#x201E;user space&amp;#x201C;\n** place them in the shared folder. symlink into each release\n* some special tasks needed\n
  • #185: * TYPO3 core\n** include in repos as submodule\n* Configuration/..\n** move as much as possible out of the database into files\n** TypoScript, TSConfig, XML-DS, Gridelements\n** versionize these files\n** app assests, templates into &amp;#x201E;site&amp;#x201C; extensions. avoid using fileadmin\n* uploads, &amp;#x201E;user space&amp;#x201C;\n** place them in the shared folder. symlink into each release\n* some special tasks needed\n
  • #186: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #187: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #188: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #189: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #190: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #191: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #192: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #193: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #194: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #195: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #196: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #197: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #198: * basically everything you need to do by hand in the backend after a deployment\n* examples, much more you can think of.\n* most of them not yet &amp;#x201E;scriptable&amp;#x201C;\n* missing: CLI Api for these tasks\n\n* EXT:coreapi\n** provide Service/API-Classes for own usage\n** provide a CLI\n\n* can be found on forge\n* still work in progress\n* thanks to georg ringer\n\n
  • #199: Tackle the issue of automated deployment for TYPO3 CMS\n\n* finish coreapi\n* make use of it in Surf (create a Surf Task, Options)\n* tackle several issues in Surf (like option handling, arguments)\n* Best practice doc (&amp;#x201E;Special challenges&amp;#x201C;)\n** how should my repos look like\n** how to get all of my application specific config out of the database\n* some more things on the agenda\n* Things go&amp;#x2018;ing to happen in the next year\n\n
  • #200: Tackle the issue of automated deployment for TYPO3 CMS\n\n* finish coreapi\n* make use of it in Surf (create a Surf Task, Options)\n* tackle several issues in Surf (like option handling, arguments)\n* Best practice doc (&amp;#x201E;Special challenges&amp;#x201C;)\n** how should my repos look like\n** how to get all of my application specific config out of the database\n* some more things on the agenda\n* Things go&amp;#x2018;ing to happen in the next year\n\n
  • #201: Tackle the issue of automated deployment for TYPO3 CMS\n\n* finish coreapi\n* make use of it in Surf (create a Surf Task, Options)\n* tackle several issues in Surf (like option handling, arguments)\n* Best practice doc (&amp;#x201E;Special challenges&amp;#x201C;)\n** how should my repos look like\n** how to get all of my application specific config out of the database\n* some more things on the agenda\n* Things go&amp;#x2018;ing to happen in the next year\n\n
  • #202: Tackle the issue of automated deployment for TYPO3 CMS\n\n* finish coreapi\n* make use of it in Surf (create a Surf Task, Options)\n* tackle several issues in Surf (like option handling, arguments)\n* Best practice doc (&amp;#x201E;Special challenges&amp;#x201C;)\n** how should my repos look like\n** how to get all of my application specific config out of the database\n* some more things on the agenda\n* Things go&amp;#x2018;ing to happen in the next year\n\n
  • #203: \n
  • #204: \n
  • #205: \n
  • #206: \n
  • #207: \n
  • #208: * back to Surf\n* Application for TYPO3CMS\n
  • #209: * back to Surf\n* Application for TYPO3CMS\n
  • #210: * back to Surf\n* Application for TYPO3CMS\n
  • #211: * back to Surf\n* Application for TYPO3CMS\n
  • #212: * back to Surf\n* Application for TYPO3CMS\n
  • #213: \n
  • #214: \n
  • #215: \n
  • #216: \n
  • #217: \n
  • #218: \n