SlideShare uma empresa Scribd logo
1 de 52
Baixar para ler offline
BUILDOUT
  ALLES IM GRIFF




      WEBMEISTEREI
      HARALD FRIESSNEGGER
      PLONE KONFERENZ MÜNCHEN, 2012
WORUM GEHT'S?
  Template




                INTRO
WORUM GEHT'S?
  Tipps und Tools




                    INTRO
WORUM NICHT?
  Totale Automatisierung




                           INTRO
KONFIGURATIONSMGMT (SCM)

  ARBEITEN IM TEAM


  PERFORMANCE

  MONITORING

  WARTUNG
                           AGENDA
DAS SCM PROBLEM
   x Module * y Versionen

 $ bin/buildout [­N]

 Error: There is a version conflict.
 We already have: zope.component 3.5.1
 but zope.browserresource 3.12.0 requires 
 'zope.component>=3.8.0'.



                        ENTWICKLUNG > KONFIG. MANAGEMENT
DIE LÖSUNG
    Versionen pinnen

 [buildout]
 extends =
     http://dist.plone.org/release/4.1.4/versions.cfg
     http://good­py.appspot.com/release/plone.app.theming/1.0b9

 [versions]
 my.theme = 1.2
 my.type = 0.7
 collective.viewlet.links = 1.0
 collective.prettyphoto = 0.4.4


                       ENTWICKLUNG > KONFIG. MANAGEMENT > PINNING
NICHT VERGESSEN
  buildout.dumppickedversions
   [buildout]

   extensions =
       buildout.dumppickedversions


   $ bin/buildout
   ...
   *************** PICKED VERSIONS ****************
   [versions]
   some.package = 0.9
   setuptools = 0.6rc11
   ...

                    ENTWICKLUNG > KONFIG. MANAGEMENT > PINNING
IMMER UP TO DATE
    z3c.checkversions

 frisi@mbp:~$ bin/checkversions ­v versions.cfg | grep was
 jarn.mkrelease=3.5 # was: 3.0.10
 collective.recipe.backup=2.4 # was: 1.7
 collective.recipe.supervisor=0.17 # was: 0.14
 ...




                       ENTWICKLUNG > KONFIG. MANAGEMENT > PINNING
WENNS UM DIE WURST GEHT
  ...braucht man Eier


   recipe = infrae.subversion
   as_eggs = true
   urls =
       https://my.repos/my.theme/tags/1.2/ my.theme




             ENTWICKLUNG > KONFIG. MANAGEMENT > EGG RELEASES
JEDES MAL EIN RELEASE?
   Puh!
 $ vi setup.py; vi History.txt
 $ svn ci ­m 'prepare release'
 $ svn cp . https://myrepos.com/package/tags/0.1.2

 $ svn co https://myrepos.com/package/tags/0.1.2 
 $ python setup.py sdist
 $ python setup.py upload #pypi
 $ python setup.py upload ­r http://plone.org/products
 $ scp dist/my.package­0.1.2.zip user@server:customer/




                ENTWICKLUNG > KONFIG. MANAGEMENT > EGG RELEASES
DRY
  jarn.mkrelease
  zest.releaser

 $ mkrelease ­d customer my.theme




           ENTWICKLUNG > KONFIG. MANAGEMENT > EGG RELEASES
Private Egg Server

●
    Plone Software Center
●
    Apache/Nginx
●
    lovely.buildouthttp für Authentifizierung
●
    Mehr unter [1]




              ENTWICKLUNG > KONFIG. MANAGEMENT > EGG RELEASES
ARBEITEN IM TEAM




                   ENTWICKLUNG > TEAMARBEIT
WIEDERHOLBAR & EINHEITLICH
  collective.recipe.plonesite
   [plonesite]
   recipe = collective.recipe.plonesite
   site­id = {plone­sites:main}
   admin­user = ${zope­user:name}
   instance = instance1
   zeoserver = zeoserver
   enabled = false

   profiles­initial =
       my.policy:default




                                      ENTWICKLUNG > TEAMARBEIT
GEMEINSAME BEISPIELDATEN
  wm.sampledata




                  ENTWICKLUNG > TEAMARBEIT
(D)VCS ANBINDUNG
    mr.developer
 [buildout]

 sources = sources
 auto­checkout =
     my.policy

 [sources]
 my.policy          = git ...
 my.theme           = hg ...
 lineage.index      = svn svn.plone.org/.../lineage.index/trunk/



                                         ENTWICKLUNG > TEAMARBEIT
