SlideShare a Scribd company logo
Plone deployment 
made easy 
Pawel Lewicki 
Kim Chee Leong 
Goldmund, Wyldebeast & Wunderliebe 
{ lewicki, leong } @gw20e.com
Outline 
● From manual to automatic deployment 
● How Puppet and Fabric are used for 
deployment 
● Deployment demo in screencast 
● Puppet server orchestration 
● Fabric in detail
From manual to 
automatic deployment 
our path to automatic deployment
Typical Plone release 
@GWW 
● Mark eggs/modules using git tag 
● Update mr developer sources with tag 
● SSH to server 
● Clone new buildout in releases directory 
● Bootstrap buildout and execute 
● Switch previous release to new release 
● If on a cluster set-up, rinse and repeat

Recommended for you

Instruction: dev environment
Instruction: dev environmentInstruction: dev environment
Instruction: dev environment

This document provides instructions for installing various development tools on Mac OSX, including Xcode, command line tools, Homebrew, Ruby, Python, VirtualBox, Vagrant, Chef, and Ansible. It describes downloading and installing each tool, and in some cases providing additional configuration steps or notes on cleaning up existing installations. The overall purpose is to set up a standard development environment with common utilities.

osxtoolsenvironment
Trust, but verify | Testing with Docker Containers
Trust, but verify | Testing with Docker ContainersTrust, but verify | Testing with Docker Containers
Trust, but verify | Testing with Docker Containers

This presentation will dive into testing with Docker Containers * Building Docker containers and testing with Serverspec * Testing Docker Compose with Serverspec * Taking advantage of Docker sibling containers to run serverspec in a container * Running large test matrix with Serverspec * Demonstrate using pry/pry-rescue to debug large test The lab is available at: https://github.com/nanliu/docker-serverspec

testingserverspecsoftware testing
How NOT to write in Node.js
How NOT to write in Node.jsHow NOT to write in Node.js
How NOT to write in Node.js

This document discusses Node.js architecture and how software lives in hardware. It notes that Node.js uses a single-threaded, event loop model to avoid context switching and blocking I/O. This allows high throughput for operations like HTTP requests but is not optimal for long-running computations in a single thread. The document also addresses issues like callback hell and scaling event emitters, providing solutions like using promises and external queue systems. It concludes by stating Node.js is best for I/O operations, not all problems, and event loop models have existed in other frameworks before Node.js.

Plone release @GWW 
using Fabric 
● All previous steps in one Fabric script 
● Allows ‘dummy-proof’ releases 
Run: 
fab make_tag 
fab deploy 
fab switch 
And Bob is your uncle!
xkcd - automation 
http://xkcd.com/1319/
Why automatic 
deployment? 
�� Avoid repetitive tasks 
● Error-proof 
● Immune to typo’s 
● Consistent environments 
● Time efficient
Why automatic 
deployment? 
● Avoid repetitive tasks 
● Error-proof 
● Immune to typo’s 
● Consistent environments 
● Time efficient 
nothing* should be done manually 
on the server

Recommended for you

Adrian Mouat - Docker Tips and Tricks
 Adrian Mouat - Docker Tips and Tricks Adrian Mouat - Docker Tips and Tricks
Adrian Mouat - Docker Tips and Tricks

A quickfire rundown of concise tips designed to make your daily life with Docker better! There will be something for Docker users of all experience levels.

docker
Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014

The document discusses test driven development (TDD) approaches for Puppet modules. It recommends writing tests before code using tools like RSpec and guard. The document provides examples of unit testing Puppet code and definitions using rspec-puppet. It also discusses acceptance testing Puppet code and modules using Beaker against real systems. Overall, the document promotes writing tests for Puppet code to ensure quality and prevent regressions across different operating systems and versions.

puppetconf 2014
Vagrant
VagrantVagrant
Vagrant

Vagrant allows developers to easily create and manage virtual machine environments for development. It provides a simple configuration file format and CLI to automate the setup of VMs using various providers like VirtualBox, VMware, AWS, and more. Vagrant can provision VMs using tools like Chef, Puppet, Ansible and Shell scripts. It aims to allow exact clones of production environments for testing and to simplify tasks like testing infrastructure changes.

devopsvagrant
How Puppet and Fabric 
are used for deployment
Initial server setup with 
Puppet 
● Puppet is used for server orchestration 
● Puppet prepares the servers 
● When Puppet is done, Fabric is used to 
deploy buildouts
Puppet diagram
Buildout deployment with 
Fabric 
● Uses tst, acc and prd layers 
● Knows configuration for buildout 
● Deploys and runs buildouts 
● Does several other tasks

Recommended for you

Everything as a code
Everything as a codeEverything as a code
Everything as a code

Процесс разработки не начинается и не заканчивается на написании кода программного продукта. Мы пишем документацию, придумываем, как это всё оттестировать, и заботимся о том, чтобы доступность приложения была на высоком уровне. Мы все делаем привычные вещи привычным для нас способом. Порой выполняя много ручной и неэффективной работы. Но что, если есть другой, радикальный подход. Можно ли формализовать свою деятельность и переложить её в код? Какие практики и инструменты для этого использовать? В докладе будет представлен личный опыт автора по автоматизации различных элементов разработки ПО.

software developmentdevops
Infrastructure = code - 1 year later
Infrastructure = code - 1 year laterInfrastructure = code - 1 year later
Infrastructure = code - 1 year later

This document discusses using infrastructure as code to automate server setup and deployment using Ansible. It outlines benefits like reducing human error, allowing developers and operations teams to work seamlessly through continuous integration and testing. Specifics of the infrastructure as code stack used are covered, including Ansible for configuration management, Docker for containers, and Vagrant for local virtual machine provisioning. Challenges and lessons learned around testing, debugging, and migrating existing systems are also presented. The overall message is that infrastructure as code takes time to implement but results in major improvements to deployment speed, reliability, and ability to rapidly iterate.

continuous integrationinfrastructuredevops
Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)

