• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Buildout - Alles im Griff
 

Buildout - Alles im Griff

on

  • 637 views

Vortrag auf der Plone Konferenz in München 2012. ...

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.

Statistics

Views

Total Views
637
Views on SlideShare
637
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
1

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel

11 of 1 previous next

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
  • 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
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Buildout - Alles im Griff Buildout - Alles im Griff Presentation Transcript

    • 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.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 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|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 MONITORINGWARTUNG 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 uWillkommen 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
    • 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.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