Handbuch

Schnellstart und Aufbau

Appliance starten, Projektaufbau, persistente Daten und das Installieren von Extensions.

Schnellstart

cp .env.example .env      # Passwörter anpassen!
docker compose up -d --build

*.localhost zeigt in allen gängigen Browsern automatisch auf 127.0.0.1. Falls ein Tool den Namen nicht auflöst, 127.0.0.1 typo3-v14.localhost in /etc/hosts eintragen.

Der Admin ist System-Maintainer und hat damit auch Zugriff auf die Admin-Tools (Install Tool).

Projektaufbau

├── Dockerfile                  Stage app (PHP-FPM + TYPO3), Stage web (nginx)
├── docker-compose.yml          web, php, db, elasticsearch, scheduler
├── docker-compose.override.yml lokale Anpassung: id.dev.sonia.de → Docker-Host
├── composer.json               TYPO3-Pakete – hier Extensions ergänzen
├── BACKUP.sh / RESTORE.sh      Backup als .tar.gz / Wiederherstellung
├── CREATE_SHELL_ARCHIVE_BACKUP.sh  Backup als selbstentpackendes .sh
├── packages/
│   ├── oidc_backend/           Keycloak-Rollen → Backend-Gruppen/Admin, Benutzername
│   └── site_package/           Frontend: Templates, Sprachumschalter, Suche, Inhalte
└── config/
    ├── certs/                  zusätzliche CA-Zertifikate (*.crt), z. B. Ostfalia RZ Root CA
    ├── nginx/default.conf      TYPO3-Server-Block (DocumentRoot public/, Sperren, Caching)
    ├── php/typo3.ini           PHP-/OPcache-Einstellungen
    ├── php/fpm-pool.conf       FPM-Pool (clear_env = no, Ping-Endpunkt)
    ├── mariadb/typo3.cnf       utf8mb4 + InnoDB-Tuning
    └── typo3/
        ├── entrypoint.sh       DB-Wartezeit, Erstinstallation, extension:setup
        ├── healthcheck.sh      Healthcheck des php-Containers
        └── additional.php      Konfiguration aus Umgebungsvariablen

Der Ordner config/ enthält die Konfigurationsdateien des Projekts. Er ist nicht mit dem gleichnamigen TYPO3-Ordner im Container zu verwechseln.

Persistente Daten (Docker-Volumes)

VolumeInhalt
db-dataDatenbank
typo3-configconfig/system/settings.php, config/sites/
typo3-fileadminUploads (public/fileadmin), von nginx nur lesend eingebunden
typo3-temppublic/typo3temp (generierte Assets), von nginx nur lesend eingebunden
typo3-varLogs, Caches, Sessions, Sprachpakete
es-dataSuchindex; wird aus der Datenbank neu aufgebaut und ist deshalb nicht im Backup

Der Code (vendor/, public/_assets) steckt in beiden Images (php und nginx). Updates und neue Extensions kommen deshalb immer per Rebuild in die Container.

Extensions installieren und TYPO3 aktualisieren

# Extension hinzufügen (lokales PHP+Composer oder im Container)
docker compose run --rm --no-deps --entrypoint "" -v "$PWD:/app" -w /app php \
    composer require georgringer/news --no-install

docker compose up -d --build

Beim Start laufen automatisch typo3 extension:setup (Datenbankschema) und cache:flush. Die composer.lock gehört ins Repository, damit jeder Build dieselben Paketversionen erhält.

Eigene Extensions und Sitepackages kommen nach packages/<name>/ und werden mit composer require vendor/name:@dev eingebunden.