Joomla ist ein leistungsfähiges Open-Source Content Management System. Es eignet sich für Unternehmenswebseiten, Portale und komplexe Webanwendungen.

Joomla-Übersicht

Features

- Mehrsprachigkeit integriert
- Benutzer- und Rechteverwaltung
- Erweiterbare Architektur
- SEO-Funktionen
- Template-System
- Medienverwaltung
- Kontaktformulare
- Kategorisierung

Joomla vs WordPress

| Aspekt | Joomla | WordPress | |--------|--------|-----------| | Komplexität | Mittel-Hoch | Niedrig | | Mehrsprachig | Integriert | Plugin | | Benutzerrollen | Umfangreich | Begrenzt | | Lernkurve | Steiler | Flacher | | Community | Groß | Sehr groß |

Voraussetzungen

Systemanforderungen

- PHP 8.1+ (8.2 empfohlen)
- MySQL 8.0+ oder MariaDB 10.4+
- Apache/Nginx
- 256 MB RAM (512 MB empfohlen)
- 100 MB Speicherplatz

PHP-Erweiterungen

apt install php8.2-fpm php8.2-mysql php8.2-xml php8.2-mbstring php8.2-zip php8.2-gd php8.2-curl php8.2-intl php8.2-json

Installation

Datenbank erstellen

CREATE DATABASE joomla CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'joomla'@'localhost' IDENTIFIED BY 'sicheres_passwort';
GRANT ALL ON joomla.* TO 'joomla'@'localhost';
FLUSH PRIVILEGES;

Joomla herunterladen

cd /var/www
wget https://downloads.joomla.org/cms/joomla5/5-0-3/Joomla_5-0-3-Stable-Full_Package.zip
mkdir joomla
unzip Joomla_5-0-3-Stable-Full_Package.zip -d joomla
chown -R www-data:www-data joomla
chmod -R 755 joomla

Nginx-Konfiguration

# /etc/nginx/sites-available/joomla

server {
    listen 80;
    server_name example.de www.example.de;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.de www.example.de;

    ssl_certificate /etc/letsencrypt/live/example.de/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.de/privkey.pem;

    root /var/www/joomla;
    index index.php index.html;

    # Logging
    access_log /var/log/nginx/joomla.access.log;
    error_log /var/log/nginx/joomla.error.log;

    # Security Headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    # PHP
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # Sicherheit - Zugriff blockieren
    location ~* /(\.git|cache|bin|logs|backup|tests)/.*$ { deny all; }
    location ~* \.(htaccess|htpasswd|ini|log|sh|sql)$ { deny all; }

    # Statische Dateien cachen
    location ~* \.(jpg|jpeg|png|gif|ico|css|js|woff|woff2)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}
ln -s /etc/nginx/sites-available/joomla /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginx

Apache-Konfiguration

<VirtualHost *:443>
    ServerName example.de
    DocumentRoot /var/www/joomla

    SSLEngine on
    SSLCertificateFile /etc/letsencrypt/live/example.de/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/example.de/privkey.pem

    <Directory /var/www/joomla>
        Options -Indexes +FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    <FilesMatch \.php$>
        SetHandler "proxy:unix:/run/php/php8.2-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

Web-Installation

1. https://example.de aufrufen
2. Sprache wählen: Deutsch
3. Site-Name und Admin-Daten eingeben
4. Datenbank-Verbindung konfigurieren:
   - Typ: MySQLi
   - Host: localhost
   - Benutzer: joomla
   - Passwort: sicheres_passwort
   - Datenbank: joomla
   - Präfix: jos_ (oder zufällig)
5. Beispieldaten (optional)
6. Installation abschließen

Installation-Ordner entfernen

rm -rf /var/www/joomla/installation

Konfiguration

configuration.php

<?php
class JConfig {
    public $offline = false;
    public $offline_message = 'Diese Website wird gewartet.';
    public $display_offline_message = 1;
    public $sitename = 'Meine Website';
    public $editor = 'tinymce';
    public $captcha = '0';
    public $list_limit = 20;
    public $access = 1;

    // Datenbank
    public $dbtype = 'mysqli';
    public $host = 'localhost';
    public $user = 'joomla';
    public $password = 'sicheres_passwort';
    public $db = 'joomla';
    public $dbprefix = 'jos_';
    public $dbencryption = 0;

    // Pfade
    public $log_path = '/var/www/joomla/administrator/logs';
    public $tmp_path = '/var/www/joomla/tmp';

    // Server
    public $live_site = '';
    public $secret = 'xxxxxxxxxxxxxxxx';
    public $gzip = false;
    public $error_reporting = 'default';
    public $helpurl = 'https://help.joomla.org/';
    public $ftp_host = '';
    public $ftp_port = '';
    public $ftp_user = '';
    public $ftp_pass = '';
    public $ftp_root = '';
    public $ftp_enable = 0;

    // Session
    public $lifetime = 15;
    public $session_handler = 'database';
    public $shared_session = false;

    // Cache
    public $caching = 0;
    public $cache_handler = 'file';
    public $cachetime = 15;
    public $cache_platformprefix = false;

    // Mail
    public $mailer = 'smtp';
    public $mailfrom = 'noreply@example.de';
    public $fromname = 'Meine Website';
    public $smtpauth = 1;
    public $smtpuser = 'user@example.de';
    public $smtppass = 'mail_passwort';
    public $smtphost = 'smtp.example.de';
    public $smtpsecure = 'tls';
    public $smtpport = 587;
}

Administrator-Bereich

Zugriff

https://example.de/administrator

Wichtige Bereiche