VOR COMMIT & RELEASE
     bin/test
     aadfasf -s my.package

 frisi@mbp:~/instances/demo$ bin/test -s my.types -v
 Running tests at level 1
 ...
  Ran 25 tests with 1 failures and 0 errors in 2 minutes 42.417 seconds.
 ...
  Ran 3 tests with 0 failures and 0 errors in 0.003 seconds.
 Tests with failures:
   /home/frisi/instances/demo/src/my.types/my/types/search/searchform.txt
 Total: 28 tests, 1 failures, 0 errors in 3 minutes 3.401 seconds.




                                               ENTWICKLUNG > TEAMARBEIT
KONFIGURATIONSMGMT (SCM)

  ARBEITEN IM TEAM


PERFORMANCE

  MONITORING

  WARTUNG
                        AGENDA
Software Architektur
Internet




           ha




                PRODUKTIVEINSATZ > PERFORMANCE
VARNISH VERSTEHEN
     doc/caching.txt
$ parts/varnish­build/bin/varnishlog ­c ­o  RxURL '^/themen$'
     | grep ­E "RxRequest|RxURL|TxStatus|TxResponse|X­Varnish­Action"

   12 RxRequest    c GET
   12 RxURL        c /themen
   12 TxStatus     c 200
   12 TxResponse   c OK
   12 RxRequest    c GET
   12 RxURL        c /themen
   12 TxStatus     c 304
   12 TxResponse   c Not Modified


                          PRODUKTIVEINSATZ > PERFORMANCE > VARNISH
WARTUNGSSEITE




          PRODUKTIVEINSATZ > PERFORMANCE > NGINX
WARTUNGSSEITE




          PRODUKTIVEINSATZ > PERFORMANCE > NGINX
WARTUNGSSEITE


  #replace varnish or nginx error pages
  proxy_intercept_errors on; 

  error_page   502 503 =503  /status/502.html;

  location /status {
    root ${buildout:directory}/production/nginx/;
  }




                         PRODUKTIVEINSATZ > PERFORMANCE > NGINX
