Zum Inhalt springen

Mediawiki installieren: Unterschied zwischen den Versionen

Aus RolfWiki
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…“
 
Add Categorie
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 1: Zeile 1:
= Projektname / Thema =
= MediaWiki Installation & Einrichtung (bereinigtes Manual)
Kurze, klare Beschreibung des Projekts oder Themas.
Was ist das? Warum ist es wichtig? Wer nutzt es?


__TOC__
== 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).


== Überblick ==
== Voraussetzungen ==
Kurze Zusammenfassung der Inhalte dieser Seite.


== Ziele ==
* Server mit Docker & Docker Compose v2 installiert
* Ziel 1
* Benutzer mit SSH‑Zugriff (z. B. »rolf«)
* Ziel 2
* Domain und DNS (A‑Record) für `sub.meinedomain.de` verfügbar
* Ziel 3
* Caddy wird als Docker‑Container im externen Docker‑Netzwerk **caddy** betrieben


== Systemübersicht ==
== Zielarchitektur ==
; Server/Host:
: Beschreibung deiner Umgebung (z. B. Docker, Ubuntu, VM etc.)
; Dienste:
: * MediaWiki
: * MariaDB
: * Caddy / Reverse Proxy
: * Tika (Optional, für Volltextsuche / OCR)


== Installation ==
* mediawiki (MediaWiki 1.43.5) – Webapp
=== Voraussetzungen ===
* mediawiki_db (MariaDB 11) – Datenbank
* Betriebssystem / Server
* mediawiki_tika (apache/tika:3.2.3.0-full) – Text‑/OCR‑Extraktion
* Docker & Docker Compose
* caddy (separates Docker‑Stack) – Reverse Proxy + TLS
* Domain + DNS
* Ports / Firewall (80, 443, …)


=== Schritte ===
== Ordnerstruktur auf dem Host == <syntaxhighlight lang="bash">
1. Projektverzeichnis erstellen:
~/mediawiki/
  <syntaxhighlight lang="bash">
├── docker-compose.yml
  mkdir ~/mediawiki
├── data/
  </syntaxhighlight>
│  ├── mediawiki/      # Webroot (named volume oder bind, siehe Compose)
│  └── mariadb/
├── php/
│  └── uploads.ini      # PHP-Konfig für Upload-Limits
└── backups/ </syntaxhighlight>


2. docker-compose.yml erstellen 
== 1. Vorbereitung auf dem Host == <syntaxhighlight lang="bash">
  (Beispiel siehe unten oder im Repo)


3. Container starten:
# Basis-Ordner
  <syntaxhighlight lang="bash">
  docker compose up -d
  </syntaxhighlight>


4. Setup im Browser durchführen 
mkdir -p ~/mediawiki/data/mediawiki
  http://SERVER-IP:8280
mkdir -p ~/mediawiki/data/mariadb
mkdir -p ~/mediawiki/php
mkdir -p ~/mediawiki/backups
chown -R $(id -u):$(id -g) ~/mediawiki </syntaxhighlight>


== Konfiguration ==
== 2. PHP‑Limits konfigurieren ==
=== LocalSettings.php ===
Erstelle die Datei `~/mediawiki/php/uploads.ini` mit folgenden Inhalten (Beispiel 128M):
Pfad: 
<code>/var/www/html/LocalSettings.php</code>


Hier die wichtigsten Werte:
<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


* Datenbankzugang
// Tika (falls die Extension/Integration später genutzt wird)
* $wgServer
$wgTikaServer = "http://mediawiki_tika:9998";
* $wgScriptPath
$wgTikaTimeout = 15; </syntaxhighlight>
* $wgLogos
 
* $wgSitename
> Prüfe, dass `images/` beschreibbar ist:
* Uploads und Dateirechte


=== Dateirechte ===
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
sudo chown -R www-data:www-data mediawiki/data/mediawiki
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>


== Backup ==
== 9. Tests ==
=== Datenbank ===
 
* Prüfe PHP upload limits:
 
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
docker exec mediawiki_db mysqldump -u wiki -p wiki > wiki.sql
docker exec -it mediawiki php -i | grep -E "upload_max_filesize|post_max_size"
</syntaxhighlight>
</syntaxhighlight>


=== Dateien ===
* PDF hochladen: Spezial:Hochladen → Datei auswählen → Seite erstellen
* images/
* Prüfe, ob PDF im Wiki angezeigt wird und erreichbar ist.
* LocalSettings.php


== Erweiterungen ==
== 10. Caddy TLS‑Check ==
=== Empfohlene Extensions ===
Beobachte die Caddy‑Logs bis zur Bestätigung, dass ein Zertifikat bezogen wurde:
* VisualEditor
* CodeEditor
* Tika / CirrusSearch
* SyntaxHighlight_GeSHi
* Echo (Benachrichtigungen)
* UserMerge (Benutzerverwaltung)


Installation:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
cd /var/www/html/extensions
docker logs -f caddy
git clone https://gerrit.wikimedia.org/r/mediawiki/extensions/VisualEditor
# suche nach: success: certificate obtained for sub.meinedomain.de
</syntaxhighlight>
</syntaxhighlight>


== Troubleshooting ==
== 11. Optional: Tika / Volltextsuche später aktivieren ==
=== Häufige Fehler ===
Wir haben Tika bereits als Container. Für echte Volltext‑Suche brauchst du zusätzlich:
; 403 Forbidden
 
: Rechte falsch gesetzt oder DocumentRoot leer.
* 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
 
---


; LocalSettings.php not found
'''Datum:''' {{CURRENTDAY}}.{{CURRENTMONTH}}.{{CURRENTYEAR}}
: Datei liegt nicht im Container – Volume prüfen.


; Apache ServerName-Fehler
'''Autor:''' rolf
: Harmlos. Kann ignoriert oder in /etc/apache2 gesetzt werden.


== Weiterführende Seiten ==
<!-- Ende des Manuals -->[[Kategorie:Homelab]]
* [[Server Maintenance]]
* [[Backup-Plan]]
* [[Erweiterungen]]
* [[Administrator-Notizen]]

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

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

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

  1. lokal: z.B. ~/Downloads/LocalSettings.php

docker cp ~/Downloads/LocalSettings.php mediawiki:/var/www/html/LocalSettings.php

  1. prüfen

docker exec -it mediawiki ls -l /var/www/html/LocalSettings.php

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

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

  1. Containerstatus

docker compose ps

  1. Logs

docker compose logs -f mediawiki

  1. Mounts

docker inspect mediawiki | jq '.Mounts'

  1. PHP Limits

docker exec -it mediawiki php -i | grep -E "upload_max_filesize|post_max_size"

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