Mediawiki installieren: Unterschied zwischen den Versionen
Rolf (Diskussion | Beiträge) Die Seite wurde neu angelegt: „= Projektname / Thema = Kurze, klare Beschreibung des Projekts oder Themas. Was ist das? Warum ist es wichtig? Wer nutzt es? __TOC__ == Überblick == Kurze Zusammenfassung der Inhalte dieser Seite. == Ziele == * Ziel 1 * Ziel 2 * Ziel 3 == Systemübersicht == ; Server/Host: : Beschreibung deiner Umgebung (z. B. Docker, Ubuntu, VM etc.) ; Dienste: : * MediaWiki : * MariaDB : * Caddy / Reverse Proxy : * Tika (Optional, für Volltextsuche / OCR) == Inst…“ |
Rolf (Diskussion | Beiträge) Add Categorie |
||
| (Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
= | = MediaWiki Installation & Einrichtung (bereinigtes Manual) | ||
== Kurzbeschreibung == | |||
Dies ist ein sauberes, schritt‑für‑Schritt‑Manual zur Installation und Einrichtung von **MediaWiki 1.43.5** in einer Docker‑Umgebung mit **MariaDB**, **Apache Tika** und **Caddy** als Reverse‑Proxy. Es enthält nur die funktionierenden, getesteten Schritte (Fehlschritte wurden weggelassen). | |||
== | == Voraussetzungen == | ||
* Server mit Docker & Docker Compose v2 installiert | |||
* | * Benutzer mit SSH‑Zugriff (z. B. »rolf«) | ||
* | * Domain und DNS (A‑Record) für `sub.meinedomain.de` verfügbar | ||
* | * Caddy wird als Docker‑Container im externen Docker‑Netzwerk **caddy** betrieben | ||
== | == Zielarchitektur == | ||
* mediawiki (MediaWiki 1.43.5) – Webapp | |||
* mediawiki_db (MariaDB 11) – Datenbank | |||
* | * mediawiki_tika (apache/tika:3.2.3.0-full) – Text‑/OCR‑Extraktion | ||
* | * caddy (separates Docker‑Stack) – Reverse Proxy + TLS | ||
* | |||
* | |||
=== | == Ordnerstruktur auf dem Host == <syntaxhighlight lang="bash"> | ||
~/mediawiki/ | |||
├── docker-compose.yml | |||
├── data/ | |||
│ ├── mediawiki/ # Webroot (named volume oder bind, siehe Compose) | |||
│ └── mariadb/ | |||
├── php/ | |||
│ └── uploads.ini # PHP-Konfig für Upload-Limits | |||
└── backups/ </syntaxhighlight> | |||
== 1. Vorbereitung auf dem Host == <syntaxhighlight lang="bash"> | |||
# Basis-Ordner | |||
mkdir -p ~/mediawiki/data/mediawiki | |||
mkdir -p ~/mediawiki/data/mariadb | |||
mkdir -p ~/mediawiki/php | |||
mkdir -p ~/mediawiki/backups | |||
chown -R $(id -u):$(id -g) ~/mediawiki </syntaxhighlight> | |||
== | == 2. PHP‑Limits konfigurieren == | ||
Erstelle die Datei `~/mediawiki/php/uploads.ini` mit folgenden Inhalten (Beispiel 128M): | |||
<syntaxhighlight lang="ini"> | |||
upload_max_filesize = 128M | |||
post_max_size = 128M | |||
memory_limit = 512M | |||
max_execution_time = 300 | |||
max_input_time = 300 | |||
</syntaxhighlight> | |||
== 3. docker‑compose.yml (empfohlen, tested) == | |||
Lege `~/mediawiki/docker-compose.yml` an – 1:1 übernehmen (ersetze Secrets/Passwörter vor Einsatz): | |||
<syntaxhighlight lang="yaml"> | |||
version: "3.9" | |||
networks: | |||
caddy: | |||
external: true | |||
services: | |||
db: | |||
image: mariadb:11 | |||
container_name: mediawiki_db | |||
environment: | |||
MYSQL_DATABASE: mediawiki | |||
MYSQL_USER: wikiuser | |||
MYSQL_PASSWORD: wikisecret | |||
MYSQL_ROOT_PASSWORD: rootsecret | |||
volumes: | |||
- ./data/mariadb:/var/lib/mysql | |||
restart: unless-stopped | |||
networks: | |||
- caddy | |||
tika: | |||
image: apache/tika:3.2.3.0-full | |||
container_name: mediawiki_tika | |||
ports: | |||
- "9998:9998" | |||
restart: unless-stopped | |||
networks: | |||
- caddy | |||
mediawiki: | |||
image: mediawiki:1.43.5 | |||
container_name: mediawiki | |||
restart: unless-stopped | |||
depends_on: | |||
- db | |||
- tika | |||
ports: | |||
- "8280:80" # Erstinstallation über Hostport, vermeidet Host-Apache-Konflikte | |||
environment: | |||
- MEDIAWIKI_DB_TYPE=mysql | |||
- MEDIAWIKI_DB_HOST=db | |||
- MEDIAWIKI_DB_NAME=mediawiki | |||
- MEDIAWIKI_DB_USER=wikiuser | |||
- MEDIAWIKI_DB_PASSWORD=wikisecret | |||
volumes: | |||
- mediawiki_web_data:/var/www/html | |||
- mediawiki_images:/var/www/html/images | |||
- ./php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro | |||
networks: | |||
- caddy | |||
volumes: | |||
mediawiki_web_data: | |||
mediawiki_db_data: | |||
mediawiki_images: </syntaxhighlight> | |||
== 4. Caddyfile (Reverse Proxy) == | |||
In deinem vorhandenen Caddy‑Stack (in demselben Netzwerk `caddy`) füge für die Subdomain ein Eintrag wie folgt hinzu: | |||
<syntaxhighlight lang="text"> | |||
sub.meinedomain.de { | |||
encode gzip zstd | |||
reverse_proxy mediawiki:80 | |||
header { | |||
Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" | |||
X-Content-Type-Options "nosniff" | |||
} | |||
} | |||
</syntaxhighlight> | |||
Caddy holt automatisch TLS (Let’s Encrypt) für die Domain, solange Port 80/443 vom Host erreichbar sind und DNS auf deine IP zeigt. | |||
== 5. Container starten == <syntaxhighlight lang="bash"> | |||
cd ~/mediawiki | |||
docker compose pull | |||
docker compose up -d | |||
docker compose ps | |||
# sollte mediawiki, mediawiki_db, mediawiki_tika anzeigen | |||
</syntaxhighlight> | |||
== 6. MediaWiki Web‑Installer == | |||
1. Öffne im Browser: `http://<SERVER-IP>:8280` | |||
2. Führe den interaktiven Installer durch: Datenbank‑Parameter → `db`, `mediawiki`, `wikiuser`, `wikisecret`. | |||
3. Admin‑Account anlegen. | |||
4. Lade die erzeugte Datei **LocalSettings.php** herunter. | |||
== 7. LocalSettings.php in den Container übernehmen == | |||
(Bei Named‑Volumes liegt der Webroot im Container. Kopiere die Datei ins Container‑Dateisystem.) | |||
<syntaxhighlight lang="bash"> | |||
# lokal: z.B. ~/Downloads/LocalSettings.php | |||
docker cp ~/Downloads/LocalSettings.php mediawiki:/var/www/html/LocalSettings.php | |||
# prüfen | |||
docker exec -it mediawiki ls -l /var/www/html/LocalSettings.php | |||
# restart | |||
docker restart mediawiki | |||
</syntaxhighlight> | |||
== 8. Uploads & Tika vorbereiten == | |||
In `LocalSettings.php` (falls nicht automatisch gesetzt) prüfen/ergänzen: | |||
<syntaxhighlight lang="php"> | |||
$wgEnableUploads = true; | |||
$wgFileExtensions = array_merge($wgFileExtensions, ['pdf','png','jpg','jpeg','gif','svg']); | |||
$wgMaxUploadSize = 134217728; // 128MB in Bytes | |||
// Tika (falls die Extension/Integration später genutzt wird) | |||
$wgTikaServer = "http://mediawiki_tika:9998"; | |||
$wgTikaTimeout = 15; </syntaxhighlight> | |||
> Prüfe, dass `images/` beschreibbar ist: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
docker exec -it mediawiki sh -c "chown -R www-data:www-data /var/www/html/images && chmod -R 755 /var/www/html/images" | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == 9. Tests == | ||
* Prüfe PHP upload limits: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
docker exec | docker exec -it mediawiki php -i | grep -E "upload_max_filesize|post_max_size" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
* PDF hochladen: Spezial:Hochladen → Datei auswählen → Seite erstellen | |||
* | * Prüfe, ob PDF im Wiki angezeigt wird und erreichbar ist. | ||
* | |||
== | == 10. Caddy TLS‑Check == | ||
Beobachte die Caddy‑Logs bis zur Bestätigung, dass ein Zertifikat bezogen wurde: | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
docker logs -f caddy | |||
# suche nach: success: certificate obtained for sub.meinedomain.de | |||
</syntaxhighlight> | </syntaxhighlight> | ||
== | == 11. Optional: Tika / Volltextsuche später aktivieren == | ||
=== | Wir haben Tika bereits als Container. Für echte Volltext‑Suche brauchst du zusätzlich: | ||
: | * Elasticsearch (für CirrusSearch) | ||
* die Extension CirrusSearch und ggf. TikaAllTheFiles (oder TikaAllTheFiles‑ähnliche Integrationen) | |||
Empfohlene Reihenfolge: | |||
1. Zuerst stabiler Wiki‑Betrieb & Uploads | |||
2. Dann Elasticsearch (als eigener Container) | |||
3. CirrusSearch konfigurieren und Reindex durchführen | |||
== 12. Backups (Kurz) == | |||
Empfohlener Minimalworkflow: tägliches DB‑Dump + tarball der Volumes. Ein mögliches Skript legt die Pakete under `~/mediawiki/backups` ab und wird per cron ausgeführt. | |||
== 13. Wichtige Prüfbefehle (Debug) == <syntaxhighlight lang="bash"> | |||
# Containerstatus | |||
docker compose ps | |||
# Logs | |||
docker compose logs -f mediawiki | |||
# Mounts | |||
docker inspect mediawiki | jq '.Mounts' | |||
# PHP Limits | |||
docker exec -it mediawiki php -i | grep -E "upload_max_filesize|post_max_size" | |||
# Tika check | |||
docker exec -it mediawiki sh -c "curl -sS http://mediawiki_tika:9998/tika | head -n 1" </syntaxhighlight> | |||
== 14. Hinweise & Best Practices == | |||
* Nutze named volumes statt bind mounts für den Webroot, um UID/GID‑Probleme zu vermeiden. | |||
* Hebe `uploads.ini` in `~/mediawiki/php` und mounte sie in `/usr/local/etc/php/conf.d/`. | |||
* LocalSettings.php per `docker cp` in den Container legen, nicht per scp direkt in Host‑Webroot. | |||
* Wenn der Host einen Apache/Nginx mit Port 80/443 betreibt, nutze einen anderen Hostport (z. B. 8280) für die Erstinstallation oder konfiguriere Port‑Forwarding/Rewrites im Router. | |||
== 15. Weiterführende Schritte == | |||
* Migration von BookStack‑Inhalten (Export → pandoc → MediaWiki‑Import) | |||
* Einrichtung von CirrusSearch + Elasticsearch für Volltextsuche | |||
* Einrichtung eines regelmäßigen, getesteten Backup‑ & Restore‑Prozesses | |||
--- | |||
'''Datum:''' {{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}} | |||
'''Autor:''' rolf | |||
: | |||
<!-- Ende des Manuals -->[[Kategorie:Homelab]] | |||
Aktuelle Version vom 19. Februar 2026, 08:10 Uhr
= MediaWiki Installation & Einrichtung (bereinigtes Manual)
Kurzbeschreibung[Bearbeiten | Quelltext bearbeiten]
Dies ist ein sauberes, schritt‑für‑Schritt‑Manual zur Installation und Einrichtung von **MediaWiki 1.43.5** in einer Docker‑Umgebung mit **MariaDB**, **Apache Tika** und **Caddy** als Reverse‑Proxy. Es enthält nur die funktionierenden, getesteten Schritte (Fehlschritte wurden weggelassen).
Voraussetzungen[Bearbeiten | Quelltext bearbeiten]
- Server mit Docker & Docker Compose v2 installiert
- Benutzer mit SSH‑Zugriff (z. B. »rolf«)
- Domain und DNS (A‑Record) für `sub.meinedomain.de` verfügbar
- Caddy wird als Docker‑Container im externen Docker‑Netzwerk **caddy** betrieben
Zielarchitektur[Bearbeiten | Quelltext bearbeiten]
- mediawiki (MediaWiki 1.43.5) – Webapp
- mediawiki_db (MariaDB 11) – Datenbank
- mediawiki_tika (apache/tika:3.2.3.0-full) – Text‑/OCR‑Extraktion
- caddy (separates Docker‑Stack) – Reverse Proxy + TLS
== Ordnerstruktur auf dem Host == <syntaxhighlight lang="bash"> ~/mediawiki/ ├── docker-compose.yml ├── data/ │ ├── mediawiki/ # Webroot (named volume oder bind, siehe Compose) │ └── mariadb/ ├── php/ │ └── uploads.ini # PHP-Konfig für Upload-Limits └── backups/ </syntaxhighlight>
== 1. Vorbereitung auf dem Host == <syntaxhighlight lang="bash">
- Basis-Ordner
mkdir -p ~/mediawiki/data/mediawiki mkdir -p ~/mediawiki/data/mariadb mkdir -p ~/mediawiki/php mkdir -p ~/mediawiki/backups chown -R $(id -u):$(id -g) ~/mediawiki </syntaxhighlight>
2. PHP‑Limits konfigurieren[Bearbeiten | Quelltext bearbeiten]
Erstelle die Datei `~/mediawiki/php/uploads.ini` mit folgenden Inhalten (Beispiel 128M):
<syntaxhighlight lang="ini"> upload_max_filesize = 128M post_max_size = 128M memory_limit = 512M max_execution_time = 300 max_input_time = 300 </syntaxhighlight>
3. docker‑compose.yml (empfohlen, tested)[Bearbeiten | Quelltext bearbeiten]
Lege `~/mediawiki/docker-compose.yml` an – 1:1 übernehmen (ersetze Secrets/Passwörter vor Einsatz):
<syntaxhighlight lang="yaml"> version: "3.9"
networks: caddy: external: true
services: db: image: mariadb:11 container_name: mediawiki_db environment: MYSQL_DATABASE: mediawiki MYSQL_USER: wikiuser MYSQL_PASSWORD: wikisecret MYSQL_ROOT_PASSWORD: rootsecret volumes: - ./data/mariadb:/var/lib/mysql restart: unless-stopped networks: - caddy
tika: image: apache/tika:3.2.3.0-full container_name: mediawiki_tika ports: - "9998:9998" restart: unless-stopped networks: - caddy
mediawiki: image: mediawiki:1.43.5 container_name: mediawiki restart: unless-stopped depends_on: - db - tika ports: - "8280:80" # Erstinstallation über Hostport, vermeidet Host-Apache-Konflikte environment: - MEDIAWIKI_DB_TYPE=mysql - MEDIAWIKI_DB_HOST=db - MEDIAWIKI_DB_NAME=mediawiki - MEDIAWIKI_DB_USER=wikiuser - MEDIAWIKI_DB_PASSWORD=wikisecret volumes: - mediawiki_web_data:/var/www/html - mediawiki_images:/var/www/html/images - ./php/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini:ro networks: - caddy
volumes: mediawiki_web_data: mediawiki_db_data: mediawiki_images: </syntaxhighlight>
4. Caddyfile (Reverse Proxy)[Bearbeiten | Quelltext bearbeiten]
In deinem vorhandenen Caddy‑Stack (in demselben Netzwerk `caddy`) füge für die Subdomain ein Eintrag wie folgt hinzu:
<syntaxhighlight lang="text"> sub.meinedomain.de {
encode gzip zstd
reverse_proxy mediawiki:80
header {
Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
X-Content-Type-Options "nosniff"
}
} </syntaxhighlight>
Caddy holt automatisch TLS (Let’s Encrypt) für die Domain, solange Port 80/443 vom Host erreichbar sind und DNS auf deine IP zeigt.
== 5. Container starten == <syntaxhighlight lang="bash"> cd ~/mediawiki docker compose pull docker compose up -d
docker compose ps
- sollte mediawiki, mediawiki_db, mediawiki_tika anzeigen
</syntaxhighlight>
6. MediaWiki Web‑Installer[Bearbeiten | Quelltext bearbeiten]
1. Öffne im Browser: `http://<SERVER-IP>:8280` 2. Führe den interaktiven Installer durch: Datenbank‑Parameter → `db`, `mediawiki`, `wikiuser`, `wikisecret`. 3. Admin‑Account anlegen. 4. Lade die erzeugte Datei **LocalSettings.php** herunter.
7. LocalSettings.php in den Container übernehmen[Bearbeiten | Quelltext bearbeiten]
(Bei Named‑Volumes liegt der Webroot im Container. Kopiere die Datei ins Container‑Dateisystem.)
<syntaxhighlight lang="bash">
- lokal: z.B. ~/Downloads/LocalSettings.php
docker cp ~/Downloads/LocalSettings.php mediawiki:/var/www/html/LocalSettings.php
- prüfen
docker exec -it mediawiki ls -l /var/www/html/LocalSettings.php
- restart
docker restart mediawiki </syntaxhighlight>
8. Uploads & Tika vorbereiten[Bearbeiten | Quelltext bearbeiten]
In `LocalSettings.php` (falls nicht automatisch gesetzt) prüfen/ergänzen:
<syntaxhighlight lang="php"> $wgEnableUploads = true; $wgFileExtensions = array_merge($wgFileExtensions, ['pdf','png','jpg','jpeg','gif','svg']); $wgMaxUploadSize = 134217728; // 128MB in Bytes
// Tika (falls die Extension/Integration später genutzt wird) $wgTikaServer = "http://mediawiki_tika:9998"; $wgTikaTimeout = 15; </syntaxhighlight>
> Prüfe, dass `images/` beschreibbar ist:
<syntaxhighlight lang="bash"> docker exec -it mediawiki sh -c "chown -R www-data:www-data /var/www/html/images && chmod -R 755 /var/www/html/images" </syntaxhighlight>
9. Tests[Bearbeiten | Quelltext bearbeiten]
- Prüfe PHP upload limits:
<syntaxhighlight lang="bash"> docker exec -it mediawiki php -i | grep -E "upload_max_filesize|post_max_size" </syntaxhighlight>
- PDF hochladen: Spezial:Hochladen → Datei auswählen → Seite erstellen
- Prüfe, ob PDF im Wiki angezeigt wird und erreichbar ist.
10. Caddy TLS‑Check[Bearbeiten | Quelltext bearbeiten]
Beobachte die Caddy‑Logs bis zur Bestätigung, dass ein Zertifikat bezogen wurde:
<syntaxhighlight lang="bash"> docker logs -f caddy
- suche nach: success: certificate obtained for sub.meinedomain.de
</syntaxhighlight>
11. Optional: Tika / Volltextsuche später aktivieren[Bearbeiten | Quelltext bearbeiten]
Wir haben Tika bereits als Container. Für echte Volltext‑Suche brauchst du zusätzlich:
- Elasticsearch (für CirrusSearch)
- die Extension CirrusSearch und ggf. TikaAllTheFiles (oder TikaAllTheFiles‑ähnliche Integrationen)
Empfohlene Reihenfolge:
1. Zuerst stabiler Wiki‑Betrieb & Uploads 2. Dann Elasticsearch (als eigener Container) 3. CirrusSearch konfigurieren und Reindex durchführen
12. Backups (Kurz)[Bearbeiten | Quelltext bearbeiten]
Empfohlener Minimalworkflow: tägliches DB‑Dump + tarball der Volumes. Ein mögliches Skript legt die Pakete under `~/mediawiki/backups` ab und wird per cron ausgeführt.
== 13. Wichtige Prüfbefehle (Debug) == <syntaxhighlight lang="bash">
- Containerstatus
docker compose ps
- Logs
docker compose logs -f mediawiki
- Mounts
docker inspect mediawiki | jq '.Mounts'
- PHP Limits
docker exec -it mediawiki php -i | grep -E "upload_max_filesize|post_max_size"
- Tika check
docker exec -it mediawiki sh -c "curl -sS http://mediawiki_tika:9998/tika | head -n 1" </syntaxhighlight>
14. Hinweise & Best Practices[Bearbeiten | Quelltext bearbeiten]
- Nutze named volumes statt bind mounts für den Webroot, um UID/GID‑Probleme zu vermeiden.
- Hebe `uploads.ini` in `~/mediawiki/php` und mounte sie in `/usr/local/etc/php/conf.d/`.
- LocalSettings.php per `docker cp` in den Container legen, nicht per scp direkt in Host‑Webroot.
- Wenn der Host einen Apache/Nginx mit Port 80/443 betreibt, nutze einen anderen Hostport (z. B. 8280) für die Erstinstallation oder konfiguriere Port‑Forwarding/Rewrites im Router.
15. Weiterführende Schritte[Bearbeiten | Quelltext bearbeiten]
- Migration von BookStack‑Inhalten (Export → pandoc → MediaWiki‑Import)
- Einrichtung von CirrusSearch + Elasticsearch für Volltextsuche
- Einrichtung eines regelmäßigen, getesteten Backup‑ & Restore‑Prozesses
---
Datum: 3.04.2026
Autor: rolf