This fabric workshop aims to create a deploy tool using Fabric that can deploy code to servers defined in roles, show existing tags, change to a different tagged version, and remove tags. The agenda includes demonstrating local tasks, remote tasks using an Ansible inventory file, and functions for mkdir, cd, and uploading files. Fabric provides a simple way to automate operations across multiple servers.

softwaredevopstechnology
Fabric diagram
Deployment screencast 
using Puppet and Fabric
Puppet server 
orchestration 
paving the way for Fabric
Example Puppet config 
node 'ploneconf.puppet' { 
package { 'apache2': ensure => installed } 
appie::app { "ploneconfapp": 
envs => { 
prd => { uid => 3011 }, 
acc => { uid => 3012 }, 
tst => { uid => 3013 }, 
}, 
webserver => 'apache2', 
accountinfo => $gw20e::user_accounts, 
} 
class { 'ssh': 
server_options => { 
'PasswordAuthentication' => 'no', 
'PermitRootLogin' => 'no', 
}, 
} 
} 
1 / n

Recommended for you

Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with Ansible

Zero Downtime Deployment with Ansible - learn how to provision Linux servers with a web-proxy, a database and automate zero downtime deployment of a Java application to a load balanced environment. These are the slides from a tutorial held at the Velocity Conference in Barcelona November 19th, 2014. Git repo: https://github.com/steinim/zero-downtime-ansible

devopsansibleprovisioning
Magento 2 Seminar - Miguel Balparda - M2 with PHP 7 and Varnish
Magento 2 Seminar - Miguel Balparda - M2 with PHP 7 and VarnishMagento 2 Seminar - Miguel Balparda - M2 with PHP 7 and Varnish
Magento 2 Seminar - Miguel Balparda - M2 with PHP 7 and Varnish

This document summarizes the results of performance tests conducted on a Magento 2 store using different PHP versions and configurations. The tests measured the transaction rate, number of transactions, and response time of Magento 2 using PHP 5.6 alone, PHP 5.6 with Varnish, PHP 7 alone, and PHP 7 with Varnish. The main findings were that PHP 7 significantly outperformed PHP 5.6, and that adding Varnish provided major improvements when combined with both PHP 5.6 and PHP 7, especially in terms reducing response times.

m2seminarmagento2magento
How to Write Node.js Module
How to Write Node.js ModuleHow to Write Node.js Module
How to Write Node.js Module

This document provides an overview of how to write Node.js modules. It discusses writing modules in JavaScript and C/C++, loading modules, publishing modules to the NPM registry, and some advanced topics like handling arguments and creating classes. The key points covered are: - Modules can be written in JavaScript or C/C++ and exported via module.exports. - Modules are loaded using require() and can be either core or third-party modules. - Publishing a module to NPM involves initializing a package, uploading the files to the registry, and adding a main entry point. - Advanced topics include getting arguments in C/C++ modules, understanding JavaScript types, and creating classes with

node.js module javascript c/c++
Puppet tasks 
● User accounts for TAP environments: 
o app-mysite-prd in /opt/APPS/mysite/prd 
o app-mysite-acc in /opt/APPS/mysite/acc 
o app-mysite-tst in /opt/APPS/mysite/tst 
● Webserver config is mapped to each 
application user 
$ cat /etc/apache2/sites-enabled/zzz-app-mysite-prd 
Include /opt/APPS/mysite/prd/sites-enabled/ 
● SSH Keys of developers are synced 
● Buildout cache is enabled
Fabric in detail 
using gww.buildout and gww.buildout-fabric
Plone Fabric features 
● Automatic deployment 
● Push buildout config using jinja templates 
● Extended TAP-layers 
● Switching between releases 
● But also; supports git branches, virtual host 
for webserver, copying zodb to local 
buildout.
Release switch using 
Fabric 
1. Update current symlink 
rm -f ~/current 
ln -s ~/releases/20141028 ~/current 
1. Start supervisor daemon in new buildout 
~/releases/20141028/bin/supervisord 
1. For each service in supervisor: 
a. Stop service in old buildout 
b. Start service in new buildout 
2. Shutdown supervisor in old buildout 
~/releases/20130101/bin/supervisorctl shutdown

Recommended for you

Using cgroups in docker container
Using cgroups in docker containerUsing cgroups in docker container
Using cgroups in docker container

This document discusses experimenting with cgroups in Docker containers to isolate processes. It describes installing Docker, launching an Ubuntu container with capabilities enabled, and installing cgroup tools. It then mounts the cpuset and cpu cgroup hierarchies and creates low and high cgroups. Different CPU shares are assigned to each cgroup and processes are run in each to demonstrate the CPU isolation between cgroups.

dockercpucgroup-bin
Npm: beyond 'npm i'
Npm: beyond 'npm i'Npm: beyond 'npm i'
Npm: beyond 'npm i'

NPM scripts allow developers to run predefined scripts at different stages of installing, publishing, and interacting with packages. These scripts are defined in the package.json file under the "scripts" key. Common script names include preinstall, install, postinstall, prepublish, publish, and postpublish. NPM versioning follows semantic versioning principles where versions are denoted as MAJOR.MINOR.PATCH. Dependencies can specify version ranges like tilde (~), caret (^), and hyphen (-) to control updates. Private NPM repositories and shrinkwrapping help ensure reproducible builds across environments. Scoped packages allow publishing packages under a unique namespace.

npm node.js javascript package-manager
How to make a large C++-code base manageable
How to make a large C++-code base manageableHow to make a large C++-code base manageable
How to make a large C++-code base manageable

My talk will cover how to work with a large C++ code base professionally. How to write code for debuggability, how to work effectively even due the long C++ compilation times, how and why to utilize the STL algorithms, how and why to keep interfaces clean. In addition, general convenience methods like making wrappers to make the code less error prone (for example ranged integers, listeners, concurrent values). Also a little bit about common architecture patterns to avoid (virtual classes), and patterns to encourage (pure functions), and how std::function/lambda functions can be used to make virtual classes copyable.

