Drupal ist ein leistungsfähiges Open-Source CMS für komplexe Webprojekte. Es wird von Regierungen, Universitäten und großen Unternehmen eingesetzt.
Drupal-Stärken
Features
- Flexibles Content-Modell
- Taxonomie-System
- Multisite-fähig
- REST API integriert
- Granulare Berechtigungen
- Revisionssystem
- Workflows
- Headless-Modus
Einsatzgebiete
| Anwendung | Beispiele |
|---|
| Regierung | whitehouse.gov (früher) |
| Bildung | Universitäts-Portale |
| Medien | News-Websites |
| Enterprise | Unternehmens-Intranets |
| E-Commerce | Mit Commerce-Modul |
Voraussetzungen
Systemanforderungen
- PHP 8.1+ (8.2 empfohlen)
- MySQL 8.0+ / MariaDB 10.3.7+ / PostgreSQL 12+
- Apache/Nginx
- 512 MB RAM (2 GB empfohlen)
- Composer
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-opcache php8.2-apcu
Composer installieren
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
Installation
Mit Composer (empfohlen)
cd /var/www
composer create-project drupal/recommended-project drupal
# Berechtigungen
chown -R www-data:www-data drupal
chmod -R 755 drupal
Datenbank erstellen
CREATE DATABASE drupal CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'drupal'@'localhost' IDENTIFIED BY 'sicheres_passwort';
GRANT ALL ON drupal.* TO 'drupal'@'localhost';
FLUSH PRIVILEGES;
Nginx-Konfiguration
# /etc/nginx/sites-available/drupal
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/drupal/web;
index index.php;
# Logs
access_log /var/log/nginx/drupal.access.log;
error_log /var/log/nginx/drupal.error.log;
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# Sicherheit
location ~ \..*/.*\.php$ {
return 403;
}
location ~ ^/sites/.*/private/ {
return 403;
}
location ~ ^/sites/[^/]+/files/.*\.php$ {
deny all;
}
# Clean URLs
location / {
try_files $uri /index.php?$query_string;
}
# PHP
location ~ '\.php$|^/update.php' {
fastcgi_split_path_info ^(.+?\.php)(|/.*)$;
include fastcgi_params;
fastcgi_param HTTP_PROXY "";
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param QUERY_STRING $query_string;
fastcgi_intercept_errors on;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
# Statische Dateien
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
try_files $uri @rewrite;
expires max;
log_not_found off;
}
location @rewrite {
rewrite ^/(.*)$ /index.php?q=$1;
}
}
Web-Installation
1. https://example.de aufrufen
2. Sprache wählen: Deutsch
3. Installationsprofil: Standard
4. Datenbank konfigurieren:
- Typ: MySQL
- Name: drupal
- Benutzer: drupal
- Passwort: sicheres_passwort
- Host: localhost
5. Website konfigurieren:
- Site-Name
- E-Mail
- Admin-Account
6. Installation abschließen
Vertrauenswürdige Hosts
// web/sites/default/settings.php
$settings['trusted_host_patterns'] = [
'^example\.de$',
'^www\.example\.de$',
];
Drush (CLI)
Installation
composer require drush/drush
Wichtige Befehle
cd /var/www/drupal
# Cache leeren
./vendor/bin/drush cache:rebuild
# Status
./vendor/bin/drush status
# Updates
./vendor/bin/drush updatedb
# Modul aktivieren
./vendor/bin/drush en module_name
# Modul deaktivieren
./vendor/bin/drush pm:uninstall module_name
# Benutzer erstellen
./vendor/bin/drush user:create admin --mail="admin@example.de" --password="passwort"
# Admin-Rolle zuweisen
./vendor/bin/drush user:role:add administrator admin
# Login-Link generieren
./vendor/bin/drush user:login
Module installieren
Mit Composer
# Modul herunterladen
composer require drupal/admin_toolbar
# Modul aktivieren
./vendor/bin/drush en admin_toolbar
Empfohlene Module
# Administration
admin_toolbar # Bessere Admin-Navigation
coffee # Quick-Search (Alt+D)
module_filter # Modul-Übersicht
# Content
pathauto # Automatische URL-Aliase
metatag # SEO Meta-Tags
redirect # URL-Redirects
token # Token-System
ckeditor5 # WYSIWYG-Editor
# Medien
media # Medienverwaltung (Core)
media_library # Medienbibliothek
# Sicherheit
seckit # Security Headers
captcha # Spam-Schutz
honeypot # Anti-Spam
# Performance
big_pipe # Progressive Page Rendering
dynamic_page_cache # Seiten-Cache
Modul-Suche
composer search drupal/
# Oder auf drupal.org/project/modules
Content-Typen
Erstellen
Struktur → Inhaltstypen → Inhaltstyp hinzufügen
- Name: Artikel
- Beschreibung: Blog-Artikel
- Einstellungen konfigurieren
Felder hinzufügen
Struktur → Inhaltstypen → Artikel → Felder verwalten
Feldtypen:
- Text (plain/formatted)
- Number (integer/decimal)
- Boolean
- Date
- Entity Reference
- Media
- Link
- List (select/checkboxes)
Display-Modi
Struktur → Inhaltstypen → Artikel → Anzeige verwalten
Modi:
- Default
- Teaser
- Full
- Custom
Taxonomie
Vokabular erstellen
Struktur → Taxonomie → Vokabular hinzufügen
- Name: Kategorien
- Beschreibung: Artikel-Kategorien
Begriffe hinzufügen
Struktur → Taxonomie → Kategorien → Begriff hinzufügen
Hierarchie möglich (Parent-Child)
Mit Content-Typ verknüpfen
Struktur → Inhaltstypen → Artikel → Felder verwalten
→ Feld hinzufügen → Reference → Taxonomy term
Themes
Theme installieren
composer require drupal/bootstrap5
./vendor/bin/drush en bootstrap5
Theme aktivieren
Design → Bootstrap5 → Als Standard festlegen
Sub-Theme erstellen
# Theme-Verzeichnis
mkdir -p web/themes/custom/mytheme
# mytheme.info.yml
name: My Theme
type: theme
description: Custom theme
core_version_requirement: ^10
base theme: bootstrap5
# mytheme.libraries.yml
global-styling:
css:
theme:
css/style.css: {}
Views
View erstellen
Struktur → Views → View hinzufügen
- Name: Artikel-Liste
- Show: Content of type Artikel
- Create a page/block
Konfiguration
Format: Unformatted list / Table / Grid
Fields: Titel, Bild, Zusammenfassung
Filter: Published (yes), Type (Artikel)
Sort: Created date (desc)
Pager: 10 items per page
Benutzer und Rollen
Rolle erstellen
Personen → Rollen → Rolle hinzufügen
- Name: Redakteur
- Berechtigungen konfigurieren
Berechtigungen
Personen → Berechtigungen
Wichtige Bereiche:
- Node: Create, Edit, Delete
- Media: Create, Edit, Delete
- Taxonomy: Administer
- Administration: Access
Mehrsprachigkeit
Module aktivieren
./vendor/bin/drush en language content_translation config_translation interface_translation
Sprachen hinzufügen
Konfiguration → Regional und Sprache → Sprachen → Sprache hinzufügen
Übersetzung aktivieren
Konfiguration → Regional und Sprache → Inhaltssprache
Content-Typ → Einstellungen → Übersetzung aktivieren
Caching
// settings.php
// Page Cache
$settings['cache']['bins']['render'] = 'cache.backend.database';
$settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.database';
// Redis (optional)
$settings['redis.connection']['interface'] = 'PhpRedis';
$settings['redis.connection']['host'] = '127.0.0.1';
$settings['cache']['default'] = 'cache.backend.redis';
Cache leeren
./vendor/bin/drush cache:rebuild
CSS/JS aggregieren
Konfiguration → Entwicklung → Leistung
- CSS-Dateien aggregieren: Ja
- JavaScript-Dateien aggregieren: Ja
Sicherheit
Updates prüfen
./vendor/bin/drush pm:security
Dateiberechtigungen
# Verzeichnisse
find /var/www/drupal -type d -exec chmod 755 {} \;
# Dateien
find /var/www/drupal -type f -exec chmod 644 {} \;
# Settings
chmod 444 web/sites/default/settings.php
# Files-Verzeichnis
chmod 755 web/sites/default/files
Security-Modul
composer require drupal/seckit
./vendor/bin/drush en seckit
Konfiguration → System → SecKit
- X-Frame-Options: SAMEORIGIN
- X-Content-Type-Options: nosniff
- CSP konfigurieren
Backup
Mit Drush
# Datenbank
./vendor/bin/drush sql:dump --result-file=/backup/drupal-$(date +%Y-%m-%d).sql
# Dateien
tar -czf /backup/drupal-files-$(date +%Y-%m-%d).tar.gz web/sites/default/files
Backup-Modul
composer require drupal/backup_migrate
./vendor/bin/drush en backup_migrate
Updates
Drupal Core
# Prüfen
composer outdated drupal/core
# Update
composer update drupal/core-* --with-dependencies
./vendor/bin/drush updatedb
./vendor/bin/drush cache:rebuild
Module
composer update drupal/module_name
./vendor/bin/drush updatedb
./vendor/bin/drush cache:rebuild
Troubleshooting
Weißer Bildschirm
// settings.php
$config['system.logging']['error_level'] = 'verbose';
Datenbank-Probleme
./vendor/bin/drush updatedb --force
Berechtigungen
chown -R www-data:www-data /var/www/drupal
Cache-Probleme
./vendor/bin/drush cache:rebuild
# Oder
rm -rf web/sites/default/files/php
Zusammenfassung
| Befehl (Drush) | Funktion |
|---|
| cache:rebuild | Cache leeren |
| updatedb | DB-Updates |
| en module | Modul aktivieren |
| pm:uninstall | Modul deaktivieren |
| sql:dump | DB-Backup |
| user:login | Login-Link |
| Verzeichnis | Inhalt |
|---|
| web/core | Drupal Core |
| web/modules | Module |
| web/themes | Themes |
| web/sites/default/files | Uploads |
| vendor | Composer-Pakete |
| Datei | Funktion |
|---|
| settings.php | Konfiguration |
| services.yml | Service-Definition |
| composer.json | Dependencies |
Fazit
Drupal ist die richtige Wahl für komplexe, inhaltsreiche Webprojekte. Das flexible Content-Modell ermöglicht maßgeschneiderte Datenstrukturen. Die Views-Funktion erlaubt beliebige Datenausgaben ohne Programmierung. Mit Composer und Drush wird die Verwaltung zum Kinderspiel. Für Enterprise-Anforderungen mit komplexen Workflows und Mehrsprachigkeit ist Drupal konkurrenzlos.