SEO – DUPLICATE CONTENT
  noindex, nofollow

   server {

      server_name cms.mydomain.com;

      # do not index or follow content of this domain
      proxy_set_header X­Robots­Tag 'none';

       ...



                       PRODUKTIVEINSATZ > PERFORMANCE > NGINX
FEHLER
  bitte per E-Mail
   [instance­settings]

   mailinglogger =
       <mailing­logger>
         level error
         smtp­server localhost
         from sysadmin@yourdomain.com
         to root
         subject Fehlerbericht [Projekt1] %(line)s
       </mailing­logger>

   # Alternativen: collective.logbook; http://areciboapp.com/ 

                         PRODUKTIVEINSATZ > MONITORING > EMAIL
NAGIOS
  stets auf der Hut




             PRODUKTIVEINSATZ > MONITORING > NAGIOS
WEBSEITE ERREICHBAR?

define service{ 
  use                  service­template 
  host_name            host01 
  service_description  webmeisterei.com HTTP 
  check_command        check_http!­H 
       webmeisterei.com ­I 10.1.2.123 ­u /hosting
  contact_groups       wm­admins 
} 




                     PRODUKTIVEINSATZ > MONITORING > NAGIOS
MUNIN
  vergisst nichts




              PRODUKTIVEINSATZ > MONITORING > MUNIN
DATENBANK GRÖSSE



                          ?

          PRODUKTIVEINSATZ > MONITORING > MUNIN
ZOPE UPTIME




              PRODUKTIVEINSATZ > MONITORING > MUNIN
E-MAIL DURCHSATZ




           PRODUKTIVEINSATZ > MONITORING > MUNIN
Varnish Hit-Rates




              PRODUKTIVEINSATZ > MONITORING > MUNIN
MUNIN EINRICHTUNG
  doc/monitoring.txt

   $ sudo munin­run zope­project1_zopememory_Projekt1Instanz1
   VmPeak.value 923185152.0
   VmSize.value 916013056.0
   VmLck.value 0.0
   VmHWM.value 684683264.0
   VmRSS.value 676757504.0
   VmData.value 769015808.0
   ...




                        PRODUKTIVEINSATZ > MONITORING > MUNIN
KONFIGURATIONSMGMT (SCM)

  ARBEITEN IM TEAM


  PERFORMANCE

  MONITORING

WARTUNG
                         AGENDA
BACKUP STRATEGIE


 KW1   Sonntag   Montag     Dienstag   Mittwoch     …




 KW2   Sonntag   Montag     Dienstag   Mittwoch     …




                          PRODUKTIVEINSATZ > WARTUNG > BACKUP
BACKUP
  collective.recipe.backup

  [backup]
  recipe = collective.recipe.backup
  keep = 2




                         PRODUKTIVEINSATZ > WARTUNG > BACKUP
BACKUP
    cronjob


 #pack zodb each sunday morning
 0   4  *   *   0     /home/projekt1/bin/zeopack  > /dev/null 2>&1

 #backup everyday in the evening
 0 22  *   *   0    /home/projekt1/bin/backup ­q




                              PRODUKTIVEINSATZ > WARTUNG > BACKUP
OMG!



   „ Gestern um 14:00 Uhr
       wurde alles gelöscht!“



                 PRODUKTIVEINSATZ > WARTUNG > BACKUP
TIPP: STÜNDLICHES BACKUP
  beim Projektstart


$ bin/restore 2012­02­21­13­59




               PRODUKTIVEINSATZ > WARTUNG > BACKUP
DEBUG INSTANZ
  starten


  $ bin/instance­debug fg




              PRODUKTIVEINSATZ > WARTUNG > DEBUG
DEBUG INSTANZ
   verbinden

  ssh ­C ­c blowfish ­T ­N ­L 8081:localhost:8499 
     meister@host.webmeisterei.com



 http://localhost:8081/Plone/font­page/pdb



                             PRODUKTIVEINSATZ > WARTUNG > DEBUG
DEBUG INSTANZ
  loslegen

 …
 ­> raise Exception, "Manually triggered exception"
 (Pdb) self.context
 <ATDocument at /new/front­page>
 (Pdb) self.context.title
 u'Willkommen bei Plone'




                          PRODUKTIVEINSATZ > WARTUNG > DEBUG
LOGFILES
●   production/logrotate.conf.template
●   Dateext (backup!)
                                       1K alternatives.log
     502 alternatives.log             502 alternatives.log.1
     11K alternatives.log.1           11K alternatives.log.2
     15K alternatives.log.2           15K alternatives.log.3
      9K alternatives.log.3            9K alternatives.log.4
                                       1K alternatives.log
     502 alternatives.log             502 alternatives.log­20120109
     11K alternatives.log­20120108    11K alternatives.log­20120108
     15K alternatives.log­20120107    15K alternatives.log­20120107
      9K alternatives.log­20120106     9K alternatives.log­20120106
SUPERVISORD




          PRODUKTIVEINSATZ > WARTUNG > SUPERVISOR
VERWALTET PROZESSE
   CLI
 meister@kkv01:~$ sudo /etc/init.d/kirche­supervisorctl 
 MemmonZope1       RUNNING    pid 844, uptime 22 days, 23:39:00
 MemmonZope2       RUNNING    pid 843, uptime 22 days, 23:39:00
 balancer          RUNNING    pid 847, uptime 22 days, 23:39:00
 cache             RUNNING    pid 849, uptime 22 days, 23:39:00
 instance1         RUNNING    pid 815, uptime 2  days,  0:53:51
 instance2         RUNNING    pid 199, uptime 1  day,   4:15:50
 main              RUNNING    pid 850, uptime 22 days, 23:39:00
 transform         RUNNING    pid 848, uptime 22 days, 23:39:00
 zeo               RUNNING    pid 845, uptime 22 days, 23:39:00

 supervisor> restart instance1
 instance1: stopped
 instance1: started


                            PRODUKTIVEINSATZ > WARTUNG > SUPERVISOR
SPEICHERFRESSER?
   Memmon startet neu
  [supervisor]
  recipe = collective.recipe.supervisor
  plugins = superlance
  Programs =
      ...
      20 instance1 .../bin/instance1 [console] true zope
      ...

  eventlisteners =
      MemmonZope1 TICK_60 .../memmon [­p instance1=780MB ­m root]




                                 PRODUKTIVEINSATZ > WARTUNG > SUPERVISOR
LOGFILES
   Autostart
  [supervisor]
  recipe = collective.recipe.supervisor
  plugins = superlance
  childlogdir = ${buildout:directory}/var/log/supervisor
  ...
  programs =
      10 zeo       .../bin/runzeo                                         true zope
      20 instance1 .../bin/instance1 [console]                            true zope
      20 instance2 (autostart=false) .../bin/instance2 [console]          true zope
      30 balancer  .../bin/haproxy  [­f .../production/balancer.conf ­db] true balancer
      40 transform .../sbin/nginx [­c .../production/transform.conf]      true transform
      50 cache     .../bin/cache                                          true
      60 main      .../sbin/nginx [­c .../production/main.conf]           true

  eventlisteners =
      MemmonZope1 TICK_60 .../memmon [­p instance1=780MB ­m root]
      MemmonZope2 TICK_60 .../memmon [­p instance2=780MB ­m root]

                                 PRODUKTIVEINSATZ > WARTUNG > SUPERVISOR
WAR'S DAS?
NICHT GANZ!
FRAGEN / DISKUSSION


Twitter: @frisi
#plone: frisi
E-Mail: harald (at) webmeisterei dot com
Link / Bildverzeichnis

Glühbirne            http://www.flickr.com/photos/dskley/6862644813/
Puzzle               http://www.flickr.com/photos/jhritz/409083204/
Pin                  http://www.flickr.com/photos/wheatfields/3798035262/
Ei                   http://www.flickr.com/photos/10451396@N00/337315827/
Schweizermesser      http://www.flickr.com/photos/ajc1/4663140532/
Ameisen              http://www.flickr.com/photos/23271361@N06/5997315172/
Murmeltier           http://www.flickr.com/photos/42662226@N04/4894892820/
Elefant              http://www.flickr.com/photos/joostvanderpost/3403404375/
Tintenfisch          http://www.flickr.com/photos/laughingsquid/4031499134/
Tausenfüßler         http://www.flickr.com/photos/janiellebeh/2331035306/

[1] Claytrons Talk   http://www.slideshare.net/claytron/buildout-for-the-future
Scaling Plone        http://scalingplone.pbworks.com

Mais conteúdo relacionado

Mais procurados

Introduction to zc.buildout
Introduction to zc.buildoutIntroduction to zc.buildout
Introduction to zc.buildout
Ricardo Newbery
 
Django & Buildout (en)
Django & Buildout (en)Django & Buildout (en)
Django & Buildout (en)
zerok
 
Django deployment best practices
Django deployment best practicesDjango deployment best practices
Django deployment best practices
Erik LaBianca
 
Js infrostructure
Js infrostructureJs infrostructure
Js infrostructure
Igor Alpert
 

Mais procurados (20)

How to host an app for $20 in 20min using buildout and hostout
How to host an app  for $20 in 20min using buildout and hostoutHow to host an app  for $20 in 20min using buildout and hostout
How to host an app for $20 in 20min using buildout and hostout
 
Zero Downtime Deployment with Ansible
Zero Downtime Deployment with AnsibleZero Downtime Deployment with Ansible
Zero Downtime Deployment with Ansible
 
Magento 2 Capistrano Deploy
Magento 2 Capistrano DeployMagento 2 Capistrano Deploy
Magento 2 Capistrano Deploy
 
Getting started with TDD - Confoo 2014
Getting started with TDD - Confoo 2014Getting started with TDD - Confoo 2014
Getting started with TDD - Confoo 2014
 
Introduction to zc.buildout
Introduction to zc.buildoutIntroduction to zc.buildout
Introduction to zc.buildout
 
Introduction to Node.JS
Introduction to Node.JSIntroduction to Node.JS
Introduction to Node.JS
 
Google app engine python
Google app engine   pythonGoogle app engine   python
Google app engine python
 
Django & Buildout (en)
Django & Buildout (en)Django & Buildout (en)
Django & Buildout (en)
 
Django deployment best practices
Django deployment best practicesDjango deployment best practices
Django deployment best practices
 
Js infrostructure
Js infrostructureJs infrostructure
Js infrostructure
 
Docker Demo @ IuK Seminar
Docker Demo @ IuK SeminarDocker Demo @ IuK Seminar
Docker Demo @ IuK Seminar
 
Buildout and Plone
Buildout and PloneBuildout and Plone
Buildout and Plone
 
Philipp Von Weitershausen Plone Age Mammoths, Sabers And Caveen Cant The...
Philipp Von Weitershausen   Plone Age  Mammoths, Sabers And Caveen   Cant The...Philipp Von Weitershausen   Plone Age  Mammoths, Sabers And Caveen   Cant The...
Philipp Von Weitershausen Plone Age Mammoths, Sabers And Caveen Cant The...
 
WordPress Plugin Unit Tests (FR - WordCamp Paris 2015)
WordPress Plugin Unit Tests (FR - WordCamp Paris 2015)WordPress Plugin Unit Tests (FR - WordCamp Paris 2015)
WordPress Plugin Unit Tests (FR - WordCamp Paris 2015)
 
Perlmania_Study - CPAN
Perlmania_Study - CPANPerlmania_Study - CPAN
Perlmania_Study - CPAN
 
Hitchhiker's guide to the front end development
Hitchhiker's guide to the front end developmentHitchhiker's guide to the front end development
Hitchhiker's guide to the front end development
 
No Hugging, No Learning
No Hugging, No LearningNo Hugging, No Learning
No Hugging, No Learning
 
Arbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenvArbeiten mit distribute, pip und virtualenv
Arbeiten mit distribute, pip und virtualenv
 
Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))Vagrant for real codemotion (moar tips! ;-))
Vagrant for real codemotion (moar tips! ;-))
 