c++ corehard spring 2017с++
● Fabric is controlled from the local buildout: 
./bin/fab -l 
Available commands: 
deploy Create new buildout in release dir 
switch Switch supervisor to latest buildout 
test Test if the connection is working 
● Deploying to test environment: 
./bin/fab deploy:layer=tst,branch=new-feature
Example deployment config (1/2) 
prdfrontend = dict( 
hosts=prd['hosts'], 
buildout='releases/frontend', 
varnish={'port': 48083}, 
haproxy={'port': 48082, 'instances': prd['instances'], }, 
webserver='apache2', 
sitename='ploneconfapp-prd.puppet', 
site_id=prd['site_id'], 
) 
prdbackend = dict( 
hosts=prd['hosts'], 
buildout='releases/backend', 
zeo=dict(base='/data1/APPS/ploneconfapp/prd', **prd['zeo']), 
)
Example Deployment config (2/2) 
prd = dict( 
hosts=['app-ploneconfapp-prd@ploneconf.puppet',], 
buildout=_datestamped('releases/%Y-%m-%d'), 
current_link='current', 
auto_switch=False, 
modules=_modules, 
third_party_modules=_third_party_modules, 
zeo={ 
'ip': ‘ploneconf.puppet’, 'port': 48081, 
}, 
instances={ 
'ports': {'instance0': 8080, 'instance1': 8081}, 
'ipaddresses': _servers, 
}, 
site_id=_site_id, 
credentials={'username': 'admin', 'password': 'secret', }, 
remote_configs={'clockusers': 'clockuser.cfg'}, 
sentry={ 
'dsn': 'https://usr:passwd@sentry.gw20e.com/29', 
'level': 'ERROR', 
}, 
)
Example jinja template / buildout 
[supervisor] 
programs += 
... 
{% if varnish %} 
60 varnish ${buildout:directory}/bin/varnish true 
{% endif %} 
{% if varnish %} 
[varnish] 
port = {{ varnish.port }} 
{% endif %}

Recommended for you

Goldmund, Wyldebeast & Wunderliebe - Responsive Webdesign Workshop
Goldmund, Wyldebeast & Wunderliebe - Responsive Webdesign WorkshopGoldmund, Wyldebeast & Wunderliebe - Responsive Webdesign Workshop
Goldmund, Wyldebeast & Wunderliebe - Responsive Webdesign Workshop

Workshop about responsive web design (RWD), given on 13 Februari 2013. This is a presentation about how to create a responsive website. Different tools and libraries which are used for RWD are covered Examples used in the workshop can be found here: https://github.com/Goldmund-Wyldebeast-Wunderliebe/rwd-workshop

workshopresponsiveinternet
PyGrunn - Buildout presentation
PyGrunn - Buildout presentationPyGrunn - Buildout presentation
PyGrunn - Buildout presentation

Buildout is a build tool for Python projects. It's a self-contained environment which manages depencies for a project, install/configure software components and create repeatable DTAP enviroments.

python buildout deployment
Essential Plone development tools - Plone conf 2012
Essential Plone development tools - Plone conf 2012Essential Plone development tools - Plone conf 2012
Essential Plone development tools - Plone conf 2012

Slides for the talk given at Plone Conference 2012. In the following collective package further explaination can be found about the tools discussed: https://github.com/collective/collective.exampledevtools

ploneploneconftools
Example jinja template / apache 
{% if varnish %} 
{% set port = varnish.port %} 
{% elif haproxy %} 
{% set port = haproxy.port %} 
{% else %} 
{% set port = instances.ports.instance0 %} 
{% endif %} 
<VirtualHost *:80> 
ServerName {{ sitename }} 
RewriteEngine on 
ProxyPass / http://localhost:{{ port }}/VirtualHostBase/http/{{ sitename }}:80/ 
ProxyPassReverse / http://localhost:{{ port }}/../http/{{ sitename }}:80/ 
</VirtualHost>
Github repositories 
● https://github.com/search?q=ploneconf2014_gww 
● Puppet module: 
o http://git.io/2NLMtg (shortened url) 
o https://github.com/Goldmund-Wyldebeast-Wunderliebe/puppet-appie 
● Fabric module: 
o http://git.io/kVdsnw (shortened url) 
o https://github.com/Goldmund-Wyldebeast- 
Wunderliebe/gww.buildout-fabric 
● GWW Plone buildout 
o http://git.io/PzdjqQ (shortened url) 
o https://github.com/Goldmund-Wyldebeast- 
Wunderliebe/gww.buildout
Thank you! 
Goldmund, Wyldebeast & Wunderliebe 
{ lewicki, leong } @gw20e.com

More Related Content

What's hot

DevOps(2) : Vagrant - (MOSG)
DevOps(2) : Vagrant  -  (MOSG)DevOps(2) : Vagrant  -  (MOSG)
DevOps(2) : Vagrant - (MOSG)
Soshi Nemoto
 
Puppet User Group Presentation - 15 March 2012
Puppet User Group Presentation - 15 March 2012Puppet User Group Presentation - 15 March 2012
Puppet User Group Presentation - 15 March 2012
Walter Heck
 
DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)
Soshi Nemoto
 
Instruction: dev environment
Instruction: dev environmentInstruction: dev environment
Instruction: dev environment
Soshi Nemoto
 
Trust, but verify | Testing with Docker Containers
Trust, but verify | Testing with Docker ContainersTrust, but verify | Testing with Docker Containers
Trust, but verify | Testing with Docker Containers
Nan Liu
 
How NOT to write in Node.js
How NOT to write in Node.jsHow NOT to write in Node.js
How NOT to write in Node.js
Piotr Pelczar
 
Adrian Mouat - Docker Tips and Tricks
 Adrian Mouat - Docker Tips and Tricks Adrian Mouat - Docker Tips and Tricks
Adrian Mouat - Docker Tips and Tricks
Kevin Cross
 
Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014
Puppet
 
Vagrant
VagrantVagrant
Vagrant
Rob Kinyon
 
Everything as a code
Everything as a codeEverything as a code
Everything as a code
Aleksandr Tarasov
 
