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 Templating

Einsatzgebiete

| 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/GraphicsMagick

PHP-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 imagemagick

Installation

Mit Composer

cd /var/www
composer create-project typo3/cms-base-distribution typo3

cd typo3
composer require typo3/cms-introduction

Verzeichnisstruktur

typo3/
├── config/
│   └── sites/
├── packages/
├── public/
│   ├── fileadmin/
│   ├── typo3/
│   └── index.php
├── var/
│   ├── cache/
│   ├── log/
│   └── session/
├── vendor/
└── composer.json

Datenbank 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/var

Web-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ßen

TYPO3 Console

Installation

composer require typo3/cms-cli

Wichtige 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 setup

Backend-Übersicht

Zugriff

https://example.de/typo3

Module

| 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
└── Impressum

Extensions

Installation mit Composer

# Extension hinzufügen
composer require georgringer/news

# Extension aktivieren
./vendor/bin/typo3 extension:activate news

Wichtige 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-Richtlinien

Extension 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-Mounts

Frontend-Benutzer

fe_users / fe_groups für geschützte Bereiche

TypoScript:
config.typolinkLinkAccessRestrictedPages = 1

Scheduler

Aufgaben verwalten

System → Scheduler

- Zeitpläne definieren
- Aufgaben aktivieren/deaktivieren
- Manuell ausführen

Cron einrichten

# /etc/cron.d/typo3

*/5 * * * * www-data cd /var/www/typo3 && ./vendor/bin/typo3 scheduler:run

Caching

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 pages

Redis-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 Production

Install Tool sichern

// config/system/settings.php

$GLOBALS['TYPO3_CONF_VARS']['BE']['installToolPassword'] = '$argon2i$...';

Admin-Panel deaktivieren

# Production
config.admPanel = 0
config.debug = 0

Updates

Core-Update

composer update typo3/cms-*
./vendor/bin/typo3 database:updateschema
./vendor/bin/typo3 cache:flush

Extension-Update

composer update vendor/extension
./vendor/bin/typo3 database:updateschema
./vendor/bin/typo3 cache:flush

Backup

Datenbank

mysqldump -u typo3 -p typo3 > backup-$(date +%Y-%m-%d).sql

Dateien

tar -czf backup-files-$(date +%Y-%m-%d).tar.gz \
    public/fileadmin \
    config \
    packages

Zusammenfassung

| 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.