# 📝 Kapitel 16 – Wiki (Self-Hosted mit Wiki.js) --- 🎯 Ziel Wir bauen ein eigenes **Wiki** mit **Wiki.js**. Am Ende ist das Wiki über eine eigene Domain erreichbar, per HTTPS abgesichert und mit einem Admin-Account eingerichtet. --- 📖 Warum Wiki.js? - ❌ Lose Textdateien sind schnell unübersichtlich - ❌ Externe Tools bedeuten Abhängigkeit von Dritten - ✅ Wiki.js ist modern, unterstützt Markdown, hat Rollen- und Rechteverwaltung - ✅ Läuft vollständig im eigenen Homelab und ist auch offline erreichbar --- ✅ Voraussetzungen - LXC-Container mit Debian 12 (Bookworm) - Empfohlen: 1 vCPU, 1–2 GB RAM, ≥ 10 GB Speicher - Domain/Subdomain (z. B. `wiki.deinedomain.tld`) - Nginx Proxy Manager + DynDNS - Internetzugang für den Container --- ## 1️⃣ Container vorbereiten ```bash apt update && apt upgrade -y apt install -y ca-certificates curl gnupg lsb-release mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \ $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null apt update apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` 👉 Wir bringen das System auf den neuesten Stand, fügen das offizielle Docker-Repository hinzu und installieren Docker inklusive Compose. ```bash mkdir -p /srv/wiki cd /srv/wiki ``` 👉 Wir legen das Projektverzeichnis `/srv/wiki` an und wechseln hinein. Dort liegen später alle Dateien für das Wiki. --- ## 2️⃣ Projektdateien erstellen ### `.env` ```bash nano .env ``` 👉 Mit `nano` öffnen wir eine neue Datei namens `.env`. Kopiere den folgenden Inhalt hinein: ```env TZ=Europe/Berlin POSTGRES_DB=wikidb POSTGRES_USER=wikijs POSTGRES_PASSWORD= WIKI_DB_HOST=postgres WIKI_DB_PORT=5432 WIKI_DB_USER=${POSTGRES_USER} WIKI_DB_PASS=${POSTGRES_PASSWORD} WIKI_DB_NAME=${POSTGRES_DB} WIKI_PORT=3000 ``` 👉 Ersetze `` durch ein sicheres Passwort. Speichern: **STRG+O**, Enter. Beenden: **STRG+X**. --- ### `docker-compose.yaml` ```bash nano docker-compose.yaml ``` 👉 Wir erstellen die Hauptdatei für die Container. Trage den folgenden Inhalt ein: ```yaml version: "3.9" services: postgres: image: postgres:15 container_name: wiki-postgres restart: unless-stopped env_file: .env volumes: - ./data/postgres:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 10 wikijs: image: requarks/wiki:2 container_name: wikijs depends_on: postgres: condition: service_healthy restart: unless-stopped env_file: .env environment: DB_TYPE: postgres DB_HOST: ${WIKI_DB_HOST} DB_PORT: ${WIKI_DB_PORT} DB_USER: ${WIKI_DB_USER} DB_PASS: ${WIKI_DB_PASS} DB_NAME: ${WIKI_DB_NAME} TZ: ${TZ} ports: - "3000:${WIKI_PORT}" volumes: - ./data/wikijs:/var/wiki ``` 👉 Zwei Container: **Postgres** für die Datenbank und **Wiki.js** für das Webinterface. Die Daten werden im Ordner `data` gespeichert. Speichern und schließen wie oben. --- ## 3️⃣ Container starten und prüfen ```bash docker compose up -d ``` 👉 Startet beide Container im Hintergrund. ```bash docker compose ps ``` 👉 Listet die Container auf. Beide müssen `Up` anzeigen, Postgres nach kurzer Zeit `healthy`. --- ## 4️⃣ Proxy Host in Nginx Proxy Manager 1. Im Browser Nginx Proxy Manager öffnen 2. Neuer Proxy Host - Domain: `wiki.deinedomain.tld` - Forward Hostname/IP: `` - Forward Port: `3000` - Websockets aktivieren 3. SSL → Neues Zertifikat anfordern, „Force SSL“, „HTTP/2“ und „HSTS“ aktivieren 4. Speichern 👉 Ab jetzt ist das Wiki über `https://wiki.deinedomain.tld` erreichbar. --- ## 5️⃣ Erstkonfiguration im Browser Aufrufen: ``` https://wiki.deinedomain.tld ``` - Admin-Benutzer erstellen (Name, Passwort, E-Mail) - Sprache: Deutsch - Zeitzone: Europe/Berlin - Registrierung: „Nur Einladung“ oder „Admin Approval“ - Erste Startseite anlegen 👉 Dein Wiki ist betriebsbereit. --- ⚠️ Fehlerbehebung ```bash docker logs -f wikijs docker logs -f wiki-postgres ``` 👉 Mit diesen Befehlen siehst du die Logdateien. - 502-Error → Container läuft nicht oder Websockets in NPM vergessen - Setup hängt → Werte in `.env` prüfen - IPv6-Probleme → AAAA-Record entfernen - Uploads fehlen → Schreibrechte im `data`-Ordner prüfen --- ✅ Ergebnis - Wiki.js läuft in Docker (Debian 12 LXC) - Zugriff über `https://wiki.deinedomain.tld` - Admin-Benutzer erstellt und Registrierung gesichert - Daten persistent gespeichert ➡️ Nächstes Kapitel: **Netdata (Monitoring)**