Infrastructure = code - 1 year later
Infrastructure = code - 1 year laterInfrastructure = code - 1 year later
Infrastructure = code - 1 year later
Christian Ortner
 
Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)
Soshi Nemoto
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with Ansible
Stein Inge Morisbak
 
Magento 2 Seminar - Miguel Balparda - M2 with PHP 7 and Varnish
Magento 2 Seminar - Miguel Balparda - M2 with PHP 7 and VarnishMagento 2 Seminar - Miguel Balparda - M2 with PHP 7 and Varnish
Magento 2 Seminar - Miguel Balparda - M2 with PHP 7 and Varnish
Yireo
 
How to Write Node.js Module
How to Write Node.js ModuleHow to Write Node.js Module
How to Write Node.js Module
Fred Chien
 
Using cgroups in docker container
Using cgroups in docker containerUsing cgroups in docker container
Using cgroups in docker container
Vinay Jindal
 
Npm: beyond 'npm i'
Npm: beyond 'npm i'Npm: beyond 'npm i'
Npm: beyond 'npm i'
Pieter Herroelen
 
How to make a large C++-code base manageable
How to make a large C++-code base manageableHow to make a large C++-code base manageable
How to make a large C++-code base manageable
corehard_by
 

What's hot (18)

DevOps(2) : Vagrant - (MOSG)
DevOps(2) : Vagrant  -  (MOSG)DevOps(2) : Vagrant  -  (MOSG)
DevOps(2) : Vagrant - (MOSG)
 
Puppet User Group Presentation - 15 March 2012
Puppet User Group Presentation - 15 March 2012Puppet User Group Presentation - 15 March 2012
Puppet User Group Presentation - 15 March 2012
 
DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)DevOps(3) : Ansible - (MOSG)
DevOps(3) : Ansible - (MOSG)
 
Instruction: dev environment
Instruction: dev environmentInstruction: dev environment
Instruction: dev environment
 
Trust, but verify | Testing with Docker Containers
Trust, but verify | Testing with Docker ContainersTrust, but verify | Testing with Docker Containers
Trust, but verify | Testing with Docker Containers
 
How NOT to write in Node.js
How NOT to write in Node.jsHow NOT to write in Node.js
How NOT to write in Node.js
 
Adrian Mouat - Docker Tips and Tricks
 Adrian Mouat - Docker Tips and Tricks Adrian Mouat - Docker Tips and Tricks
Adrian Mouat - Docker Tips and Tricks
 
Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014Test Driven Development with Puppet - PuppetConf 2014
Test Driven Development with Puppet - PuppetConf 2014
 
Vagrant
VagrantVagrant
Vagrant
 
Everything as a code
Everything as a codeEverything as a code
Everything as a code
 
Infrastructure = code - 1 year later
Infrastructure = code - 1 year laterInfrastructure = code - 1 year later
Infrastructure = code - 1 year later
 
Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)Fabric workshop(1) - (MOSG)
Fabric workshop(1) - (MOSG)
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with Ansible
 
Magento 2 Seminar - Miguel Balparda - M2 with PHP 7 and Varnish
Magento 2 Seminar - Miguel Balparda - M2 with PHP 7 and VarnishMagento 2 Seminar - Miguel Balparda - M2 with PHP 7 and Varnish
Magento 2 Seminar - Miguel Balparda - M2 with PHP 7 and Varnish
 
How to Write Node.js Module
How to Write Node.js ModuleHow to Write Node.js Module
How to Write Node.js Module
 
Using cgroups in docker container
Using cgroups in docker containerUsing cgroups in docker container
Using cgroups in docker container
 
Npm: beyond 'npm i'
Npm: beyond 'npm i'Npm: beyond 'npm i'
Npm: beyond 'npm i'
 
How to make a large C++-code base manageable
How to make a large C++-code base manageableHow to make a large C++-code base manageable
How to make a large C++-code base manageable
 

Viewers also liked

Goldmund, Wyldebeast & Wunderliebe - Responsive Webdesign Workshop
Goldmund, Wyldebeast & Wunderliebe - Responsive Webdesign WorkshopGoldmund, Wyldebeast & Wunderliebe - Responsive Webdesign Workshop
Goldmund, Wyldebeast & Wunderliebe - Responsive Webdesign Workshop
Kim Chee Leong
 
PyGrunn - Buildout presentation
PyGrunn - Buildout presentationPyGrunn - Buildout presentation
PyGrunn - Buildout presentation
Kim Chee Leong
 
Essential Plone development tools - Plone conf 2012
Essential Plone development tools - Plone conf 2012Essential Plone development tools - Plone conf 2012
Essential Plone development tools - Plone conf 2012
Kim Chee Leong
 
Responsive webdesign presentatie - Nederlandse Plone gebruikersdag 2012
Responsive webdesign presentatie - Nederlandse Plone gebruikersdag 2012Responsive webdesign presentatie - Nederlandse Plone gebruikersdag 2012
Responsive webdesign presentatie - Nederlandse Plone gebruikersdag 2012
Kim Chee Leong
 
Automated Deployment with Maven - going the whole nine yards
Automated Deployment with Maven - going the whole nine yardsAutomated Deployment with Maven - going the whole nine yards
Automated Deployment with Maven - going the whole nine yards
John Ferguson Smart Limited
 
Start-up kid - Arduino workshop
Start-up kid - Arduino workshopStart-up kid - Arduino workshop
Start-up kid - Arduino workshop
Kim Chee Leong
 

Viewers also liked (6)

Goldmund, Wyldebeast & Wunderliebe - Responsive Webdesign Workshop
Goldmund, Wyldebeast & Wunderliebe - Responsive Webdesign WorkshopGoldmund, Wyldebeast & Wunderliebe - Responsive Webdesign Workshop
Goldmund, Wyldebeast & Wunderliebe - Responsive Webdesign Workshop
 
PyGrunn - Buildout presentation
PyGrunn - Buildout presentationPyGrunn - Buildout presentation
PyGrunn - Buildout presentation
 
