DEPLOYMENT EINES
TYPO3-INTRANETS MIT VAGRANT
TUGCGN MÄRZ 2015
Jari-Hermann Ernst
DIE REFERENTEN
TEAMARBEIT
Christoph Möller
Webdeveloper PHP/TYPO3
B·A·D Gesundheitsvorsorge und Sicherheitstechnik GmbH
Geschäftsführer
network.publishing GmbH
1. Use Case „Intranet zum Mitnehmen"
2. Problems faced
3. Lösungsansatz
4. Walkthrough: Erzeugen eines neuen DEV-Systems
5. Lessons Learned, Verbesserungspotential
6. Fragen & Antworten
DIESE PRÄSENTATION
AGENDA FÜR
Use Case

INTRANET ZUM
MITNEHMEN
KEY-FACTS ZU TEAMPOINT
PROJEKTUMGEBUNG
• "TeamPoint" = Unternehmens-Intranet/Info-Portal
• essentielles System für über 3.000 Mitarbeiter
• Inhalte/Funktionen in ständiger Bearbeitung, User-Generated Content
• eingerichtet als Browser-Startseite - Ausfälle werden sofort bemerkt
• Verfügbarkeit und Performance des LIVE-Systems darf nicht durch DEV-
Prozesse beeinträchtigt werden
SYSTEME, POLICIES, DATEN
PROJEKTUMGEBUNG
• Basis: SLES 11, LAMP, TYPO3 4.5, Apache Solr
• Umfangreiche Integrationen: 

SAP, Datenbanken, eRecruiting, Seminarbuchungen, XML-Daten, APIs
• Staging für Code und Konfiguration (DEV, STAGE, LIVE)
• Multi-Server-Setup (MySQL, Web, Solr, SAN-Storage, LDAP, ...)
• ca. 20 GB Nutzdaten, mehrere GB Datenbankinhalte
• Master-Content wird in LIVE gepflegt
ARCHITEKTUR
GESAMTSYSTEM
AUS UNTERNEHMENSSICHT
ANFORDERUNGEN
• parallel und unabhängig mehrere Features entwickeln
• lange Test-, Feedback-, Freigabezyklen
• Unternehmens-IT darf nicht durch DEV-Prozesse belastet werden
• reproduzierbarer, dokumentierter Entwicklungsprozess
AUS ENTWICKLERSICHT #1
ANFORDERUNGEN
• entwickeln, wo immer man ist (Home-Office, unterwegs)
• neue Dinge gefahrlos ausprobieren (TYPO3-/Solr-Upgrades, ...)
• ständiges Anlegen neuer DEV-Systeme, "Wegwerf-VMs"
• kein Warten auf IT/Dienstleister bei Bedarf nach neuen DEV-Systemen
• Bedarf für konsistente Point-in-Time-Snapshots
• Code, Config, Content und Struktur (DB+Filesystem) müssen passen
AUS ENTWICKLERSICHT #2
ANFORDERUNGEN
• Arbeitsumgebung: Windows-Laptop, bevorzugte IDE (PhpStorm)
• limitierter Plattenplatz, nicht unbedingt High-End aus Performancesicht
• schneller Workflow, direkte Auswirkung bei Änderungen
• Geschwindigkeits-/Platzoptimierung (sperrige Datenmengen)
• unkomplizierte Zusammenarbeit mit Agentur/Dritten
• Integration mit VCS (Subversion, demnächst Gitlab)
Real Life

PROBLEMS
FACED
WENN'S IMMER EINFACH WÄRE...
HERAUSFORDERUNGEN
• Einschränkungen durch Enterprise-IT, lange Lebenszyklen und Policies
• Lizenzbeschränkungen, Kosteneinsparung (SLES 11 vs. Ubuntu Server)
• DEV-System muss auch ohne VPN-Verbindung laufen/erzeugt werden können
• TYPO3 4.5 ist nicht deployment-freundlich
• I/O-Performance ist der Flaschenhals
• Problemfall "LDAP-Authentifizierung"
• Problemfall "E-Mailversand"
FLASCHENHALS "SHARED DIRS"
PERFORMANCE
• Shared Directories VBox/VMWare sind langsam
• lokale VM sollte möglichst nur aus dem echten VM-Filesystem servieren
• daher werden die meisten Nutzdaten per rsync in VM kopiert
• Ausnahme: fileadmin/SHARED, uploads (mehr als 20 GB)
• große Nutzdatenverzeichnisse per Shared Directory und Symlink in DocRoot
SPERRIGES DEPLOYMENT
TYPO3 4.5
• TYPO3 kennt keine DB-Migrationen => EXT:t3deploy, DB-Schema-Updates
• Scheduler, LDAP-Auth, Domain-Records müssen deaktiviert/angepasst werden
• Language Package Updates aus dem TER müssen neu gezogen werden
• generell: passende Overrides/Includes für localconf.php
Lösungsansatz