Continuous Quality Assurance using Selenium WebDriver
Continuous Quality Assurance using Selenium WebDriverContinuous Quality Assurance using Selenium WebDriver
Continuous Quality Assurance using Selenium WebDriver
 

Destaque

Endevinalles Nostre Poble
Endevinalles  Nostre PobleEndevinalles  Nostre Poble
Endevinalles Nostre Poble
dolors_muns
 
Living by the spirit sermon 1 (english)
Living by the spirit sermon 1 (english)Living by the spirit sermon 1 (english)
Living by the spirit sermon 1 (english)
Bong Baylon
 
Open web badges_2
Open web badges_2Open web badges_2
Open web badges_2
lrbabe
 

Destaque (8)

Open web badges
Open web badgesOpen web badges
Open web badges
 
South Africa - it does not matter
South Africa - it does not matterSouth Africa - it does not matter
South Africa - it does not matter
 
image transformations in plone 4.1
image transformations in plone 4.1image transformations in plone 4.1
image transformations in plone 4.1
 
Endevinalles Nostre Poble
Endevinalles  Nostre PobleEndevinalles  Nostre Poble
Endevinalles Nostre Poble
 
Aircraft Cockpits
Aircraft CockpitsAircraft Cockpits
Aircraft Cockpits
 
Living by the spirit sermon 1 (english)
Living by the spirit sermon 1 (english)Living by the spirit sermon 1 (english)
Living by the spirit sermon 1 (english)
 