Essential Plone development tools - Plone conf 2012
Essential Plone development tools - Plone conf 2012Essential Plone development tools - Plone conf 2012
Essential Plone development tools - Plone conf 2012
 
Responsive webdesign presentatie - Nederlandse Plone gebruikersdag 2012
Responsive webdesign presentatie - Nederlandse Plone gebruikersdag 2012Responsive webdesign presentatie - Nederlandse Plone gebruikersdag 2012
Responsive webdesign presentatie - Nederlandse Plone gebruikersdag 2012
 
Automated Deployment with Maven - going the whole nine yards
Automated Deployment with Maven - going the whole nine yardsAutomated Deployment with Maven - going the whole nine yards
Automated Deployment with Maven - going the whole nine yards
 
Start-up kid - Arduino workshop
Start-up kid - Arduino workshopStart-up kid - Arduino workshop
Start-up kid - Arduino workshop
 

Similar to Plone deployment made easy

Capistrano deploy Magento project in an efficient way
Capistrano deploy Magento project in an efficient wayCapistrano deploy Magento project in an efficient way
Capistrano deploy Magento project in an efficient way
Sylvain Rayé
 
One-Man Ops
One-Man OpsOne-Man Ops
One-Man Ops
Jos Boumans
 
How I hack on puppet modules
How I hack on puppet modulesHow I hack on puppet modules
How I hack on puppet modules
Kris Buytaert
 
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
Puppet
 
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
KAI CHU CHUNG
 
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshopOSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshop
leffen
 
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
Puppet
 
Automating Complex Setups with Puppet
Automating Complex Setups with PuppetAutomating Complex Setups with Puppet
Automating Complex Setups with Puppet
Kris Buytaert
 
How to go the extra mile on monitoring
How to go the extra mile on monitoringHow to go the extra mile on monitoring
How to go the extra mile on monitoring
Tiago Simões
 
Integrating cloud stack with puppet
Integrating cloud stack with puppetIntegrating cloud stack with puppet
Integrating cloud stack with puppet
Puppet
 
Beyond Puppet
Beyond PuppetBeyond Puppet
Beyond Puppet
Kris Buytaert
 
Web Applications with Eclipse RT and Docker in the Cloud
Web Applications with Eclipse RT and Docker in the CloudWeb Applications with Eclipse RT and Docker in the Cloud
Web Applications with Eclipse RT and Docker in the Cloud
Markus Knauer
 
Tensorflow in Docker
Tensorflow in DockerTensorflow in Docker
Tensorflow in Docker
Eric Ahn
 
Ansible Automation to Rule Them All
Ansible Automation to Rule Them AllAnsible Automation to Rule Them All
Ansible Automation to Rule Them All
Tim Fairweather
 
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
DECK36
 
Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)
Puppet
 
Bangpypers april-meetup-2012
Bangpypers april-meetup-2012Bangpypers april-meetup-2012
Bangpypers april-meetup-2012
Deepak Garg
 
From Dev to DevOps
From Dev to DevOpsFrom Dev to DevOps
From Dev to DevOps
Agile Spain
 
Kubernetes laravel and kubernetes
Kubernetes   laravel and kubernetesKubernetes   laravel and kubernetes
Kubernetes laravel and kubernetes
William Stewart
 
Moving from Jenkins 1 to 2 declarative pipeline adventures
Moving from Jenkins 1 to 2 declarative pipeline adventuresMoving from Jenkins 1 to 2 declarative pipeline adventures
Moving from Jenkins 1 to 2 declarative pipeline adventures
Frits Van Der Holst
 

Similar to Plone deployment made easy (20)

Capistrano deploy Magento project in an efficient way
Capistrano deploy Magento project in an efficient wayCapistrano deploy Magento project in an efficient way
Capistrano deploy Magento project in an efficient way
 
One-Man Ops
One-Man OpsOne-Man Ops
One-Man Ops
 
How I hack on puppet modules
How I hack on puppet modulesHow I hack on puppet modules
How I hack on puppet modules
 
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
Puppet Camp Chicago 2014: Docker and Puppet: 1+1=3 (Intermediate)
 
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰如何透過 Go-kit 快速搭建微服務架構應用程式實戰
如何透過 Go-kit 快速搭建微服務架構應用程式實戰
 
OSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshopOSDC.no 2015 introduction to node.js workshop
OSDC.no 2015 introduction to node.js workshop
 
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
How Puppet Enables the Use of Lightweight Virtualized Containers - PuppetConf...
 
Automating Complex Setups with Puppet
Automating Complex Setups with PuppetAutomating Complex Setups with Puppet
Automating Complex Setups with Puppet
 
How to go the extra mile on monitoring
How to go the extra mile on monitoringHow to go the extra mile on monitoring
How to go the extra mile on monitoring
 
Integrating cloud stack with puppet
Integrating cloud stack with puppetIntegrating cloud stack with puppet
Integrating cloud stack with puppet
 
Beyond Puppet
Beyond PuppetBeyond Puppet
Beyond Puppet
 
Web Applications with Eclipse RT and Docker in the Cloud
Web Applications with Eclipse RT and Docker in the CloudWeb Applications with Eclipse RT and Docker in the Cloud
Web Applications with Eclipse RT and Docker in the Cloud
 
Tensorflow in Docker
Tensorflow in DockerTensorflow in Docker
Tensorflow in Docker
 
Ansible Automation to Rule Them All
Ansible Automation to Rule Them AllAnsible Automation to Rule Them All
Ansible Automation to Rule Them All
 
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
Our Puppet Story – Patterns and Learnings (sage@guug, March 2014)
 
Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)Getting started with puppet and vagrant (1)
Getting started with puppet and vagrant (1)
 
Bangpypers april-meetup-2012
Bangpypers april-meetup-2012Bangpypers april-meetup-2012
Bangpypers april-meetup-2012
 
From Dev to DevOps
From Dev to DevOpsFrom Dev to DevOps
From Dev to DevOps
 
Kubernetes laravel and kubernetes
Kubernetes   laravel and kubernetesKubernetes   laravel and kubernetes
Kubernetes laravel and kubernetes
 
