Wichtiger Hinweis zu Beginn: Ich mache mir eine Kopie von der Webseite, die ich nach Composer migrieren will. Wie man eine Webseite für eine Kopie sichert, habe ich hier beschrieben: Typo3-Installation sichern. Auf meinem Server mit Ubuntu 22.04 richte ich mir unter /var/www/ ein Verzeichnis ein, das ich z. B. old-source nenne. Hierein kopiere ich meine kopierte Symlink-Installation.
Vorbereitungen für Apache
Unter /var/www/ erstelle ich ein weiteres Verzeichnis, das ich z. B. migration2c nenne. Ich will die migrierte Installation im Netz überprüfen und nicht auf meiner lokalen Festplatte oder in einer virtuellen Maschine. Deshalb sollte auf meinem Server schon eine URL/Domain vorhanden sein, die ich mit einem Browser aufrufen kann. Im Verzeichnis migration2c erstelle ich ein weiteres Verzeichnis mit dem Namen public. Im public-Verzeichnis lege ich eine index.html Datei, die z. B folgenden Inhalt enthält:
<html> <head> <title>migration2c</title> </head> <body> <h1>This is public</h1> </body> </html>
Das Verzeichnis migration2c muss für den Webserver lesbar sein, deshalb führe ich aus:
sudo chown -R www-data:www-data /var/www/migration2c
Unter /etc/apache2/sites-available lege ich eine Datei mit dem Namen migration2c.conf an. In die Datei schreibe ich:
Alias /migration2c "/var/www/migration2c/public" <Directory /var/www/migration2c/public> Require all granted AllowOverride All Options FollowSymLinks MultiViews <IfModule mod_dav.c> Dav off </IfModule> </Directory>
Ich lasse Apache diese Datei einlesen:
sudo a2ensite migration2c.conf
Danach starte ich Apache2 erneut:
sudo systemctl reload apache2
Jetzt kann ich testen, ob das Verzeichnis erreichbar ist. Wenn meine Domain z. B. mydomain.de heißt, gebe ich in den Browser ein: mydomain.de/migration2c
Jetzt sollte die oben erstellte Überschrift im Browser zu sehen sein. Ist das der Fall, ist so weit alles in Ordnung, und ich lösche alle Dateien und Verzeichnisse im Verzeichnis migration2c.
Dieser Abschnitt hat nichts mit der eigentlichen Migration zu tun. Er diente nur dazu, eine Webumgebung zu schaffen, auf die ich später zugreifen kann.
Composer Package erstellen
Unter get.typo3.org/misc/composer/helper kann ich mir für eine Typo3-Installation auf Composer basierend ein Composer Package zusammenklicken. Als Version wähle ich z. B. TYPO3 11 LTS an, wenn ich eine 11er-Version migrieren will. Ich will es mir einfach machen und klicke den Button TYPO3/FULL an, der alles auswählt. Dadurch wird oben auf der Seite ein Befehl erstellt, den ich ins Clipboard kopiere. Composer sollte auf dem Server bereits installiert sein. Dass kann man feststellen, indem man den Befehl
composer
aufruft. Ich wechsele in das jetzt wieder leere Verzeichnis migration2c, füge den kopierten Composer-Befehl ein und führe ihn aus. Nach einiger Zeit hat Composer alles heruntergeladen. In dem Verzeichnis befinden sich nun die Dateien composer.json und composer.lock sowie die Verzeichnisse public und vendor. Installation Gebe ich in meinen Browser nun wieder das Ziel mydomain.de/migration2c ein, erscheint die Installationsmaske „Installing TYPO3 CMS“. Die Installation kann aber nur fortgeführt werden, wenn folgender Hinweis beachtet wird: „To begin the installation, create an empty file called FIRST_INSTALL in the document root of your web server.“ Ich begebe mich deshalb wieder auf meinen Server und lege im Verzeichnis /public, das mein Document Root ist, die Datei FIRST_INSTALL an:
sudo touch FIRST_INSTALL
Ich lade die Webseite neu und erhalte folgende Fehlermeldungen: Directory /public is not writable Das Verzeichnis /public ist noch nicht vom Webserver lesbar, deshalb gebe ich noch einmal ein: sudo chown -R www-data:www-data /var/www/migration2c Low PHP script execution time max_execution_time=30 Your max_execution_time is low. While TYPO3 often runs without problems with 30 seconds, it may still happen that script execution is stopped before finishing calculations. You should monitor the system for messages in this area and maybe raise the limit to 240 seconds: max_execution_time=240 PHP max_input_vars very low max_input_vars=1000 This setting can lead to lost information if submitting forms with lots of data in TYPO3 CMS (as the install tool does). It is highly recommended to raise this to at least 1500: max_input_vars=1500 Ich will den Empfehlungen folgen und öffne die php.ini unter /etc/php/7.4/apache2. Dort setze ich max_execution_time auf 240 und max_input_vars auf 1500. Nach
sudo systemctl reload apache2
refreshe ich den Browser und die Fehlermeldungen sind verschwunden. Anschließend wird eine Verbindung zur Datenbank aufgebaut. Ich gebe den Usernamen und das Passwort meines Mysql-Datenbankservers ein. Wieder eine Seite weiter vergebe ich z.B. den Datenbanknamen projekt1b_db. Zum Schluss setze ich meinen Usernamen, eine Passwort und meine E-Mailadresse ein. Mit „Take me straight to the backend“ öffne ich das Backend. Ich wähle bei den Admin Tools „Extensions“ an und sehe, dass die Seite im „Composer mode“ arbeitet. Datenbank importieren Zu Beginn habe ich mir ein Sicherheitskopie meiner Typo3-Installation angelegt. Nehmen wir an, die gesicherte Datenbank heißt projekt1a_db. Bei der Composer-basierten Typo3-Installation gerade habe ich eine Datenbank mit dem Namen projekt1b_db erzeugt. Jetzt sollen die Daten von der gesicherten Datenbank projekt1a_db in die neue Datenbank projekt1b_db kopiert werden. Dazu gebe ich im Terminal ein:
mysql -h localhost -u DATENBANK-USERNAME -p projekt1b_db < projekt1a_db
Nachdem ich das Datenbank-Passwort eingegeben habe werden die Daten von der Datenbank projekt1a_db in die Datenbank projekt1b_db übertragen. Ich lade die Seite neu und befinde mich in der Anmeldemaske und melde mich wieder an. Im Typo3-Backend öffen ich Web > Pages und sehe, dass die Baumstruktur vorhanden ist. Ich kopiere das Verzeichnis „sides“ aus meinem alten Projekt, das unter typo3conf liegt, in meine neue Installation nach /config, das auf der gleichen Ebene wie /public liegt. Im Backende der neuen Seite sollte nun auch diese Side-Konfiguration zu sehen sein. Alternativ kann ich auch unter Side-Management > Sites die Einträge selbst vornehmen. Den Entry Point muss ich in beiden Fällen auf meine neue Installation anpassen. Falls ich noch Extensions benötige, kann ich diese auf der Ebene mit der config.json mit folgendem Befehl installieren:
composer require vendor/package
Falls man mal eine Extension installiert hat, die Probleme bereitet kann man sie folgendermaßen wieder deinstallieren:
composer remove vendor/package
Bemerkungen :