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 Methode über ein kleines Bash Skript vor, das sich für kleine Projekte anbietet. 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 werden wie üblich auf dem Remote-Server ein paar Dateien angepasst, damit die Installation läuft.

Nach dem ersten Transfer

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 weiterer 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 ergänzt 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/*'
Skyline Karlsruhe