Moving from Jenkins 1 to 2 declarative pipeline adventures
Moving from Jenkins 1 to 2 declarative pipeline adventuresMoving from Jenkins 1 to 2 declarative pipeline adventures
Moving from Jenkins 1 to 2 declarative pipeline adventures
 

Recently uploaded

Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024
Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024
Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024
ThousandEyes
 
NYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdfNYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdf
AUGNYC
 
dachnug51 - HCL Sametime 12 as a Software Appliance.pdf
dachnug51 - HCL Sametime 12 as a Software Appliance.pdfdachnug51 - HCL Sametime 12 as a Software Appliance.pdf
dachnug51 - HCL Sametime 12 as a Software Appliance.pdf
DNUG e.V.
 
BITCOIN HEIST RANSOMEWARE ATTACK PREDICTION
BITCOIN HEIST RANSOMEWARE ATTACK PREDICTIONBITCOIN HEIST RANSOMEWARE ATTACK PREDICTION
BITCOIN HEIST RANSOMEWARE ATTACK PREDICTION
ssuser2b426d1
 
Google ML-Kit - Understanding on-device machine learning
Google ML-Kit - Understanding on-device machine learningGoogle ML-Kit - Understanding on-device machine learning
Google ML-Kit - Understanding on-device machine learning
VishrutGoyani1
 
Break data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud ConnectorsBreak data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud Connectors
confluent
 
MVP Mobile Application - Codearrest.pptx
MVP Mobile Application - Codearrest.pptxMVP Mobile Application - Codearrest.pptx
MVP Mobile Application - Codearrest.pptx
Mitchell Marsh
 
React Native vs Flutter - SSTech System
React Native vs Flutter  - SSTech SystemReact Native vs Flutter  - SSTech System
React Native vs Flutter - SSTech System
SSTech System
 
Responsibilities of Fleet Managers and How TrackoBit Can Assist.pdf
Responsibilities of Fleet Managers and How TrackoBit Can Assist.pdfResponsibilities of Fleet Managers and How TrackoBit Can Assist.pdf
Responsibilities of Fleet Managers and How TrackoBit Can Assist.pdf
Trackobit
 
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Asher Sterkin
 
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdf
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdfAWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdf
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdf
karim wahed
 
active-directory-auditing-solution (2).pptx
active-directory-auditing-solution (2).pptxactive-directory-auditing-solution (2).pptx
active-directory-auditing-solution (2).pptx
sudsdeep
 
WEBINAR SLIDES: CCX for Cloud Service Providers
WEBINAR SLIDES: CCX for Cloud Service ProvidersWEBINAR SLIDES: CCX for Cloud Service Providers
WEBINAR SLIDES: CCX for Cloud Service Providers
Severalnines
 
Folding Cheat Sheet #7 - seventh in a series
Folding Cheat Sheet #7 - seventh in a seriesFolding Cheat Sheet #7 - seventh in a series
Folding Cheat Sheet #7 - seventh in a series
Philip Schwarz
 
ANSYS Mechanical APDL Introductory Tutorials.pdf
ANSYS Mechanical APDL Introductory Tutorials.pdfANSYS Mechanical APDL Introductory Tutorials.pdf
ANSYS Mechanical APDL Introductory Tutorials.pdf
sachin chaurasia
 
What is OCR Technology and How to Extract Text from Any Image for Free
What is OCR Technology and How to Extract Text from Any Image for FreeWhat is OCR Technology and How to Extract Text from Any Image for Free
What is OCR Technology and How to Extract Text from Any Image for Free
TwisterTools
 
COMPSAC 2024 D&I Panel: Charting a Course for Equity: Strategies for Overcomi...
COMPSAC 2024 D&I Panel: Charting a Course for Equity: Strategies for Overcomi...COMPSAC 2024 D&I Panel: Charting a Course for Equity: Strategies for Overcomi...
COMPSAC 2024 D&I Panel: Charting a Course for Equity: Strategies for Overcomi...
Hironori Washizaki
 
dachnug51 - Whats new in domino 14 .pdf
dachnug51 - Whats new in domino 14  .pdfdachnug51 - Whats new in domino 14  .pdf
dachnug51 - Whats new in domino 14 .pdf
DNUG e.V.
 
Migrate your Infrastructure to the AWS Cloud
Migrate your Infrastructure to the AWS CloudMigrate your Infrastructure to the AWS Cloud
Migrate your Infrastructure to the AWS Cloud
Ortus Solutions, Corp
 
WhatsApp Tracker - Tracking WhatsApp to Boost Online Safety.pdf
WhatsApp Tracker -  Tracking WhatsApp to Boost Online Safety.pdfWhatsApp Tracker -  Tracking WhatsApp to Boost Online Safety.pdf
WhatsApp Tracker - Tracking WhatsApp to Boost Online Safety.pdf
onemonitarsoftware
 

Recently uploaded (20)

Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024
Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024
Cisco Live Announcements: New ThousandEyes Release Highlights - July 2024
 
NYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdfNYC 26-Jun-2024 Combined Presentations.pdf
NYC 26-Jun-2024 Combined Presentations.pdf
 
dachnug51 - HCL Sametime 12 as a Software Appliance.pdf
dachnug51 - HCL Sametime 12 as a Software Appliance.pdfdachnug51 - HCL Sametime 12 as a Software Appliance.pdf
dachnug51 - HCL Sametime 12 as a Software Appliance.pdf
 
BITCOIN HEIST RANSOMEWARE ATTACK PREDICTION
BITCOIN HEIST RANSOMEWARE ATTACK PREDICTIONBITCOIN HEIST RANSOMEWARE ATTACK PREDICTION
BITCOIN HEIST RANSOMEWARE ATTACK PREDICTION
 
Google ML-Kit - Understanding on-device machine learning
Google ML-Kit - Understanding on-device machine learningGoogle ML-Kit - Understanding on-device machine learning
Google ML-Kit - Understanding on-device machine learning
 
