zum Hauptinhalt springen.
UX/UI Design, Entwicklung & TYPO3 in Karlsruhe Karlsruhe | seit 2006

Einfaches Deployment per Shell-Skript - mit Beipiel für TYPO3 Installationen

21.10.2019, geschätzte Lesedauer: Minute(n). #entwicklung #typo3

Es gibt zahlreiche Tools und Möglichkeiten, lokale Projekte auf den Live Server zu deployen. Hier stelle ich eine einfache Methode vor zur Synchronisation der Daten mit Hilfe eines kleinen Bash Skripts. Das bietet sich für kleine Projekte an. Update: Beispiel für ein einfaches TYPO3 Deployment.

Deployment für einfache Webprojekte

Zusammengefasst versteht man unter Deployment die Verwaltung und automatisierte Installation von Software und Software Updates. In diesem Artikel geht es nur um einen Teilaspekt, dem kontrollierten Transfer von lokalen Dateien auf einen Remote-Server. Oft braucht es nicht mehr.

So synchronisiert das simple Bash Skript nicht nur alle Dateien des lokalen Pfades auf den gelisteten Remote-Server. Es können zudem Dateien angegeben werden, die das Skript ignorieren soll. Bei erneutem Ausführen des Bash Scripts werden zudem nur zwischenzeitlich geänderte Dateien und Verzeichnisse übertragen.

Auf dem Server muss als Voraussetzung "rsync" installiert sein.

#!/bin/bash # deploy script: customize variables and run 'sh deploy.sh' username="[username]@[host]" remote_path="/absolute/path/to/destination/project_directory_name/" local_path="./" excludestr=" --exclude '.vscode' --exclude '.DS_Store' --exclude 'deploy.sh' --exclude '.git' --exclude '.gitignore' --exclude 'gulpfile.js' --exclude 'package.json' --exclude 'package-lock.json' --exclude 'node_modules' " cmd="rsync -avz --delete --force $excludestr -e ssh $local_path ${username}:${remote_path}" echo $cmd eval $cmd

Zum Repository:
https://github.com/onza/deploy

Beispiel: Deployment von TYPO3 Projekten

Update 8.7.2022

Mit diesem Skript könnte ein einfaches Deployment von TYPO3 Installationen im Composer-Modus so aussehen:

  • Shell Skript im Root-Verzeichnis ablegen und 'username', 'remote_path' und 'local_path' anpassen.
  • Im Script <--delete --force> löschen, damit Dateien/Verzeichnisse, die sich zukünftig nur auf dem Remote Server befinden, nicht gelöscht werden.
  • Bei der erstmaligen Synchronisation sollten nur Daten, die definitiv nicht auf dem Remote-Server benötigt werden, von der Synchronisation ausgenommen werden. In meinen Installationen wären das beispielsweise:
--exclude '.ddev' --exclude '.vscode' --exclude '.DS_Store' --exclude '.git' --exclude '.gitignore' --exclude 'gulpfile.js' --exclude 'package.json' --exclude 'package-lock.json' --exclude 'node_modules' --exclude 'template_website' --exclude 'deploy.sh' --exclude 'public/typo3temp/*'

Jetzt kann die erste Synchronisation gestartet werden. Danach müssen auf dem Remote-Server die üblichen Dateien angepasst werden, so dass auch dort die Installation läuft.

Nach dem ersten Transfer

Wichtig: Bei zukünftigen Transfers muss nun verhindert werden, dass die Remote-Server spezifischen Anpassungen wieder überschrieben werden. Daher müssen diese Dateien sofort nach der ersten Übertragung von der weiteren Synchronisation ausgeschlossen werden. Das betrifft darüber hinaus auch Dateien, die das CMS auf dem Remote-Server anlegt oder ändert (z.B. Cache Dateien) und Dateien, die von Redakteuren angepasst und hochgeladen werden (z.B. Dateien im Verzeichnis "Fileadmin"). Die im Shell Script hinterlegte Liste von Dateien, die von der Synchronisation ausgeschlossen werden, wird folglich erweitert um folgende Dateien:

--exclude 'config/*' --exclude 'public/fileadmin/*' --exclude 'public/.htaccess' --exclude 'public/typo3conf/AdditionalConfiguration.php' --exclude 'public/typo3conf/LocalConfiguration.php' --exclude 'public/typo3temp/*' --exclude 'var/cache/*'

Update 22.3.2023: TYPO3 ab Version 12

Die Dateien LocalConfiguration.php und AdditionalConfiguration.php können aus der "exclude" Liste entfernt werden. Diese Dateien sind in TYPO3 12 umbenannt und liegen im Verzeichnis "config".

 

Skyline Karlsruhe