Open web badges_2
Open web badges_2Open web badges_2
Open web badges_2
 
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job? Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
Succession “Losers”: What Happens to Executives Passed Over for the CEO Job?
 

Semelhante a Buildout - Alles im Griff

Тарас Кирилюк та Олена Пустовойт — CI workflow у веб-студії
Тарас Кирилюк та Олена Пустовойт — CI workflow у веб-студіїТарас Кирилюк та Олена Пустовойт — CI workflow у веб-студії
Тарас Кирилюк та Олена Пустовойт — CI workflow у веб-студії
LEDC 2016
 

Semelhante a Buildout - Alles im Griff (20)

Buildout: How to maintain big app stacks without losing your mind
Buildout: How to maintain big app stacks without losing your mindBuildout: How to maintain big app stacks without losing your mind
Buildout: How to maintain big app stacks without losing your mind
 
Тарас Кирилюк та Олена Пустовойт — CI workflow у веб-студії
Тарас Кирилюк та Олена Пустовойт — CI workflow у веб-студіїТарас Кирилюк та Олена Пустовойт — CI workflow у веб-студії
Тарас Кирилюк та Олена Пустовойт — CI workflow у веб-студії
 
CI workflow in a web studio
CI workflow in a web studioCI workflow in a web studio
CI workflow in a web studio
 
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
Real-World DevOps — 20 Practical Developers Tips for Tightening Your Operatio...
 
MeaNstack on Docker
MeaNstack on DockerMeaNstack on Docker
MeaNstack on Docker
 
How to install squid proxy on server or how to install squid proxy on centos o
How to install squid proxy on server  or how to install squid proxy on centos oHow to install squid proxy on server  or how to install squid proxy on centos o
How to install squid proxy on server or how to install squid proxy on centos o
 
PyGrunn - Buildout presentation
PyGrunn - Buildout presentationPyGrunn - Buildout presentation
PyGrunn - Buildout presentation
 
Practical continuous quality gates for development process
Practical continuous quality gates for development processPractical continuous quality gates for development process
Practical continuous quality gates for development process
 
Pyramid deployment
Pyramid deploymentPyramid deployment
Pyramid deployment
 
Deploying Symfony | symfony.cat
Deploying Symfony | symfony.catDeploying Symfony | symfony.cat
Deploying Symfony | symfony.cat
 
Continuous Integration with Robot Sweatshop
Continuous Integration with Robot SweatshopContinuous Integration with Robot Sweatshop
Continuous Integration with Robot Sweatshop
 
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
DevSecCon London 2017 - MacOS security, hardening and forensics 101 by Ben Hu...
 
Magento 2 Development
Magento 2 DevelopmentMagento 2 Development
Magento 2 Development
 
Scala, Functional Programming and Team Productivity
Scala, Functional Programming and Team ProductivityScala, Functional Programming and Team Productivity
Scala, Functional Programming and Team Productivity
 
Deploying Django with Ansible
Deploying Django with AnsibleDeploying Django with Ansible
Deploying Django with Ansible
 
Faster Magento Integration Tests
Faster Magento Integration TestsFaster Magento Integration Tests
Faster Magento Integration Tests
 
Write php deploy everywhere
Write php deploy everywhereWrite php deploy everywhere
Write php deploy everywhere
 
Using Test Kitchen for testing Chef cookbooks
Using Test Kitchen for testing Chef cookbooksUsing Test Kitchen for testing Chef cookbooks
Using Test Kitchen for testing Chef cookbooks
 