Break data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud ConnectorsBreak data silos with real-time connectivity using Confluent Cloud Connectors
Break data silos with real-time connectivity using Confluent Cloud Connectors
 
MVP Mobile Application - Codearrest.pptx
MVP Mobile Application - Codearrest.pptxMVP Mobile Application - Codearrest.pptx
MVP Mobile Application - Codearrest.pptx
 
React Native vs Flutter - SSTech System
React Native vs Flutter  - SSTech SystemReact Native vs Flutter  - SSTech System
React Native vs Flutter - SSTech System
 
Responsibilities of Fleet Managers and How TrackoBit Can Assist.pdf
Responsibilities of Fleet Managers and How TrackoBit Can Assist.pdfResponsibilities of Fleet Managers and How TrackoBit Can Assist.pdf
Responsibilities of Fleet Managers and How TrackoBit Can Assist.pdf
 
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
Ported to Cloud with Wing_ Blue ZnZone app from _Hexagonal Architecture Expla...
 
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdf
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdfAWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdf
AWS Cloud Practitioner Essentials (Second Edition) (Arabic) AWS Security .pdf
 
active-directory-auditing-solution (2).pptx
active-directory-auditing-solution (2).pptxactive-directory-auditing-solution (2).pptx
active-directory-auditing-solution (2).pptx
 
WEBINAR SLIDES: CCX for Cloud Service Providers
WEBINAR SLIDES: CCX for Cloud Service ProvidersWEBINAR SLIDES: CCX for Cloud Service Providers
WEBINAR SLIDES: CCX for Cloud Service Providers
 
Folding Cheat Sheet #7 - seventh in a series
Folding Cheat Sheet #7 - seventh in a seriesFolding Cheat Sheet #7 - seventh in a series
Folding Cheat Sheet #7 - seventh in a series
 
ANSYS Mechanical APDL Introductory Tutorials.pdf
ANSYS Mechanical APDL Introductory Tutorials.pdfANSYS Mechanical APDL Introductory Tutorials.pdf
ANSYS Mechanical APDL Introductory Tutorials.pdf
 
What is OCR Technology and How to Extract Text from Any Image for Free
What is OCR Technology and How to Extract Text from Any Image for FreeWhat is OCR Technology and How to Extract Text from Any Image for Free
What is OCR Technology and How to Extract Text from Any Image for Free
 
COMPSAC 2024 D&I Panel: Charting a Course for Equity: Strategies for Overcomi...
COMPSAC 2024 D&I Panel: Charting a Course for Equity: Strategies for Overcomi...COMPSAC 2024 D&I Panel: Charting a Course for Equity: Strategies for Overcomi...
COMPSAC 2024 D&I Panel: Charting a Course for Equity: Strategies for Overcomi...
 
dachnug51 - Whats new in domino 14 .pdf
dachnug51 - Whats new in domino 14  .pdfdachnug51 - Whats new in domino 14  .pdf
dachnug51 - Whats new in domino 14 .pdf
 
Migrate your Infrastructure to the AWS Cloud
Migrate your Infrastructure to the AWS CloudMigrate your Infrastructure to the AWS Cloud
Migrate your Infrastructure to the AWS Cloud
 
WhatsApp Tracker - Tracking WhatsApp to Boost Online Safety.pdf
WhatsApp Tracker -  Tracking WhatsApp to Boost Online Safety.pdfWhatsApp Tracker -  Tracking WhatsApp to Boost Online Safety.pdf
WhatsApp Tracker - Tracking WhatsApp to Boost Online Safety.pdf
 

