composer.json: die PHP-Pakete
TYPO3-Systemextensions, Keycloak-Anbindung, lokale Pakete und wie Updates ablaufen.
Überblick
{
"name": "local/typo3-appliance",
"description": "TYPO3 Docker Appliance",
"type": "project",
"license": "GPL-2.0-or-later",
…
}Composer ist der Paketmanager für PHP. composer.json legt fest, welche Pakete in welchen Versionsbereichen installiert werden. Das ist der empfohlene Weg, TYPO3 zu installieren: Core, Systemextensions und Erweiterungen sind normale Composer-Pakete.
Der Typ project kennzeichnet eine Anwendung, die nicht selbst als Bibliothek eingebunden wird. Die Lizenz GPL-2.0-or-later entspricht der von TYPO3.
Lokale Pakete (repositories)
"repositories": [
{
"type": "path",
"url": "packages/*"
}
],Neben dem öffentlichen Verzeichnis Packagist sucht Composer Pakete auch in packages/. Jeder Unterordner mit eigener composer.json wird zum Paket, hier local/oidc-backend und local/site-package.
Pfad-Pakete installiert Composer als symbolischen Link: vendor/local/site-package zeigt auf packages/site_package. Eine neue eigene Extension legt man als Ordner an und bindet sie ein:
docker compose run --rm --no-deps --entrypoint "" -v "$PWD:/app" -w /app php \
composer require local/meine-extension:@dev --no-install
docker compose up -d --build
Abhängigkeiten (require)
"require": {
"php": "^8.4",
"causal/oidc": "^6.0",
"local/oidc-backend": "@dev",
"local/site-package": "@dev",
"typo3/cms-backend": "^14.3",
"typo3/cms-core": "^14.3",
…
},Die Versionsangaben folgen dem Semantic Versioning:
^14.3erlaubt alle Versionen ab 14.3.0 unter 15.0.0, also Bugfix- und Feature-Updates von TYPO3 14, aber keinen Sprung auf eine neue Hauptversion."php": "^8.4"ist kein Paket, sondern eine Bedingung: Composer verweigert die Installation unter einer älteren PHP-Version.@deverlaubt beim lokalen Paket jeden Entwicklungsstand. Pfad-Pakete haben keine veröffentlichten Versionen.
Die Pakete im Einzelnen:
| Paket | Aufgabe |
|---|---|
typo3/cms-core | Kern von TYPO3 |
typo3/cms-backend | Backend-Oberfläche |
typo3/cms-frontend | Ausgabe der Website |
typo3/cms-extbase, typo3/cms-fluid | MVC-Framework und Template-Engine |
typo3/cms-fluid-styled-content | Standard-Inhaltselemente wie Text, Bild, Tabelle |
typo3/cms-rte-ckeditor | Rich-Text-Editor CKEditor |
typo3/cms-install | Install Tool und typo3 setup |
typo3/cms-extensionmanager | Extension-Verwaltung im Backend |
typo3/cms-filelist | Dateiverwaltung (fileadmin) |
typo3/cms-beuser, typo3/cms-setup | Benutzerverwaltung und persönliche Benutzereinstellungen |
typo3/cms-belog | Protokoll der Backend-Aktionen |
typo3/cms-dashboard | Dashboard nach dem Login |
typo3/cms-info, typo3/cms-lowlevel | Seiteninformationen und Systemkonfiguration für Admins |
typo3/cms-tstemplate | TypoScript-Modul |
typo3/cms-scheduler | geplante Aufgaben, vom Service scheduler angestoßen |
typo3/cms-seo, typo3/cms-redirects | Meta-Tags, hreflang, XML-Sitemap und Weiterleitungen |
typo3/cms-form, typo3/cms-felogin | Formulare und Frontend-Login |
causal/oidc | Anmeldung per OpenID Connect (Keycloak) |
local/oidc-backend | eigene Ergänzungen zur Keycloak-Anbindung |
local/site-package | Templates, Sprachumschalter, Suche und Inhalte der Website |
Nicht benötigte Systemextensions lassen sich hier streichen. Ein Rebuild entfernt sie dann.
Einstellungen (config, extra, Stabilität)
"config": {
"allow-plugins": {
"typo3/class-alias-loader": true,
"typo3/cms-composer-installers": true
},
"sort-packages": true
},
"extra": {
"typo3/cms": {
"web-dir": "public"
}
},
"minimum-stability": "stable",
"prefer-stable": trueallow-plugins: Composer führt Plugins nur aus, wenn sie ausdrücklich erlaubt sind.typo3/cms-composer-installerserzeugt den Webrootpublic/mitindex.phpund verlinkt die öffentlichen Dateien der Extensions nachpublic/_assets.typo3/class-alias-loaderstellt alte Klassennamen als Aliase bereit, damit ältere Extensions weiterlaufen.sort-packages:composer requirehält die Liste unterrequirealphabetisch sortiert.web-dir: der öffentliche Ordner, den nginx als Document Root ausliefert. Alles außerhalb, etwavendor/,config/undvar/, ist aus dem Web nicht erreichbar.minimum-stabilityundprefer-stable: nur stabile Versionen, keine Betas oder Entwicklungsstände. Ausnahmen wie@devfür die lokalen Pakete gelten nur dort, wo sie ausdrücklich stehen.
composer.lock und Updates
# verfügbare Updates anzeigen
docker compose run --rm --no-deps --entrypoint "" -v "$PWD:/app" -w /app php \
composer outdated "typo3/*"
# TYPO3 innerhalb von ^14.3 aktualisieren, nur composer.lock neu schreiben
docker compose run --rm --no-deps --entrypoint "" -v "$PWD:/app" -w /app php \
composer update "typo3/*" --with-all-dependencies --no-install
# Images mit den neuen Versionen bauen und starten
docker compose up -d --buildcomposer.json nennt erlaubte Versionsbereiche, composer.lock die exakt installierten Versionen samt Prüfsummen. Der Build installiert immer genau den Stand der Lock-Datei. Deshalb gehört sie ins Repository, und deshalb sehen alle Rechner und jede Wiederherstellung identische Versionen.
Ein Update ändert zuerst nur die Lock-Datei. --no-install verhindert, dass Composer im Projektordner ein lokales vendor/ anlegt, das im Image ohnehin keine Rolle spielt. Erst der Rebuild bringt die neuen Versionen in die Images. Beim Start passt der Entrypoint das Datenbankschema an.