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-ModusEinsatzgebiete
| 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)
- ComposerPHP-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-apcuComposer installieren
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composerInstallation
Mit Composer (empfohlen)
cd /var/www
composer create-project drupal/recommended-project drupal
# Berechtigungen
chown -R www-data:www-data drupal
chmod -R 755 drupalDatenbank 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ßenVertrauenswürdige Hosts
// web/sites/default/settings.php
$settings['trusted_host_patterns'] = [
'^example\.de$',
'^www\.example\.de$',
];Drush (CLI)
Installation
composer require drush/drushWichtige 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:loginModule installieren
Mit Composer
# Modul herunterladen
composer require drupal/admin_toolbar
# Modul aktivieren
./vendor/bin/drush en admin_toolbarEmpfohlene 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-CacheModul-Suche
composer search drupal/
# Oder auf drupal.org/project/modulesContent-Typen
Erstellen
Struktur → Inhaltstypen → Inhaltstyp hinzufügen
- Name: Artikel
- Beschreibung: Blog-Artikel
- Einstellungen konfigurierenFelder 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
- CustomTaxonomie
Vokabular erstellen
Struktur → Taxonomie → Vokabular hinzufügen
- Name: Kategorien
- Beschreibung: Artikel-KategorienBegriffe 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 termThemes
Theme installieren
composer require drupal/bootstrap5
./vendor/bin/drush en bootstrap5Theme aktivieren
Design → Bootstrap5 → Als Standard festlegenSub-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/blockKonfiguration
Format: Unformatted list / Table / Grid
Fields: Titel, Bild, Zusammenfassung
Filter: Published (yes), Type (Artikel)
Sort: Created date (desc)
Pager: 10 items per pageBenutzer und Rollen
Rolle erstellen
Personen → Rollen → Rolle hinzufügen
- Name: Redakteur
- Berechtigungen konfigurierenBerechtigungen
Personen → Berechtigungen
Wichtige Bereiche:
- Node: Create, Edit, Delete
- Media: Create, Edit, Delete
- Taxonomy: Administer
- Administration: AccessMehrsprachigkeit
Module aktivieren
./vendor/bin/drush en language content_translation config_translation interface_translationSprachen hinzufügen
Konfiguration → Regional und Sprache → Sprachen → Sprache hinzufügenÜbersetzung aktivieren
Konfiguration → Regional und Sprache → Inhaltssprache
Content-Typ → Einstellungen → Übersetzung aktivierenPerformance
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:rebuildCSS/JS aggregieren
Konfiguration → Entwicklung → Leistung
- CSS-Dateien aggregieren: Ja
- JavaScript-Dateien aggregieren: JaSicherheit
Updates prüfen
./vendor/bin/drush pm:securityDateiberechtigungen
# 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/filesSecurity-Modul
composer require drupal/seckit
./vendor/bin/drush en seckitKonfiguration → System → SecKit
- X-Frame-Options: SAMEORIGIN
- X-Content-Type-Options: nosniff
- CSP konfigurierenBackup
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/filesBackup-Modul
composer require drupal/backup_migrate
./vendor/bin/drush en backup_migrateUpdates
Drupal Core
# Prüfen
composer outdated drupal/core
# Update
composer update drupal/core-* --with-dependencies
./vendor/bin/drush updatedb
./vendor/bin/drush cache:rebuildModule
composer update drupal/module_name
./vendor/bin/drush updatedb
./vendor/bin/drush cache:rebuildTroubleshooting
Weißer Bildschirm
// settings.php
$config['system.logging']['error_level'] = 'verbose';Datenbank-Probleme
./vendor/bin/drush updatedb --forceBerechtigungen
chown -R www-data:www-data /var/www/drupalCache-Probleme
./vendor/bin/drush cache:rebuild
# Oder
rm -rf web/sites/default/files/phpZusammenfassung
| 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.