| Menü | Funktion | |------|----------| | System | Dashboard, Konfiguration | | Benutzer | Benutzerverwaltung | | Menüs | Navigation erstellen | | Inhalt | Beiträge, Kategorien | | Komponenten | Erweiterungen | | Erweiterungen | Installation |

Erweiterungen

Arten von Erweiterungen

| Typ | Beschreibung | |-----|--------------| | Komponenten | Komplexe Funktionen | | Module | Widgets, Blöcke | | Plugins | Funktionserweiterungen | | Templates | Design | | Sprachen | Übersetzungen |

Installation

Erweiterungen → Installieren → Hochladen & Installieren

Empfohlene Erweiterungen

- Akeeba Backup (Backup)
- JCE Editor (WYSIWYG)
- Admin Tools (Sicherheit)
- sh404SEF (SEO)
- Yootheme Pro (Template)

Templates

Standard-Templates

- Cassiopeia (Frontend, Joomla 4/5)
- Atum (Administrator)

Template anpassen

System → Site Templates → Cassiopeia → Customize

Template-Overrides

/templates/cassiopeia/html/
├── com_content/
│   └── article/
│       └── default.php
├── mod_menu/
│   └── default.php
└── layouts/
    └── joomla/
        └── content/
            └── info_block.php

SEO-Konfiguration

Globale Einstellungen

System → Konfiguration → Site

- Suchmaschinenfreundliche URLs: Ja
- URL-Rewriting nutzen: Ja
- Suffix an URL anfügen: Nein
- Unicode-Aliasse: Nein

.htaccess aktivieren

cp /var/www/joomla/htaccess.txt /var/www/joomla/.htaccess

Metadaten

System → Konfiguration → Site → Metadaten

- Site Meta-Beschreibung: Beschreibung der Website
- Robots: Index, Follow

Mehrsprachigkeit

Sprachen installieren

System → Sprachen installieren → Deutsch auswählen

Sprachfilter aktivieren

System → Plugins → System - Sprachfilter → Aktivieren

Menü pro Sprache

Menüs → Menüs verwalten → Neues Menü
- Menü für DE
- Menü für EN

Sicherheit

Administrator-Pfad ändern

// plugins/system/admintools/admintools.php
// Oder mit Admin Tools Pro

Zwei-Faktor-Authentifizierung

Benutzer → Benutzer verwalten → Admin-Benutzer bearbeiten
→ Zweistufige Authentifizierung aktivieren

.htaccess-Schutz

# Administrator-Bereich schützen
<FilesMatch "administrator">
    AuthType Basic
    AuthName "Restricted"
    AuthUserFile /etc/apache2/.htpasswd-joomla
    Require valid-user
</FilesMatch>

Berechtigungen

# Verzeichnisse
find /var/www/joomla -type d -exec chmod 755 {} \;

# Dateien
find /var/www/joomla -type f -exec chmod 644 {} \;

# configuration.php
chmod 444 /var/www/joomla/configuration.php

Updates

Über Admin

System → Joomla aktualisieren → Updates installieren

Per CLI

cd /var/www/joomla
php cli/joomla.php core:update

Erweiterungen aktualisieren

System → Aktualisieren → Erweiterungen

Backup

Akeeba Backup

1. Erweiterung installieren
2. Komponenten → Akeeba Backup
3. Backup jetzt erstellen

Manuelles Backup

#!/bin/bash
# /usr/local/bin/joomla-backup.sh

DATE=$(date +%Y-%m-%d)
BACKUP_DIR=/backup/joomla

mkdir -p $BACKUP_DIR

# Datenbank
mysqldump -u joomla -p joomla > $BACKUP_DIR/db-$DATE.sql

# Dateien
tar -czf $BACKUP_DIR/files-$DATE.tar.gz /var/www/joomla

# Alte Backups löschen
find $BACKUP_DIR -name "*.sql" -mtime +30 -delete
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete

Performance

Caching aktivieren

System → Konfiguration → System → Cache

- Cache: Konservativer Cache
- Cache-Handler: Dateisystem
- Cache-Zeit: 15 Minuten

Gzip-Kompression

System → Konfiguration → Server → Gzip: Ja

CSS/JS optimieren

Mit JCH Optimize Plugin:
- CSS kombinieren
- JavaScript kombinieren
- Lazy Loading für Bilder

Troubleshooting

Weißer Bildschirm

// configuration.php
public $error_reporting = 'maximum';
public $debug = 1;

Cache leeren

System → Cache leeren → Alle

Datenbank reparieren

Erweiterungen → Verwalten → Datenbank → Reparieren

Berechtigungsprobleme

chown -R www-data:www-data /var/www/joomla
chmod -R 755 /var/www/joomla
chmod 444 /var/www/joomla/configuration.php

Zusammenfassung

| Verzeichnis | Inhalt | |-------------|--------| | /administrator | Backend | | /components | Komponenten | | /modules | Module | | /plugins | Plugins | | /templates | Templates | | /media | Medien | | /images | Bilder |

| Datei | Funktion | |-------|----------| | configuration.php | Hauptkonfiguration | | .htaccess | URL-Rewriting | | index.php | Einstiegspunkt |

| Befehl (CLI) | Funktion | |--------------|----------| | core:update | Joomla aktualisieren | | extension:install | Erweiterung installieren | | cache:clear | Cache leeren | | config:get | Konfiguration anzeigen |

Fazit

Joomla ist ein mächtiges CMS für anspruchsvolle Projekte. Die integrierte Mehrsprachigkeit und das umfangreiche Rechtesystem machen es ideal für Unternehmenswebsites. Die Lernkurve ist steiler als bei WordPress, aber die Flexibilität ist größer. Mit den richtigen Erweiterungen lassen sich komplexe Webanwendungen realisieren. Regelmäßige Updates und Backups sind für die Sicherheit essentiell.