INTRANET-DEV
MIT VAGRANT
LOKALE SYSTEMUMGEBUNG #1
VORBEREITUNGEN
• Cygwin als UNIX-Umgebung für Windows - siehe http://cygwin.com
• Ziel: Lösung soll unter Windows, Mac OS X, Linux einsetzbar sein
• Benötigte Pakete: openssh, subversion, rsync, wget, mysql (Client)
• SSH-PubKey-Auth einrichten für alle LIVE-Hosts (Web, DB, Solr)
LOKALE SYSTEMUMGEBUNG #2
VORBEREITUNGEN
• Vagrant als Deployment-Framework für lokale virtuelle Maschinen
• siehe http://vagrantup.com
• Virtualisierung, Versuch #1: Virtualbox
• Virtualisierung, Versuch #2: VMWare Workstation + Vagrant-Provider
LOKALE SYSTEMUMGEBUNG #3
VORBEREITUNGEN
• Workspace-Verzeichnis anlegen, im Zugriff für IDE
• auf möglichst große Platte, besser SSD (I/O-Performance)
• "sperrige" Daten als Kopiervorlage lokal ablegen/updaten
• für TYPO3 (SITEDATA):
• fileadmin/SHARED (1TB NFS Volume), uploads, typo3conf
• für Solr (SOLRDATA):
• kompletter Index/Cores, Schemata, Config
VIRTUELLE DEV-MASCHINE
VORBEREITUNGEN
• Ubuntu Server statt SLES 11 (nicht verfügbar als freie Vagrant-Basebox)
• Ubuntu ist besser non-interaktiv skriptbar
• aktuellere Softwareversionen (PHP, MySQL, Kernel, Libs)
• keine Lizenzkosten für lokale DEV-Umgebung
...UND SCHON KANN'S LOSGEHEN!
AUSPROBIEREN
Walkthrough

ERZEUGEN
EINES NEUEN
DEV-SYSTEMS
PROJEKTVERZEICHNIS VORBEREITEN
WALKTHROUGH
• Workspace-Verzeichnis erstellen
• Cygwin-Shell öffnen
• SITEDATA und SOLRDATA bereitstellen (Kopie oder Symlink)
• Vagrant-Config aus SVN auschecken
• Konfigurationsdatei anpassen (Pfade, SVN User)
• Vagrant vorbereiten (Plugins für Package-Cache und VMWare, Lizenz)
PROJEKTVORBEREITUNG
VIDEO
CONFIG-
FILE
CODE
CONFIG-
FILE
CODE
NUTZDATEN UPDATEN
WALKTHROUGH
• Cygwin-Shell öffnen
• ./update-assets.sh
• Aktualisiert SITEDATA und SOLRDATA
• erstellt frischen MySQL-Dump der LIVE-Site und legt ihn lokal ab
• Ziel: 20+ GB nur übertragen, wenn unbedingt nötig
• geht nur bei Verbindung zum LIVE-System (Office-LAN oder per VPN)
UPDATE
ASSETS
CODE
UPDATE
ASSETS
CODE
UPDATE
ASSETS
CODE
UPDATE
ASSETS
CODE
NUTZDATEN UPDATEN
VIDEO
LOKALE VM ERZEUGEN
WALKTHROUGH
• Cygwin-Shell in Projektverzeichnis öffnen
• vagrant up --provider vmware_workstation
• Debug: VAGRANT_LOG=INFO vagrant up --provider vmware_workstation
• erstellt neue VM, installiert und konfiguriert nach Bauplan/Skript
• lokale Abweichungen (Auth/LDAP, Mail/SMTP, Netzwerk, SSL-Zertifikat, ...)
VAGRANT-
FILE
CODE
LOKALE VM ERZEUGEN
VIDEO
INSTALL
DEVSITE
CODE
INSTALL
DEVSITE
CODE
DEVSITE
CONFIG
FILES
CODE
INSTALL
DEVSITE
CODE
INSTALL
DEVSITE
CODE
INSTALL
DEVSITE
CODE
INSTALL
DEVSITE
CODE
INSTALL
DEVSITE
CODE
INSTALL
DEVSITE
CODE
INSTALL
DEVSITE
CODE
INSTALL
DEVSITE
CODE
INSTALL
DEVSITE
CODE
ERGEBNISSE
VIDEO
Lessons Learned

VERBESSERUNGS-
POTENTIAL
BESSER GEHT IMMER
LESSONS LEARNED
• EXT:coreapi kann mittlerweile mehr (DB-Schema-Updates, Clear Cache, ...)
• EXT:t3deploy wäre nicht mehr nötig
• alternativ: TYPO3 Surf
• git ist besser geeignet als SVN 

(Cherry Picking, Merge-Lanes, Feature Branches, etc.)
• Warum kein PuPHPet, Puppet, chef, ansible?
BESSER GEHT IMMER
LESSONS LEARNED
• VMWare-Investition lohnt.
• SLES 11 ist so richtig Enterprise.
• Deployment mit TYPO3 6.2 ist einfacher.
FRAGEN
&
ANTWORTEN
VIELEN DANK!

Deployment von Entwicklungsumgebungen eines TYPO3-Intranets mit Vagrant