Automation with Ansible and Containers
Automation with Ansible and ContainersAutomation with Ansible and Containers
Automation with Ansible and Containers
 
Buildsystem.mk
Buildsystem.mkBuildsystem.mk
Buildsystem.mk
 

Último

Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Último (20)

[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 

Buildout - Alles im Griff

  • 1. BUILDOUT ALLES IM GRIFF WEBMEISTEREI HARALD FRIESSNEGGER PLONE KONFERENZ MÜNCHEN, 2012
  • 2. WORUM GEHT'S? Template INTRO
  • 3. WORUM GEHT'S? Tipps und Tools INTRO
  • 4. WORUM NICHT? Totale Automatisierung INTRO
  • 5. KONFIGURATIONSMGMT (SCM) ARBEITEN IM TEAM PERFORMANCE MONITORING WARTUNG AGENDA
  • 6. DAS SCM PROBLEM x Module * y Versionen $ bin/buildout [­N] Error: There is a version conflict. We already have: zope.component 3.5.1 but zope.browserresource 3.12.0 requires  'zope.component>=3.8.0'. ENTWICKLUNG > KONFIG. MANAGEMENT
  • 7. DIE LÖSUNG Versionen pinnen [buildout] extends =     http://dist.plone.org/release/4.1.4/versions.cfg     http://good­py.appspot.com/release/plone.app.theming/1.0b9 [versions] my.theme = 1.2 my.type = 0.7 collective.viewlet.links = 1.0 collective.prettyphoto = 0.4.4 ENTWICKLUNG > KONFIG. MANAGEMENT > PINNING
  • 8. NICHT VERGESSEN buildout.dumppickedversions [buildout] extensions =     buildout.dumppickedversions $ bin/buildout ... *************** PICKED VERSIONS **************** [versions] some.package = 0.9 setuptools = 0.6rc11 ... ENTWICKLUNG > KONFIG. MANAGEMENT > PINNING
  • 9. IMMER UP TO DATE z3c.checkversions frisi@mbp:~$ bin/checkversions ­v versions.cfg | grep was jarn.mkrelease=3.5 # was: 3.0.10 collective.recipe.backup=2.4 # was: 1.7 collective.recipe.supervisor=0.17 # was: 0.14 ... ENTWICKLUNG > KONFIG. MANAGEMENT > PINNING
  • 10. WENNS UM DIE WURST GEHT ...braucht man Eier recipe = infrae.subversion as_eggs = true urls =     https://my.repos/my.theme/tags/1.2/ my.theme ENTWICKLUNG > KONFIG. MANAGEMENT > EGG RELEASES
  • 11. JEDES MAL EIN RELEASE? Puh! $ vi setup.py; vi History.txt $ svn ci ­m 'prepare release' $ svn cp . https://myrepos.com/package/tags/0.1.2 $ svn co https://myrepos.com/package/tags/0.1.2  $ python setup.py sdist $ python setup.py upload #pypi $ python setup.py upload ­r http://plone.org/products $ scp dist/my.package­0.1.2.zip user@server:customer/ ENTWICKLUNG > KONFIG. MANAGEMENT > EGG RELEASES
  • 12. DRY jarn.mkrelease zest.releaser $ mkrelease ­d customer my.theme ENTWICKLUNG > KONFIG. MANAGEMENT > EGG RELEASES
  • 13. Private Egg Server ● Plone Software Center ● Apache/Nginx ● lovely.buildouthttp für Authentifizierung ● Mehr unter [1] ENTWICKLUNG > KONFIG. MANAGEMENT > EGG RELEASES
  • 14. ARBEITEN IM TEAM ENTWICKLUNG > TEAMARBEIT
  • 15. WIEDERHOLBAR & EINHEITLICH collective.recipe.plonesite [plonesite] recipe = collective.recipe.plonesite site­id = {plone­sites:main} admin­user = ${zope­user:name} instance = instance1 zeoserver = zeoserver enabled = false profiles­initial =     my.policy:default ENTWICKLUNG > TEAMARBEIT
  • 16. GEMEINSAME BEISPIELDATEN wm.sampledata ENTWICKLUNG > TEAMARBEIT
  • 17. (D)VCS ANBINDUNG mr.developer [buildout] sources = sources auto­checkout =     my.policy [sources] my.policy          = git ... my.theme           = hg ... lineage.index      = svn svn.plone.org/.../lineage.index/trunk/ ENTWICKLUNG > TEAMARBEIT
  • 18. VOR COMMIT & RELEASE bin/test aadfasf -s my.package frisi@mbp:~/instances/demo$ bin/test -s my.types -v Running tests at level 1 ... Ran 25 tests with 1 failures and 0 errors in 2 minutes 42.417 seconds. ... Ran 3 tests with 0 failures and 0 errors in 0.003 seconds. Tests with failures: /home/frisi/instances/demo/src/my.types/my/types/search/searchform.txt Total: 28 tests, 1 failures, 0 errors in 3 minutes 3.401 seconds. ENTWICKLUNG > TEAMARBEIT
  • 19. KONFIGURATIONSMGMT (SCM) ARBEITEN IM TEAM PERFORMANCE MONITORING WARTUNG AGENDA
  • 20. Software Architektur Internet ha PRODUKTIVEINSATZ > PERFORMANCE
  • 21. VARNISH VERSTEHEN doc/caching.txt $ parts/varnish­build/bin/varnishlog ­c ­o  RxURL '^/themen$'      | grep ­E "RxRequest|RxURL|TxStatus|TxResponse|X­Varnish­Action"    12 RxRequest    c GET    12 RxURL        c /themen    12 TxStatus     c 200    12 TxResponse   c OK    12 RxRequest    c GET    12 RxURL        c /themen    12 TxStatus     c 304    12 TxResponse   c Not Modified PRODUKTIVEINSATZ > PERFORMANCE > VARNISH
  • 22. WARTUNGSSEITE PRODUKTIVEINSATZ > PERFORMANCE > NGINX
  • 23. WARTUNGSSEITE PRODUKTIVEINSATZ > PERFORMANCE > NGINX
  • 24. WARTUNGSSEITE #replace varnish or nginx error pages proxy_intercept_errors on;  error_page   502 503 =503  /status/502.html; location /status {   root ${buildout:directory}/production/nginx/; } PRODUKTIVEINSATZ > PERFORMANCE > NGINX
  • 25. SEO – DUPLICATE CONTENT noindex, nofollow server { server_name cms.mydomain.com; # do not index or follow content of this domain proxy_set_header X­Robots­Tag 'none';     ... PRODUKTIVEINSATZ > PERFORMANCE > NGINX
  • 26. FEHLER bitte per E-Mail [instance­settings] mailinglogger =     <mailing­logger>       level error       smtp­server localhost       from sysadmin@yourdomain.com       to root       subject Fehlerbericht [Projekt1] %(line)s     </mailing­logger> # Alternativen: collective.logbook; http://areciboapp.com/  PRODUKTIVEINSATZ > MONITORING > EMAIL
  • 27. NAGIOS stets auf der Hut PRODUKTIVEINSATZ > MONITORING > NAGIOS
  • 29. MUNIN vergisst nichts PRODUKTIVEINSATZ > MONITORING > MUNIN
  • 30. DATENBANK GRÖSSE ? PRODUKTIVEINSATZ > MONITORING > MUNIN
  • 31. ZOPE UPTIME PRODUKTIVEINSATZ > MONITORING > MUNIN
  • 32. E-MAIL DURCHSATZ PRODUKTIVEINSATZ > MONITORING > MUNIN
  • 33. Varnish Hit-Rates PRODUKTIVEINSATZ > MONITORING > MUNIN
  • 34. MUNIN EINRICHTUNG doc/monitoring.txt $ sudo munin­run zope­project1_zopememory_Projekt1Instanz1 VmPeak.value 923185152.0 VmSize.value 916013056.0 VmLck.value 0.0 VmHWM.value 684683264.0 VmRSS.value 676757504.0 VmData.value 769015808.0 ... PRODUKTIVEINSATZ > MONITORING > MUNIN
  • 35. KONFIGURATIONSMGMT (SCM) ARBEITEN IM TEAM PERFORMANCE MONITORING WARTUNG AGENDA
  • 36. BACKUP STRATEGIE KW1 Sonntag Montag Dienstag Mittwoch … KW2 Sonntag Montag Dienstag Mittwoch … PRODUKTIVEINSATZ > WARTUNG > BACKUP
  • 37. BACKUP collective.recipe.backup [backup] recipe = collective.recipe.backup keep = 2 PRODUKTIVEINSATZ > WARTUNG > BACKUP
  • 38. BACKUP cronjob #pack zodb each sunday morning 0   4  *   *   0     /home/projekt1/bin/zeopack  > /dev/null 2>&1 #backup everyday in the evening 0 22  *   *   0    /home/projekt1/bin/backup ­q PRODUKTIVEINSATZ > WARTUNG > BACKUP
  • 39. OMG! „ Gestern um 14:00 Uhr wurde alles gelöscht!“ PRODUKTIVEINSATZ > WARTUNG > BACKUP
  • 40. TIPP: STÜNDLICHES BACKUP beim Projektstart $ bin/restore 2012­02­21­13­59 PRODUKTIVEINSATZ > WARTUNG > BACKUP
  • 41. DEBUG INSTANZ starten $ bin/instance­debug fg PRODUKTIVEINSATZ > WARTUNG > DEBUG
  • 42. DEBUG INSTANZ verbinden ssh ­C ­c blowfish ­T ­N ­L 8081:localhost:8499     meister@host.webmeisterei.com http://localhost:8081/Plone/font­page/pdb PRODUKTIVEINSATZ > WARTUNG > DEBUG
  • 43. DEBUG INSTANZ loslegen … ­> raise Exception, "Manually triggered exception" (Pdb) self.context <ATDocument at /new/front­page> (Pdb) self.context.title u'Willkommen bei Plone' PRODUKTIVEINSATZ > WARTUNG > DEBUG
  • 44. LOGFILES ● production/logrotate.conf.template ● Dateext (backup!)                                    1K alternatives.log  502 alternatives.log             502 alternatives.log.1  11K alternatives.log.1           11K alternatives.log.2  15K alternatives.log.2           15K alternatives.log.3   9K alternatives.log.3            9K alternatives.log.4                                    1K alternatives.log  502 alternatives.log             502 alternatives.log­20120109  11K alternatives.log­20120108    11K alternatives.log­20120108  15K alternatives.log­20120107    15K alternatives.log­20120107   9K alternatives.log­20120106     9K alternatives.log­20120106
  • 45. SUPERVISORD PRODUKTIVEINSATZ > WARTUNG > SUPERVISOR
  • 46. VERWALTET PROZESSE CLI meister@kkv01:~$ sudo /etc/init.d/kirche­supervisorctl  MemmonZope1       RUNNING    pid 844, uptime 22 days, 23:39:00 MemmonZope2       RUNNING    pid 843, uptime 22 days, 23:39:00 balancer          RUNNING    pid 847, uptime 22 days, 23:39:00 cache             RUNNING    pid 849, uptime 22 days, 23:39:00 instance1         RUNNING    pid 815, uptime 2  days,  0:53:51 instance2         RUNNING    pid 199, uptime 1  day,   4:15:50 main              RUNNING    pid 850, uptime 22 days, 23:39:00 transform         RUNNING    pid 848, uptime 22 days, 23:39:00 zeo               RUNNING    pid 845, uptime 22 days, 23:39:00 supervisor> restart instance1 instance1: stopped instance1: started PRODUKTIVEINSATZ > WARTUNG > SUPERVISOR
  • 47. SPEICHERFRESSER? Memmon startet neu [supervisor] recipe = collective.recipe.supervisor plugins = superlance Programs =     ...     20 instance1 .../bin/instance1 [console] true zope     ... eventlisteners =     MemmonZope1 TICK_60 .../memmon [­p instance1=780MB ­m root] PRODUKTIVEINSATZ > WARTUNG > SUPERVISOR
  • 48. LOGFILES Autostart [supervisor] recipe = collective.recipe.supervisor plugins = superlance childlogdir = ${buildout:directory}/var/log/supervisor ... programs =     10 zeo       .../bin/runzeo                                         true zope     20 instance1 .../bin/instance1 [console]                            true zope     20 instance2 (autostart=false) .../bin/instance2 [console]          true zope     30 balancer  .../bin/haproxy  [­f .../production/balancer.conf ­db] true balancer     40 transform .../sbin/nginx [­c .../production/transform.conf]      true transform     50 cache     .../bin/cache                                          true     60 main      .../sbin/nginx [­c .../production/main.conf]           true eventlisteners =     MemmonZope1 TICK_60 .../memmon [­p instance1=780MB ­m root]     MemmonZope2 TICK_60 .../memmon [­p instance2=780MB ­m root] PRODUKTIVEINSATZ > WARTUNG > SUPERVISOR
  • 51. FRAGEN / DISKUSSION Twitter: @frisi #plone: frisi E-Mail: harald (at) webmeisterei dot com
  • 52. Link / Bildverzeichnis Glühbirne http://www.flickr.com/photos/dskley/6862644813/ Puzzle http://www.flickr.com/photos/jhritz/409083204/ Pin http://www.flickr.com/photos/wheatfields/3798035262/ Ei http://www.flickr.com/photos/10451396@N00/337315827/ Schweizermesser http://www.flickr.com/photos/ajc1/4663140532/ Ameisen http://www.flickr.com/photos/23271361@N06/5997315172/ Murmeltier http://www.flickr.com/photos/42662226@N04/4894892820/ Elefant http://www.flickr.com/photos/joostvanderpost/3403404375/ Tintenfisch http://www.flickr.com/photos/laughingsquid/4031499134/ Tausenfüßler http://www.flickr.com/photos/janiellebeh/2331035306/ [1] Claytrons Talk http://www.slideshare.net/claytron/buildout-for-the-future Scaling Plone http://scalingplone.pbworks.com