Plone deployment made easy

  • 1. Plone deployment made easy Pawel Lewicki Kim Chee Leong Goldmund, Wyldebeast & Wunderliebe { lewicki, leong } @gw20e.com
  • 2. Outline ● From manual to automatic deployment ● How Puppet and Fabric are used for deployment ● Deployment demo in screencast ● Puppet server orchestration ● Fabric in detail
  • 3. From manual to automatic deployment our path to automatic deployment
  • 4. Typical Plone release @GWW ● Mark eggs/modules using git tag ● Update mr developer sources with tag ● SSH to server ● Clone new buildout in releases directory ● Bootstrap buildout and execute ● Switch previous release to new release ● If on a cluster set-up, rinse and repeat
  • 5. Plone release @GWW using Fabric ● All previous steps in one Fabric script ● Allows ‘dummy-proof’ releases Run: fab make_tag fab deploy fab switch And Bob is your uncle!
  • 6. xkcd - automation http://xkcd.com/1319/
  • 7. Why automatic deployment? ● Avoid repetitive tasks ● Error-proof ● Immune to typo’s ● Consistent environments ● Time efficient
  • 8. Why automatic deployment? ● Avoid repetitive tasks ● Error-proof ● Immune to typo’s ● Consistent environments ● Time efficient nothing* should be done manually on the server
  • 9. How Puppet and Fabric are used for deployment
  • 10. Initial server setup with Puppet ● Puppet is used for server orchestration ● Puppet prepares the servers ● When Puppet is done, Fabric is used to deploy buildouts
  • 12. Buildout deployment with Fabric ● Uses tst, acc and prd layers ● Knows configuration for buildout ● Deploys and runs buildouts ● Does several other tasks
  • 14. Deployment screencast using Puppet and Fabric
  • 15. Puppet server orchestration paving the way for Fabric
  • 16. Example Puppet config node 'ploneconf.puppet' { package { 'apache2': ensure => installed } appie::app { "ploneconfapp": envs => { prd => { uid => 3011 }, acc => { uid => 3012 }, tst => { uid => 3013 }, }, webserver => 'apache2', accountinfo => $gw20e::user_accounts, } class { 'ssh': server_options => { 'PasswordAuthentication' => 'no', 'PermitRootLogin' => 'no', }, } } 1 / n
  • 17. Puppet tasks ● User accounts for TAP environments: o app-mysite-prd in /opt/APPS/mysite/prd o app-mysite-acc in /opt/APPS/mysite/acc o app-mysite-tst in /opt/APPS/mysite/tst ● Webserver config is mapped to each application user $ cat /etc/apache2/sites-enabled/zzz-app-mysite-prd Include /opt/APPS/mysite/prd/sites-enabled/ ● SSH Keys of developers are synced ● Buildout cache is enabled
  • 18. Fabric in detail using gww.buildout and gww.buildout-fabric
  • 19. Plone Fabric features ● Automatic deployment ● Push buildout config using jinja templates ● Extended TAP-layers ● Switching between releases ● But also; supports git branches, virtual host for webserver, copying zodb to local buildout.
  • 20. Release switch using Fabric 1. Update current symlink rm -f ~/current ln -s ~/releases/20141028 ~/current 1. Start supervisor daemon in new buildout ~/releases/20141028/bin/supervisord 1. For each service in supervisor: a. Stop service in old buildout b. Start service in new buildout 2. Shutdown supervisor in old buildout ~/releases/20130101/bin/supervisorctl shutdown
  • 21. ● Fabric is controlled from the local buildout: ./bin/fab -l Available commands: deploy Create new buildout in release dir switch Switch supervisor to latest buildout test Test if the connection is working ● Deploying to test environment: ./bin/fab deploy:layer=tst,branch=new-feature
  • 22. Example deployment config (1/2) prdfrontend = dict( hosts=prd['hosts'], buildout='releases/frontend', varnish={'port': 48083}, haproxy={'port': 48082, 'instances': prd['instances'], }, webserver='apache2', sitename='ploneconfapp-prd.puppet', site_id=prd['site_id'], ) prdbackend = dict( hosts=prd['hosts'], buildout='releases/backend', zeo=dict(base='/data1/APPS/ploneconfapp/prd', **prd['zeo']), )
  • 23. Example Deployment config (2/2) prd = dict( hosts=['app-ploneconfapp-prd@ploneconf.puppet',], buildout=_datestamped('releases/%Y-%m-%d'), current_link='current', auto_switch=False, modules=_modules, third_party_modules=_third_party_modules, zeo={ 'ip': ‘ploneconf.puppet’, 'port': 48081, }, instances={ 'ports': {'instance0': 8080, 'instance1': 8081}, 'ipaddresses': _servers, }, site_id=_site_id, credentials={'username': 'admin', 'password': 'secret', }, remote_configs={'clockusers': 'clockuser.cfg'}, sentry={ 'dsn': 'https://usr:passwd@sentry.gw20e.com/29', 'level': 'ERROR', }, )
  • 24. Example jinja template / buildout [supervisor] programs += ... {% if varnish %} 60 varnish ${buildout:directory}/bin/varnish true {% endif %} {% if varnish %} [varnish] port = {{ varnish.port }} {% endif %}
  • 25. Example jinja template / apache {% if varnish %} {% set port = varnish.port %} {% elif haproxy %} {% set port = haproxy.port %} {% else %} {% set port = instances.ports.instance0 %} {% endif %} <VirtualHost *:80> ServerName {{ sitename }} RewriteEngine on ProxyPass / http://localhost:{{ port }}/VirtualHostBase/http/{{ sitename }}:80/ ProxyPassReverse / http://localhost:{{ port }}/../http/{{ sitename }}:80/ </VirtualHost>
  • 26. Github repositories ● https://github.com/search?q=ploneconf2014_gww ● Puppet module: o http://git.io/2NLMtg (shortened url) o https://github.com/Goldmund-Wyldebeast-Wunderliebe/puppet-appie ● Fabric module: o http://git.io/kVdsnw (shortened url) o https://github.com/Goldmund-Wyldebeast- Wunderliebe/gww.buildout-fabric ● GWW Plone buildout o http://git.io/PzdjqQ (shortened url) o https://github.com/Goldmund-Wyldebeast- Wunderliebe/gww.buildout
  • 27. Thank you! Goldmund, Wyldebeast & Wunderliebe { lewicki, leong } @gw20e.com

Editor's Notes

  1. In this talk we’ll explain how we automated the deployment of Plone sites and which tools are used. Gradually we made the moved from manual deployment to automatic. Shared experience with Django deployments Ask who deploys Plone buildouts for a customer, company or organisation?
  2. First explain how our typical Plone setup looks like. Collection of building blocks, based on best practices. We have ours, you probably have yours. Cluster, buildout-template with varnish and TAP
  3. What is a release? Modules with specific functionality, such as content/theme Mr developer specific from prd env In the past we used eggs Explain how we used the release checklist/procedure at our customer
  4. This is much easier :] Ofcourse first release on test and acc, too weed out possible problems
  5. Accurate depiction Start automating tasks you’re familiar with Releases are not happening often! Possibly mention release calendar
  6. Repetitive tasks: it easy to mess up when doing a rep. task Error-proof: you should have encountered possible errors on tst and acc Typo’s and consistent env: with automatic deployment. naming git tags and dirs is done for you. manual.. Time efficient: in the long run you’ll save time next slide contains “nothing* should be done manually on the server”
  7. nothing should be done using SSH shell except for debugging purposes Fabric is the base of our automatic deployment, but there is more… (ba dum tss)
  8. Puppet is one way todo server orchestration, Chef and Ansible are popular tools. Also used to setup server monitoring and do system upgrades Written in Ruby, reasonable easy to write modules. Many modules available. No SSH login, uses separate agen
  9. Agents update periodalcialy Why are we using seperate user accounts? Webserver config is managable Buildout cache is enabled per user
  10. Explain why Puppet should not be used to deploy buildouts. It should be explicit. Use SSH forward agent to git clone repositories on remote server
  11. Why are we using seperate user accounts? Webserver config is managable Buildout cache is enabled per user
  12. What is missing here?
  13. Why are we using seperate user accounts? Webserver config is managable Buildout cache is enabled per user
  14. Also explain why Puppet should not be used to deploy buildouts
  15. Also explain why Puppet should not be used to deploy buildouts Supervisor is socket based
  16. Explain production setup; three tier architecure fe with apache, varnish and haproxy be with ZODB
  17. What is missing here?
  18. What is missing here?