Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Content-Synchronisierung

 Content-Synchronisierung

Oliver Klee

March 26, 2024
Tweet

More Decks by Oliver Klee

Other Decks in Programming

Transcript

  1. Fahrplan 1. Warum? 2. Randbedingungen 3. Modelle und Strategien 4.

    die Technik dahinter 5. weitere Tools 6. Datenschutz 7. Strategie für euch
  2. Fahrplan 1. Warum? 2. Randbedingungen 3. Modelle und Strategien 4.

    die Technik dahinter 5. weitere Tools 6. Datenschutz 7. Strategie für euch
  3. Warum Content synchronisieren? Ich möchte lokal beim Entwickeln keine Testdaten

    händisch eingeben müssen. Ich möchte lokal beim Entwickeln echte Daten sehen. Ich möchte Features auf Staging mit echten Daten sehen. Ich möchte die Daten auf Staging sehen, bevor sie auf Production gehen. Ich möchte die Production-Daten auf mehreren Systemen parallel eingeben. Ich möchte 1x-Testumgebungen mit echten Daten aufsetzen.
  4. Fahrplan 1. Warum? 2. Randbedingungen 3. Modelle und Strategien 4.

    die Technik dahinter 5. weitere Tools 6. Datenschutz 7. Strategie für euch
  5. Randbedingungen Die Synchronisierung muss wiederholbar und idempotent sein. Die Synchronisierung

    soll mit 1 Kommando ausführbar sein. Wir müssen die DSGVO einhalten. Auf Production dürfen keine Development- Dependencies liegen. Die Berechtigungen müssen persönlich sein können. Auf Production sollen keine möglichst wenig Credentials liegen.
  6. Fahrplan 1. Warum? 2. Randbedingungen 3. Modelle und Strategien 4.

    die Technik dahinter 5. weitere Tools 6. Datenschutz 7. Strategie für euch
  7. Fahrplan 1. Warum? 2. Randbedingungen 3. Modelle und Strategien 4.

    die Technik dahinter 5. weitere Tools 6. Datenschutz 7. Strategie für euch
  8. Datenbank selektiv dumpen (lokal in DDEV) mkdir -p var/tmp vendor/bin/typo3

    database:updateschema vendor/bin/typo3 database:export \ --exclude be_sessions \ --exclude be_users \ --exclude cache_* \ --exclude fe_sessions \ --exclude fe_users \ --exclude sys_be_shortcuts \ --exclude sys_history \ --exclude sys_lockedrecords \ --exclude sys_log \ --exclude tx_extensionmanager_* \ --exclude tx_scheduler_* \ --exclude tx_seminars_attendances \ > var/tmp/deployer-db-dump.sql
  9. Datenbank selektiv dumpen (remote mit Deployer) task('typo3:database:dump', static function ():

    void { $locationOnServer = '/tmp/deployer-db-dump.sql'; $excludedTables = [ 'be_sessions', 'be_users', 'cache_*', 'fe_sessions', 'fe_users', 'static_*', 'sys_be_shortcuts', 'sys_history', 'sys_lockedrecords', 'sys_log', 'sys_news', 'sys_refindex', 'tx_extensionmanager_*', 'tx_scheduler_*', ]; $dumpCommand = '{{bin/php}} {{deploy_path}}/current/vendor/bin/typo3 database:export -e ' . \implode(' -e ', $excludedTables) . ' > ' . $locationOnServer; run($dumpCommand); download($locationOnServer, 'var/tmp/deployer-db-dump.sql'); run('rm ' . $locationOnServer); })->desc('Dump the database into var/tmp/ on the local machine');
  10. Assets pullen (mit Deployer) task('typo3:fileadmin:clone', static function (): void {

    $folder = 'public/fileadmin/'; $filesOnServer = '{{deploy_path}}/current/' . $folder . '*'; $localFolder = $folder; download($filesOnServer, $localFolder); })->desc('Clones the fileadmin folder from the live site');
  11. Datenbank und Assets pullen (mit Deployer und DDEV) ## Description:

    Copies the DB and assets from the production system to the local system. ## Usage: db-pull ## Example: "ddev db-pull" echo "Copying the uploaded files from the production system …" php tools/deployer.phar typo3:fileadmin:clone echo "Dumping and copying the database from the production system …" mkdir -p var/tmp php tools/deployer.phar typo3:database:dump typo3 database:import < var/tmp/deployer-db-dump.sql rm var/tmp/deployer-db-dump.sql echo "Updating the DB schema …" typo3 database:updateschema echo "Updating the local reference index …" typo3 referenceindex:update
  12. Assets pushen (reines Bash-Skript mit rsync) CURRENT_DIRECTORY=$(dirname "$BASH_SOURCE") source "${CURRENT_DIRECTORY}/output.sh"

    linefeed DB_PACKAGE_ROOT="${CURRENT_DIRECTORY}/../" LOCAL_PROJECT_ROOT="${DB_PACKAGE_ROOT}../../../" LOCAL_FILEADMIN="${LOCAL_PROJECT_ROOT}public/fileadmin/" echo 'Copying the media files to the production system …' rsync -avz -e ssh --delete "${LOCAL_FILEADMIN}" "????@???:/???/shared/public/fileadmin/"
  13. Datenbank pushen (mit Deployer) task('typo3:database:push', static function (): void {

    $locationOnServer = '/tmp/deployer-db-dump.sql'; upload('var/tmp/deployer-db-dump.sql', $locationOnServer); $importCommand = '{{bin/php}} {{deploy_path}}/current/vendor/bin/typo3 database:import < ' . $locationOnServer; run($importCommand); run('rm ' . $locationOnServer); })->desc('Pushes the existing DB dump from local var/tmp/ to the remote machine and imports it there');
  14. Datenbank und Assets pushen (mit DDEV) #!/bin/bash ## Description: Exports

    the local media and DB to the live system. ## Usage: db-push ## Example: "ddev db-push" echo "Pushing the media assets to the production system …" vendor/bin/typo3 install:fixfolderstructure vendor/bin/push-media echo "Done." echo echo "Dumping and copying the database to the production system …" .ddev/commands/web/db-dump php tools/deployer.phar typo3:database:push rm var/tmp/deployer-db-dump.sql echo "Done."
  15. Fahrplan 1. Warum? 2. Randbedingungen 3. Modelle und Strategien 4.

    die Technik dahinter 5. weitere Tools 6. Datenschutz 7. Strategie für euch
  16. Fahrplan 1. Warum? 2. Randbedingungen 3. Modelle und Strategien 4.

    die Technik dahinter 5. weitere Tools 6. Datenschutz 7. Strategie für euch
  17. Daten selektiv dumpen task('typo3:database:dump', static function (): void { $locationOnServer

    = '/tmp/deployer-db-dump.sql'; $excludedTables = [ 'be_sessions', 'be_users', 'cache_*', 'fe_sessions', 'fe_users', 'static_*', 'sys_be_shortcuts', 'sys_history', 'sys_lockedrecords', 'sys_log', 'sys_news', 'sys_refindex', 'tx_extensionmanager_*', 'tx_scheduler_*', ]; $dumpCommand = '{{bin/php}} {{deploy_path}}/current/vendor/bin/typo3 database:export -e ' . \implode(' -e ', $excludedTables) . ' > ' . $locationOnServer; run($dumpCommand); download($locationOnServer, 'var/tmp/deployer-db-dump.sql'); run('rm ' . $locationOnServer); })->desc('Dump the database into var/tmp/ on the local machine');
  18. Fahrplan 1. Warum? 2. Randbedingungen 3. Modelle und Strategien 4.

    die Technik dahinter 5. weitere Tools 6. Datenschutz 7. Strategie für euch