Your SlideShare is downloading. ×
0
BUILDOUT  ALLES IM GRIFF      WEBMEISTEREI      HARALD FRIESSNEGGER      PLONE KONFERENZ MÜNCHEN, 2012
WORUM GEHTS?  Template                INTRO
WORUM GEHTS?  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.com...
DIE LÖSUNG    Versionen pinnen [buildout] extends =     http://dist.plone.org/release/4.1.4/versions.cfg     http://good­p...
NICHT VERGESSEN  buildout.dumppickedversions   [buildout]   extensions =       buildout.dumppickedversions   $ bin/buildou...
IMMER UP TO DATE    z3c.checkversions frisi@mbp:~$ bin/checkversions ­v versions.cfg | grep was jarn.mkrelease=3.5 # was: ...
WENNS UM DIE WURST GEHT  ...braucht man Eier   recipe = infrae.subversion   as_eggs = true   urls =       https://my.repos...
JEDES MAL EIN RELEASE?   Puh! $ vi setup.py; vi History.txt $ svn ci ­m prepare release $ svn cp . https://myrepos.com/pac...
DRY  jarn.mkrelease  zest.releaser $ mkrelease ­d customer my.theme           ENTWICKLUNG > KONFIG. MANAGEMENT > EGG RELEA...
Private Egg Server●    Plone Software Center●    Apache/Nginx●    lovely.buildouthttp für Authentifizierung●    Mehr unter...
ARBEITEN IM TEAM                   ENTWICKLUNG > TEAMARBEIT
WIEDERHOLBAR & EINHEITLICH  collective.recipe.plonesite   [plonesite]   recipe = collective.recipe.plonesite   site­id = {...
GEMEINSAME BEISPIELDATEN  wm.sampledata                  ENTWICKLUNG > TEAMARBEIT
(D)VCS ANBINDUNG    mr.developer [buildout] sources = sources auto­checkout =     my.policy [sources] my.policy          =...
VOR COMMIT & RELEASE     bin/test     aadfasf -s my.package frisi@mbp:~/instances/demo$ bin/test -s my.types -v Running te...
KONFIGURATIONSMGMT (SCM)  ARBEITEN IM TEAMPERFORMANCE  MONITORING  WARTUNG                        AGENDA
Software ArchitekturInternet           ha                PRODUKTIVEINSATZ > PERFORMANCE
VARNISH VERSTEHEN     doc/caching.txt$ parts/varnish­build/bin/varnishlog ­c ­o  RxURL ^/themen$     | grep ­E "RxRequest|...
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....
SEO – DUPLICATE CONTENT  noindex, nofollow   server {      server_name cms.mydomain.com;      # do not index or follow con...
FEHLER  bitte per E-Mail   [instance­settings]   mailinglogger =       <mailing­logger>         level error         smtp­s...
NAGIOS  stets auf der Hut             PRODUKTIVEINSATZ > MONITORING > NAGIOS
WEBSEITE ERREICHBAR?define service{   use                  service­template   host_name            host01   service_descri...
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 92318515...
KONFIGURATIONSMGMT (SCM)  ARBEITEN IM TEAM  PERFORMANCE  MONITORINGWARTUNG                         AGENDA
BACKUP STRATEGIE KW1   Sonntag   Montag     Dienstag   Mittwoch     … KW2   Sonntag   Montag     Dienstag   Mittwoch     …...
BACKUP  collective.recipe.backup  [backup]  recipe = collective.recipe.backup  keep = 2                         PRODUKTIVE...
BACKUP    cronjob #pack zodb each sunday morning 0   4  *   *   0     /home/projekt1/bin/zeopack  > /dev/null 2>&1 #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://local...
DEBUG INSTANZ  loslegen … ­> raise Exception, "Manually triggered exception" (Pdb) self.context <ATDocument at /new/front­...
LOGFILES●   production/logrotate.conf.template●   Dateext (backup!)                                       1K alternatives....
SUPERVISORD          PRODUKTIVEINSATZ > WARTUNG > SUPERVISOR
VERWALTET PROZESSE   CLI meister@kkv01:~$ sudo /etc/init.d/kirche­supervisorctl  MemmonZope1       RUNNING    pid 844, upt...
SPEICHERFRESSER?   Memmon startet neu  [supervisor]  recipe = collective.recipe.supervisor  plugins = superlance  Programs...
LOGFILES   Autostart  [supervisor]  recipe = collective.recipe.supervisor  plugins = superlance  childlogdir = ${buildout:...
WARS DAS?
NICHT GANZ!
FRAGEN / DISKUSSIONTwitter: @frisi#plone: frisiE-Mail: harald (at) webmeisterei dot com
Link / BildverzeichnisGlühbirne            http://www.flickr.com/photos/dskley/6862644813/Puzzle               http://www....
Upcoming SlideShare
Loading in...5
×

Buildout - Alles im Griff

1,080

Published on

Vortrag auf der Plone Konferenz in München 2012.

Buildout hat sich als Standard sowohl für die Plone Entwicklung am eigenen Rechner als auch die Einrichtung von Plone Hosting durchgesetzt.
Der Vortrag stellt eine Konfiguration vor, die Entwicklung und Deployment vereint. Von der Entwicklung von Erweiterungen inkl. automatisierter Releases auf dem eigenen Paketserver bis hin zur Inbetriebnahme am Server. Skalierbar durch ZEO, Lastverteilung und Caching-Server. Außerdem nützliche Vorlagen und Tipps für Nachbetreuung und den ausfallsicheren Betrieb: Mail bei Fehlermeldungen, System-Monitoring, Statistiken, Backups und Wartung.

Der Vortrag richtet sich sowohl an Einsteiger die einen Überblick über die Möglichkeiten von zc.buildout gewinnen möchten als auch an "alte Hasen" die hier den ein oder anderen nützliche Tipp kennenlernen und in der anschliessenden Diskussion über Alternativen und ihre Erfahrungen berichten. Anhand praxisnaher Beispiele werden unter anderem auch oft vergessene, aber für erfolgreiche Projekte wichtige Aspekte behandelt und "best practices" vorgestellt:

* Monitoring um sofort informiert zu werden, wenn eine wichtige Komponente ihren Dienst quittiert

* Fehlerbehandlung (Welche Anfragen von Benutzern führen auf dem Server zu Fehlern und damit Unzufriedenheit)

* Regelmässige Wartung (Datenbank packen und Backup-Strategien)
Statistik mit AWStats und plone-spezifische Auswertungen
Versionsverwaltung und Releases auf öffentlichen und privaten Egg-Servern (und deren Betrieb)

* Verteilte Entwicklung mittels einheitlich generierter Beispielinhalte

* Strategie für Cronjobs und Logrotate für ein optimales Zusammenspiel der einzelnen Komponenten

Dabei werden nicht nur die verwendeten Pakete/Rezepte vorgestellt, sondern alle Teile zu einem funktionsfähigen Ganzen zusammengesetzt auf dessen Basis ein neues Projekt gestartet werden kann.

Published in: Technology
1 Comment
0 Likes
Statistics
Notes
  • anmerkung zu einer frage bzgl backup: 'wie kann man einen unterordner zu einem bestimmten zeitpunkt wiederherstellen?'

    über twitter von @it_spirit
    @frisi Use http://t.co/pOUjpyss to perform time travel in a Zope database. #plonekonf #zodb #restore
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Be the first to like this

No Downloads
Views
Total Views
1,080
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
1
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Buildout - Alles im Griff"

  1. 1. BUILDOUT ALLES IM GRIFF WEBMEISTEREI HARALD FRIESSNEGGER PLONE KONFERENZ MÜNCHEN, 2012
  2. 2. WORUM GEHTS? Template INTRO
  3. 3. WORUM GEHTS? Tipps und Tools INTRO
  4. 4. WORUM NICHT? Totale Automatisierung INTRO
  5. 5. KONFIGURATIONSMGMT (SCM) ARBEITEN IM TEAM PERFORMANCE MONITORING WARTUNG AGENDA
  6. 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. 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. 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. 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. 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. 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. 12. DRY jarn.mkrelease zest.releaser $ mkrelease ­d customer my.theme ENTWICKLUNG > KONFIG. MANAGEMENT > EGG RELEASES
  13. 13. Private Egg Server● Plone Software Center● Apache/Nginx● lovely.buildouthttp für Authentifizierung● Mehr unter [1] ENTWICKLUNG > KONFIG. MANAGEMENT > EGG RELEASES
  14. 14. ARBEITEN IM TEAM ENTWICKLUNG > TEAMARBEIT
  15. 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. 16. GEMEINSAME BEISPIELDATEN wm.sampledata ENTWICKLUNG > TEAMARBEIT
  17. 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. 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. 19. KONFIGURATIONSMGMT (SCM) ARBEITEN IM TEAMPERFORMANCE MONITORING WARTUNG AGENDA
  20. 20. Software ArchitekturInternet ha PRODUKTIVEINSATZ > PERFORMANCE
  21. 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. 22. WARTUNGSSEITE PRODUKTIVEINSATZ > PERFORMANCE > NGINX
  23. 23. WARTUNGSSEITE PRODUKTIVEINSATZ > PERFORMANCE > NGINX
  24. 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. 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. 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. 27. NAGIOS stets auf der Hut PRODUKTIVEINSATZ > MONITORING > NAGIOS
  28. 28. 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
  29. 29. MUNIN vergisst nichts PRODUKTIVEINSATZ > MONITORING > MUNIN
  30. 30. DATENBANK GRÖSSE ? PRODUKTIVEINSATZ > MONITORING > MUNIN
  31. 31. ZOPE UPTIME PRODUKTIVEINSATZ > MONITORING > MUNIN
  32. 32. E-MAIL DURCHSATZ PRODUKTIVEINSATZ > MONITORING > MUNIN
  33. 33. Varnish Hit-Rates PRODUKTIVEINSATZ > MONITORING > MUNIN
  34. 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. 35. KONFIGURATIONSMGMT (SCM) ARBEITEN IM TEAM PERFORMANCE MONITORINGWARTUNG AGENDA
  36. 36. BACKUP STRATEGIE KW1 Sonntag Montag Dienstag Mittwoch … KW2 Sonntag Montag Dienstag Mittwoch … PRODUKTIVEINSATZ > WARTUNG > BACKUP
  37. 37. BACKUP collective.recipe.backup [backup] recipe = collective.recipe.backup keep = 2 PRODUKTIVEINSATZ > WARTUNG > BACKUP
  38. 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. 39. OMG! „ Gestern um 14:00 Uhr wurde alles gelöscht!“ PRODUKTIVEINSATZ > WARTUNG > BACKUP
  40. 40. TIPP: STÜNDLICHES BACKUP beim Projektstart$ bin/restore 2012­02­21­13­59 PRODUKTIVEINSATZ > WARTUNG > BACKUP
  41. 41. DEBUG INSTANZ starten $ bin/instance­debug fg PRODUKTIVEINSATZ > WARTUNG > DEBUG
  42. 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. 43. DEBUG INSTANZ loslegen … ­> raise Exception, "Manually triggered exception" (Pdb) self.context <ATDocument at /new/front­page> (Pdb) self.context.title uWillkommen bei Plone PRODUKTIVEINSATZ > WARTUNG > DEBUG
  44. 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. 45. SUPERVISORD PRODUKTIVEINSATZ > WARTUNG > SUPERVISOR
  46. 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. 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. 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
  49. 49. WARS DAS?
  50. 50. NICHT GANZ!
  51. 51. FRAGEN / DISKUSSIONTwitter: @frisi#plone: frisiE-Mail: harald (at) webmeisterei dot com
  52. 52. Link / BildverzeichnisGlü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-futureScaling Plone http://scalingplone.pbworks.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×