TYPO3 ist ein leistungsfähiges Open-Source Enterprise CMS mit starker Verbreitung im deutschsprachigen Raum. Es eignet sich besonders für große, mehrsprachige Webauftritte.
TYPO3-Übersicht
Features
- Multisite- und Mehrsprachigkeit
- Granulare Rechteverwaltung
- Workspaces (Staging)
- Versionierung
- Scheduler/Cron-System
- Extension-Ökosystem
- TypoScript-Konfiguration
- Fluid TemplatingEinsatzgebiete
| Bereich | Beispiele | |---------|-----------| | Konzerne | DAX-Unternehmen | | Mittelstand | B2B-Websites | | Öffentlich | Behörden, Unis | | Verbände | Organisationen | | Medien | Redaktionssysteme |
Voraussetzungen
Systemanforderungen
- PHP 8.1+ (8.2 empfohlen)
- MySQL 8.0+ / MariaDB 10.3+
- Apache/Nginx
- 256 MB RAM (512+ empfohlen)
- Composer
- ImageMagick/GraphicsMagickPHP-Erweiterungen
apt install php8.2-fpm php8.2-mysql php8.2-xml php8.2-gd php8.2-curl php8.2-mbstring php8.2-zip php8.2-intl php8.2-opcache php8.2-apcu imagemagickInstallation
Mit Composer
cd /var/www
composer create-project typo3/cms-base-distribution typo3
cd typo3
composer require typo3/cms-introductionVerzeichnisstruktur
typo3/
├── config/
│ └── sites/
├── packages/
├── public/
│ ├── fileadmin/
│ ├── typo3/
│ └── index.php
├── var/
│ ├── cache/
│ ├── log/
│ └── session/
├── vendor/
└── composer.jsonDatenbank erstellen
CREATE DATABASE typo3 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'typo3'@'localhost' IDENTIFIED BY 'sicheres_passwort';
GRANT ALL ON typo3.* TO 'typo3'@'localhost';
FLUSH PRIVILEGES;Nginx-Konfiguration
# /etc/nginx/sites-available/typo3
server {
listen 80;
server_name example.de;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name example.de;
ssl_certificate /etc/letsencrypt/live/example.de/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.de/privkey.pem;
root /var/www/typo3/public;
index index.php index.html;
# TYPO3 Frontend
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
# TYPO3 Backend
location /typo3 {
try_files $uri /typo3/index.php$is_args$args;
}
# PHP
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param TYPO3_CONTEXT Development;
}
# Sicherheit
location ~ /\. {
deny all;
}
location ~ ^/(typo3conf|typo3temp|uploads|fileadmin)/.*\.(php|php3|php5|php7|php8|phtml)$ {
deny all;
}
# Statische Dateien
location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2)$ {
expires max;
log_not_found off;
}
}Berechtigungen
chown -R www-data:www-data /var/www/typo3
chmod -R 755 /var/www/typo3
# Schreibbare Verzeichnisse
chmod -R 775 /var/www/typo3/public/fileadmin
chmod -R 775 /var/www/typo3/varWeb-Installation
1. https://example.de aufrufen
2. Install Tool startet automatisch
3. System-Check durchführen
4. Datenbank konfigurieren:
- Host: localhost
- User: typo3
- Password: sicheres_passwort
- Database: typo3
5. Admin-Benutzer erstellen
6. Installation abschließenTYPO3 Console
Installation
composer require typo3/cms-cliWichtige Befehle
cd /var/www/typo3
# Cache leeren
./vendor/bin/typo3 cache:flush
# Datenbank aktualisieren
./vendor/bin/typo3 database:updateschema
# Scheduler ausführen
./vendor/bin/typo3 scheduler:run
# Extension aktivieren
./vendor/bin/typo3 extension:activate extension_key
# Benutzer erstellen
./vendor/bin/typo3 backend:createadmin admin passwort
# Setup
./vendor/bin/typo3 setupBackend-Übersicht
Zugriff
https://example.de/typo3Module
| Modul | Funktion | |-------|----------| | Web | Seiten, Listen, Info | | File | Dateimanager | | Admin Tools | Wartung, Logs | | System | Benutzer, Scheduler |
Seitenbaum
Root (ID 1)
├── Home
├── Über uns
│ ├── Team
│ └── Geschichte
├── Leistungen
├── Kontakt
└── ImpressumExtensions
Installation mit Composer
# Extension hinzufügen
composer require georgringer/news
# Extension aktivieren
./vendor/bin/typo3 extension:activate newsWichtige Extensions
# Content
news # News-System
powermail # Formulare
tt_address # Adressverwaltung
indexed_search # Suche
# Entwicklung
mask # Content-Elemente
container # Container-Elemente
vhs # ViewHelper-Sammlung
# SEO
yoast_seo # SEO-Analyse
schema # Schema.org
# Sicherheit
be_secure_pw # Passwort-RichtlinienExtension Repository (TER)
https://extensions.typo3.org/TypoScript
Grundlagen
# Seiten-Setup
page = PAGE
page {
typeNum = 0
# HTML-Template
10 = FLUIDTEMPLATE
10 {
templateName = Default
templateRootPaths.10 = EXT:my_sitepackage/Resources/Private/Templates/
partialRootPaths.10 = EXT:my_sitepackage/Resources/Private/Partials/
layoutRootPaths.10 = EXT:my_sitepackage/Resources/Private/Layouts/
}
# Meta-Tags
meta {
viewport = width=device-width, initial-scale=1
}
# CSS/JS einbinden
includeCSS {
bootstrap = EXT:my_sitepackage/Resources/Public/Css/bootstrap.min.css
main = EXT:my_sitepackage/Resources/Public/Css/main.css
}
includeJSFooter {
bootstrap = EXT:my_sitepackage/Resources/Public/Js/bootstrap.bundle.min.js
}
}Menü erstellen
lib.mainMenu = HMENU
lib.mainMenu {
1 = TMENU
1 {
wrap = <ul class="nav navbar-nav">|</ul>
NO {
wrapItemAndSub = <li class="nav-item">|</li>
ATagParams = class="nav-link"
}
CUR < .NO
CUR {
wrapItemAndSub = <li class="nav-item active">|</li>
}
}
}Fluid Templates
Layout
<!-- Resources/Private/Layouts/Default.html -->
<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers"
data-namespace-typo3-fluid="true">
<f:render section="main" />
</html>Template
<!-- Resources/Private/Templates/Default.html -->
<f:layout name="Default" />
<f:section name="main">
<div class="container">
<header>
<nav>
<f:cObject typoscriptObjectPath="lib.mainMenu" />
</nav>
</header>
<main>
<f:format.raw>{content}</f:format.raw>
</main>
<footer>
<f:cObject typoscriptObjectPath="lib.footer" />
</footer>
</div>
</f:section>ViewHelper
<!-- Link zu Seite -->
<f:link.page pageUid="5">Kontakt</f:link.page>
<!-- Bild -->
<f:image src="{file.uid}" alt="{file.alternative}" width="800" />
<!-- Bedingung -->
<f:if condition="{variable}">
<f:then>Wahr</f:then>
<f:else>Falsch</f:else>
</f:if>
<!-- Schleife -->
<f:for each="{items}" as="item">
<p>{item.title}</p>
</f:for>Site Configuration
config/sites/main/config.yaml
rootPageId: 1
base: 'https://example.de/'
languages:
-
languageId: 0
title: Deutsch
navigationTitle: DE
base: /
locale: de_DE.UTF-8
flag: de
-
languageId: 1
title: English
navigationTitle: EN
base: /en/
locale: en_GB.UTF-8
flag: gb
fallbackType: fallback
fallbacks: '0'
errorHandling:
-
errorCode: 404
errorHandler: Page
errorContentSource: 't3://page?uid=10'
-
errorCode: 500
errorHandler: Fluid
errorFluidTemplate: 'EXT:my_sitepackage/Resources/Private/Templates/Error/500.html'
routes: []Benutzer und Rechte
Backend-Benutzergruppen
System → Backend-Benutzergruppen
Rechte konfigurieren:
- Zugriff auf Module
- Erlaubte Seitenbereiche
- Erlaubte Sprachen
- Datei-Mounts
- DB-MountsFrontend-Benutzer
fe_users / fe_groups für geschützte Bereiche
TypoScript:
config.typolinkLinkAccessRestrictedPages = 1Scheduler
Aufgaben verwalten
System → Scheduler
- Zeitpläne definieren
- Aufgaben aktivieren/deaktivieren
- Manuell ausführenCron einrichten
# /etc/cron.d/typo3
*/5 * * * * www-data cd /var/www/typo3 && ./vendor/bin/typo3 scheduler:runCaching
Cache-Typen
| Cache | Beschreibung | |-------|--------------| | pages | Seiten-Cache | | pagesection | TypoScript-Cache | | hash | Hash-Cache | | rootline | Rootline-Cache | | extbase | Extbase-Cache |
Cache leeren
./vendor/bin/typo3 cache:flush
# Einzelne Caches
./vendor/bin/typo3 cache:flush --group pagesRedis-Cache
// config/system/settings.php
$GLOBALS['TYPO3_CONF_VARS']['SYS']['caching']['cacheConfigurations']['pages'] = [
'backend' => \TYPO3\CMS\Core\Cache\Backend\RedisBackend::class,
'options' => [
'database' => 0,
'hostname' => '127.0.0.1',
'port' => 6379,
],
];Sicherheit
TYPO3 Context
# Nginx
fastcgi_param TYPO3_CONTEXT Production;
# Apache
SetEnv TYPO3_CONTEXT ProductionInstall Tool sichern
// config/system/settings.php
$GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword'] = '$argon2i$...';Admin-Panel deaktivieren
# Production
config.admPanel = 0
config.debug = 0Updates
Core-Update
composer update typo3/cms-*
./vendor/bin/typo3 database:updateschema
./vendor/bin/typo3 cache:flushExtension-Update
composer update vendor/extension
./vendor/bin/typo3 database:updateschema
./vendor/bin/typo3 cache:flushBackup
Datenbank
mysqldump -u typo3 -p typo3 > backup-$(date +%Y-%m-%d).sqlDateien
tar -czf backup-files-$(date +%Y-%m-%d).tar.gz \
public/fileadmin \
config \
packagesZusammenfassung
| Befehl (CLI) | Funktion | |--------------|----------| | cache:flush | Cache leeren | | database:updateschema | DB-Update | | extension:activate | Extension aktivieren | | scheduler:run | Scheduler ausführen |
| Verzeichnis | Inhalt | |-------------|--------| | public/ | Webroot | | config/ | Konfiguration | | var/ | Cache, Logs | | packages/ | Eigene Extensions |
| Datei | Funktion | |-------|----------| | config/system/settings.php | System-Konfiguration | | config/sites/*/config.yaml | Site-Konfiguration | | composer.json | Dependencies |
Fazit
TYPO3 ist die erste Wahl für komplexe Enterprise-Projekte im deutschsprachigen Raum. Die Kombination aus TypoScript und Fluid ermöglicht flexible Templates. Das Extension-System bietet Erweiterungen für jeden Bedarf. Für mehrsprachige, multisite-fähige Projekte mit komplexen Workflows ist TYPO3 ideal. Die Lernkurve ist steil, aber die Investition lohnt sich für langlebige Projekte.