Commit 7aa3e9
2026-05-28 15:40:46 Claude Code: 2026-05-28: Wiki-Aktualisierung - neue CTs, Versionen, Dienste| container-und-vms.md .. | |
| @@ 3,7 3,7 @@ | |
| > [!TIP] | |
| > Diese Seite ist als schnelle Betriebsuebersicht gedacht. Mit der Datentabelle kannst du nach Status, Rolle oder Namen suchen. | |
| - | ## Aktiver Stand laut Proxmox |
| + | ## Aktiver Stand laut Proxmox (2026-05-28) |
| | Typ | ID | Name | Status | IP / Zugriff | | |
| |---|---:|---|---|---| | |
| @@ 30,7 30,11 @@ | |
| | CT | 124 | homarr | laeuft | `192.168.178.94` / `ls-cloud.biz` | | |
| | CT | 125 | norish | laeuft | `192.168.178.96` / `norish.ls-cloud.biz` | | |
| | CT | 126 | tdarr | laeuft | `192.168.178.73` / `transcode.ls-cloud.biz` / [[ct-126-tdarr]] | | |
| + | | CT | 127 | security-monitoring | laeuft | intern / Grafana 13.0.1 + Loki + Promtail / [[ct-127-monitoring]] | |
| | CT | 128 | bot | laeuft | `192.168.178.97` / `bot.ls-cloud.biz` / [[ct-128-bot]] | | |
| + | | CT | 129 | burningnotes | laeuft | `192.168.178.98` / `note.ls-cloud.biz` | |
| + | | CT | 130 | lstools | laeuft | `192.168.178.99` / `sh0rt.biz` + `priv.sh0rt.biz` | |
| + | | VM | 200 | Windows11Pro | laeuft | `192.168.178.71` / RDP in Termix | |
| {{DataTable}} | |
| @@ 40,6 44,7 @@ | |
| - **CT 120 `dashboard`** abgeloest durch **CT 124 `homarr`** hinter `ls-cloud.biz`. | |
| - **CT 119 `azeroth`** ist gestoppt; Caddy-Eintrag `panel.ls-cloud.biz` existiert noch. | |
| - **CT 114 `games`** und **CT 107 `monitoring`** sind bewusst gestoppt. | |
| + | - **CT 110** war frueher Pi-hole/DNS, jetzt Termix. DNS laeuft auf **CT 117**. |
| > [!WARNING] | |
| - | > Bewusst gestoppt heisst hier **nicht** automatisch defekt. In deinem Setup ist das haeufig schlicht Ressourcenhygiene. Relevant ist nur, ob eine oeffentliche Domain trotz absichtlich gestopptem Backend weiter aktiv bleiben soll. |
| + | > Bewusst gestoppt heisst hier **nicht** automatisch defekt. Relevant ist nur, ob eine oeffentliche Domain trotz absichtlich gestopptem Backend weiter aktiv bleiben soll. |
| ct-100-guacamole.md .. /dev/null | |
| @@ 1,23 0,0 @@ | |
| - | # CT 100 – Guacamole |
| - | |
| - | > [!NOTE] |
| - | > CT 100 ist der Guacamole-/Remote-Access-Kontext hinter `live.ls-cloud.biz`. |
| - | |
| - | ## Basisdaten |
| - | |
| - | - **CT-ID:** `100` |
| - | - **Name:** `guacamole` |
| - | - **Öffentliche URL:** `https://live.ls-cloud.biz` |
| - | |
| - | ## Einordnung |
| - | |
| - | - aktuell oft nur situativ relevant |
| - | - wenn CT 100 gestoppt ist, erklärt das öffentliche Fehlerbilder meist direkt |
| - | |
| - | ## Prüfung |
| - | |
| - | ```bash |
| - | pct status 100 |
| - | curl -I http://192.168.178.54:8080 |
| - | curl -k -I https://live.ls-cloud.biz |
| - | ``` |
| ct-105-downloads.md .. | |
| @@ 1,33 1,94 @@ | |
| # CT 105 – Downloads | |
| > [!NOTE] | |
| - | > CT 105 bündelt Download-Dienste wie qBittorrent, SABnzbd und Prowlarr. |
| + | > CT 105 bündelt den gesamten Download-Stack: Indexer, Download-Clients und Medien-Manager. |
| ## Basisdaten | |
| - **CT-ID:** `105` | |
| - **Name:** `downloads` | |
| - **IP:** `192.168.178.63` | |
| + | - **Modus:** Privileged CT (UID-Mapping 1:1) |
| ## Öffentliche Domains | |
| - | - `https://qbit.ls-cloud.biz` |
| - | - `https://usenet.ls-cloud.biz` |
| - | - `https://dl.ls-cloud.biz` |
| + | | Domain | Dienst | |
| + | |---|---| |
| + | | `https://requests.ls-cloud.biz` | Jellyseerr (Anfragen-Portal) | |
| + | | `https://qbit.ls-cloud.biz` | qBittorrent | |
| + | | `https://usenet.ls-cloud.biz` | SABnzbd | |
| + | | `https://dl.ls-cloud.biz` | Prowlarr | |
| - | ## Relevante Ports |
| + | ## Dienste & Ports |
| + | |
| + | | Port | Dienst | Typ | Beschreibung | |
| + | |---|---|---|---| |
| + | | `9696` | Prowlarr | systemd | Indexer-Manager (Torrent + NZB) | |
| + | | `8989` | Sonarr v4 | systemd | Serien-Manager | |
| + | | `7878` | Radarr v6 | systemd | Film-Manager | |
| + | | `5055` | Jellyseerr 2.7.3 | Docker bridge | Anfragen-Portal | |
| + | | `8081` | qBittorrent | Docker | Torrent-Client | |
| + | | `8082` | SABnzbd | Docker | Usenet-Client | |
| + | |
| + | **Docker Compose:** `/opt/downloads-stack/docker-compose.yml` |
| + | |
| + | ## API-Keys |
| + | |
| + | ``` |
| + | Sonarr: 081d0986ed1546dabb77740529ed5c3c |
| + | Radarr: 08b59f420f21404c9891e63cc31ee894 |
| + | ``` |
| + | |
| + | ## Verzeichnisse |
| ```text | |
| - | 8081 qBittorrent |
| - | 8082 SABnzbd |
| - | 9696 Prowlarr |
| + | /srv/storage/downloads/torrents qBittorrent Downloads |
| + | /srv/storage/downloads/usenet SABnzbd Downloads |
| + | /srv/storage/media/movies/demovies Radarr – Deutsche Filme (default) |
| + | /srv/storage/media/movies/rumovies Radarr – Russische Filme |
| + | /srv/storage/media/series/deseries Sonarr – Deutsche Serien (default) |
| + | /srv/storage/media/series/ruseries Sonarr – Russische Serien |
| + | ``` |
| + | |
| + | ## Sprachfilter |
| + | |
| + | Custom Format „German or Russian" (DE=4, RU=11), minFormatScore=100, Qualitätsprofil Language=Any. |
| + | Jellyseerr leitet je nach Sprache an die richtigen Root Folders weiter: |
| + | |
| + | | Jellyseerr Instanz | Root Folder | |
| + | |---|---| |
| + | | Radarr (DE) – default | `/srv/storage/media/movies/demovies` | |
| + | | Radarr (RU) | `/srv/storage/media/movies/rumovies` | |
| + | | Sonarr (DE) – default | `/srv/storage/media/series/deseries` | |
| + | | Sonarr (RU) | `/srv/storage/media/series/ruseries` | |
| + | |
| + | ## Indexer (Prowlarr) |
| + | |
| + | - Russische Indexer (konfiguriert) |
| + | - **scenenzbs.com** – Deutsche NZB-Inhalte, API-Key: `1bf8298481c242efad08d54c3b854014` |
| + | |
| + | ## Jellyseerr-Admin |
| + | |
| + | ``` |
| + | URL: https://requests.ls-cloud.biz |
| + | Login: admin@ls-cloud.biz / Admin123! |
| + | ``` |
| + | |
| + | ## Remote Path Mapping (Sonarr/Radarr) |
| + | |
| + | Sonarr und Radarr greifen auf qBittorrent über den Docker-Bridge-Gateway zu: |
| + | |
| + | ``` |
| + | Host: 172.17.0.1 (Docker gateway aus dem Bridge-Netz) |
| + | Downloads: /downloads/ → /srv/storage/downloads/torrents/ |
| ``` | |
| ## Prüfung | |
| ```bash | |
| pct status 105 | |
| - | curl -I http://192.168.178.63:8081 |
| - | curl -I http://192.168.178.63:8082 |
| curl -I http://192.168.178.63:9696 | |
| + | curl -I http://192.168.178.63:8989 |
| + | curl -I http://192.168.178.63:7878 |
| + | curl -I http://192.168.178.63:5055 |
| ``` | |
| /dev/null .. ct-110-termix.md | |
| @@ 0,0 1,77 @@ | |
| + | # CT 110 – Termix |
| + | |
| + | > [!NOTE] |
| + | > CT 110 ist der aktuelle Web-Zugang fuer Remote-Arbeit im lscloud-Setup. Der Zugriff erfolgt ueber `https://termix.ls-cloud.biz` und ist via **Authelia** vorgeschaltet. |
| + | |
| + | ## Kurzfassung |
| + | |
| + | Termix ist hier nicht nur ein Web-Terminal fuer SSH, sondern der aktuelle zentrale Einstieg fuer: |
| + | - **SSH / Shell-Zugaenge** |
| + | - **RDP-Verbindungen** (Windows 11 VM 200) |
| + | - **VNC-Verbindungen** |
| + | - browserbasierte Remote-Arbeit ueber eine einzige Weboberflaeche |
| + | |
| + | ## Basisdaten |
| + | |
| + | | Eigenschaft | Wert | |
| + | |---|---| |
| + | | **CT-ID** | `110` | |
| + | | **Name** | `termix` | |
| + | | **IP** | `192.168.178.95` | |
| + | | **Oeffentliche URL** | `https://termix.ls-cloud.biz` | |
| + | | **Lokaler Web-Port** | `8080/tcp` | |
| + | | **Zugriffsschutz** | Authelia `two_factor` | |
| + | | **Docker-Compose** | `/opt/termix/docker-compose.yml` | |
| + | |
| + | ## Technischer Aufbau |
| + | |
| + | - Container: `termix` (ghcr.io/lukegus/termix:release-2.2.1) |
| + | - Container: `guacd` (guacamole/guacd) — RDP/VNC Backend, Port 4822 |
| + | - `network_mode: host` — notwendig fuer Wake-on-LAN-Broadcast ins LAN |
| + | - `extra_hosts: guacd:127.0.0.1` |
| + | - Daten: Docker Volume `termix-data` → `/app/data` (verschluesseltes SQLite) |
| + | |
| + | ## Aktuelle Version: 2.2.1 (gepinnt) |
| + | |
| + | > [!WARNING] |
| + | > Termix laeuft bewusst auf Version **2.2.1** statt der aktuellen 2.3.0. |
| + | > |
| + | > **Grund:** In 2.3.0 fehlt der Wake-on-LAN-Button im Web-UI (Regression). |
| + | > Der Button wurde nur im Electron-Desktop-Client implementiert, nicht in der Web-Sidebar. |
| + | > |
| + | > - GitHub Issue gemeldet: 2026-05-28 |
| + | > - Update auf 2.3.x: erst nach Bugfix |
| + | |
| + | ## Wake-on-LAN |
| + | |
| + | - Workstation-MAC: `F4:93:9F:F8:22:74` |
| + | - WoL-Button erscheint im Host-Dropdown wenn SSH-Protokoll am Host aktiviert ist |
| + | - Funktioniert wegen `network_mode: host` (UDP-Broadcast 255.255.255.255:9) |
| + | - API-Endpunkt intern: `POST /db/host/:id/wake` |
| + | |
| + | ## Registrierte Verbindungen |
| + | |
| + | | Ziel | Typ | Host | User | |
| + | |---|---|---|---| |
| + | | Windows 11 VM | RDP | 192.168.178.71:3389 | Administrator | |
| + | |
| + | ## Zugriffspfad |
| + | |
| + | ``` |
| + | Browser -> https://termix.ls-cloud.biz -> Caddy -> Authelia -> CT 110 :8080 -> Termix |
| + | ``` |
| + | |
| + | ## Pruefung |
| + | |
| + | ```bash |
| + | pct status 110 |
| + | pct exec 110 -- bash -c 'cd /opt/termix && docker compose ps' |
| + | curl -kI https://termix.ls-cloud.biz/ |
| + | ``` |
| + | |
| + | ## Historischer Hinweis |
| + | |
| + | > [!IMPORTANT] |
| + | > CT 110 war frueher der **Pi-hole DNS-Container** (dns, 192.168.178.78). |
| + | > Pi-hole wurde durch **Technitium DNS auf CT 117** abgeloest. |
| + | > CT 110 wurde dann komplett neu als Termix aufgesetzt. |
| ct-111-webserver.md .. | |
| @@ 15,6 15,10 @@ | |
| > [!WARNING] | |
| > Wenn CT 111 gestoppt ist, liefert `web.ls-cloud.biz` über Caddy typischerweise direkt `502`. | |
| + | ## Webspace |
| + | |
| + | Inhalte liegen nicht primär „im Containergefühl“, sondern operativ über den Host-/Bind-Mount-Pfad. Änderungen an Webinhalten gehören deshalb an den Webspace und nicht blind in irgendein Container-Verzeichnis. |
| + | |
| ## Prüfung | |
| ```bash | |
| /dev/null .. ct-113-authelia.md | |
| @@ 0,0 1,219 @@ | |
| + | # CT 113 – Authelia |
| + | |
| + | > [!NOTE] |
| + | > CT 113 hostet **Authelia** als zentrale vorgeschaltete Authentifizierungs- und 2FA-Schicht für ausgewählte Webdienste hinter Caddy. |
| + | |
| + | ## Basisdaten |
| + | |
| + | | Eigenschaft | Wert | |
| + | |---|---| |
| + | | **CT-ID** | `113` | |
| + | | **Name** | `authelia` | |
| + | | **IP** | `192.168.178.64` | |
| + | | **OS** | Debian 13 | |
| + | | **Öffentliche URL** | `https://auth.ls-cloud.biz` | |
| + | | **Interner Port** | `9091/tcp` | |
| + | | **Compose-Pfad** | `/opt/authelia/compose.yml` | |
| + | | **Konfig-Pfad** | `/opt/authelia/config/configuration.yml` | |
| + | | **User-Datei** | `/opt/authelia/config/users_database.yml` | |
| + | | **Notification-Datei** | `/opt/authelia/config/notification.txt` | |
| + | |
| + | ## Zweck |
| + | |
| + | Authelia sitzt vor ausgewählten Webdiensten und erzwingt dort je nach Regel: |
| + | - kein Login (`bypass`) |
| + | - Passwort-Login (`one_factor`) |
| + | - Passwort + zweiter Faktor (`two_factor`) |
| + | |
| + | Aktuell ist Authelia bereits für folgende Dienste in Benutzung: |
| + | - `terminal.ls-cloud.biz` → `two_factor` |
| + | - `files.ls-cloud.biz` → `two_factor` |
| + | - `termix.ls-cloud.biz` → `two_factor` (Termix mit SSH/RDP) |
| + | |
| + | ## Architektur |
| + | |
| + | ```text |
| + | Browser |
| + | -> Caddy auf dem Host |
| + | -> forward_auth gegen Authelia (CT 113 :9091) |
| + | -> bei Erfolg weiter zum eigentlichen Backend-Dienst |
| + | ``` |
| + | |
| + | Portal selbst: |
| + | |
| + | ```text |
| + | https://auth.ls-cloud.biz |
| + | -> Caddy reverse_proxy |
| + | -> CT 113 :9091 |
| + | ``` |
| + | |
| + | ## Wie ein neuer Dienst geschützt wird |
| + | |
| + | Es braucht immer **zwei Änderungen**: |
| + | |
| + | ### 1. Authelia-Regel |
| + | In `configuration.yml` unter `access_control.rules` eine Domain-Regel ergänzen, z. B.: |
| + | |
| + | ```yaml |
| + | - domain: 'files.ls-cloud.biz' |
| + | policy: two_factor |
| + | ``` |
| + | |
| + | ### 2. Caddy davor schalten |
| + | Im jeweiligen Domain-Block: |
| + | |
| + | ```caddy |
| + | forward_auth http://192.168.178.64:9091 { |
| + | uri /api/authz/forward-auth |
| + | copy_headers Remote-User Remote-Groups Remote-Email Remote-Name |
| + | } |
| + | ``` |
| + | |
| + | Danach erst das eigentliche `reverse_proxy` zum Backend. |
| + | |
| + | ## Benutzerverwaltung |
| + | |
| + | Aktuell wird der **file-based authentication backend** genutzt. |
| + | |
| + | Benutzer stehen in: |
| + | |
| + | ```text |
| + | /opt/authelia/config/users_database.yml |
| + | ``` |
| + | |
| + | Dort liegen u. a.: |
| + | - Benutzername |
| + | - Anzeige-Name |
| + | - Mailadresse |
| + | - Argon2-Passworthash |
| + | - Gruppen |
| + | |
| + | ### Aufbau eines Benutzers |
| + | |
| + | Ein einzelner Benutzer sieht im aktuellen Setup z. B. so aus: |
| + | |
| + | ```yaml |
| + | users: |
| + | admin: |
| + | disabled: false |
| + | displayname: "Sergej" |
| + | password: "$argon2id$..." |
| + | email: "sergej@ls-cloud.biz" |
| + | groups: |
| + | - admins |
| + | ``` |
| + | |
| + | ### Vorlage für einen neuen Benutzer |
| + | |
| + | ```yaml |
| + | neueruser: |
| + | disabled: false |
| + | displayname: "Neuer User" |
| + | password: "$argon2id$HIER_DEN_HASH_EINTRAGEN" |
| + | email: "user@example.com" |
| + | groups: |
| + | - users |
| + | ``` |
| + | |
| + | ### Passwort-Hash erzeugen |
| + | Ein Passwort wird nicht im Klartext gespeichert, sondern als Hash. |
| + | Ein neuer Hash kann z. B. so erzeugt werden: |
| + | |
| + | ```bash |
| + | pct exec 113 -- docker run --rm authelia/authelia:latest \ |
| + | authelia crypto hash generate argon2 --password 'NEUES_PASSWORT' |
| + | ``` |
| + | |
| + | Den `Digest:`-Wert dann in `users_database.yml` als `password:` eintragen. |
| + | |
| + | ### Benutzer hinzufügen – Schritt für Schritt |
| + | |
| + | 1. Passwort-Hash erzeugen |
| + | 2. Benutzerblock unter `users:` in `users_database.yml` ergänzen |
| + | 3. Datei speichern |
| + | 4. Authelia neu starten: |
| + | |
| + | ```bash |
| + | pct exec 113 -- bash -lc "cd /opt/authelia && docker compose -f compose.yml restart" |
| + | ``` |
| + | |
| + | 5. Danach mit dem neuen Benutzer an `https://auth.ls-cloud.biz` testen |
| + | |
| + | ### Passwort eines bestehenden Benutzers ändern |
| + | |
| + | 1. neuen Hash erzeugen |
| + | 2. beim Benutzer nur den Wert von `password:` ersetzen |
| + | 3. Authelia neu starten |
| + | |
| + | ### Benutzer deaktivieren |
| + | |
| + | ```yaml |
| + | neueruser: |
| + | disabled: true |
| + | ``` |
| + | |
| + | > [!IMPORTANT] |
| + | > Nach Änderungen an `users_database.yml` ist ein Restart von Authelia der saubere Weg, damit die Änderung sicher übernommen wird. |
| + | |
| + | ## TOTP / Google Authenticator / Aegis |
| + | |
| + | Für den Benutzer kann in der Weboberfläche unter Sicherheitsoptionen ein **Einmal-Passwort (TOTP)** hinzugefügt werden. |
| + | Das funktioniert mit: |
| + | - Google Authenticator |
| + | - Aegis |
| + | - Ente Auth |
| + | - Authy |
| + | - anderen TOTP-Apps |
| + | |
| + | ## „E-Mails“ / One-Time-Codes |
| + | |
| + | Aktuell ist **kein echter SMTP-Versand** eingerichtet. |
| + | Stattdessen schreibt Authelia Benachrichtigungen in eine Datei auf dem Server: |
| + | |
| + | ```text |
| + | /opt/authelia/config/notification.txt |
| + | ``` |
| + | |
| + | Dort landen z. B.: |
| + | - Identity-Confirmation-Codes |
| + | - One-Time-Codes |
| + | - Links zum Widerruf |
| + | - andere notifier-basierte Meldungen |
| + | |
| + | ### Beispiel ansehen |
| + | |
| + | ```bash |
| + | pct exec 113 -- tail -60 /opt/authelia/config/notification.txt |
| + | ``` |
| + | |
| + | > [!IMPORTANT] |
| + | > Wenn ein Benutzer behauptet, es komme „keine Mail“, ist im aktuellen Setup zuerst **diese Datei** zu prüfen. |
| + | |
| + | ## Prüfung |
| + | |
| + | ```bash |
| + | pct status 113 |
| + | pct exec 113 -- bash -lc "cd /opt/authelia && docker compose -f compose.yml ps" |
| + | curl -k -I https://auth.ls-cloud.biz |
| + | curl -k -I https://terminal.ls-cloud.biz |
| + | curl -k -I https://files.ls-cloud.biz |
| + | ``` |
| + | |
| + | ## Wichtige Dateien |
| + | |
| + | | Pfad | Zweck | |
| + | |---|---| |
| + | | `/opt/authelia/compose.yml` | Docker-Compose-Definition | |
| + | | `/opt/authelia/config/configuration.yml` | Hauptkonfiguration | |
| + | | `/opt/authelia/config/users_database.yml` | Benutzer & Passwort-Hashes | |
| + | | `/opt/authelia/config/db.sqlite3` | lokaler Storage | |
| + | | `/opt/authelia/config/notification.txt` | serverseitige „E-Mails“ / Codes | |
| + | | `/etc/caddy/Caddyfile` (Host) | Portal + ForwardAuth vor geschützten Diensten | |
| + | |
| + | ## Hinweise |
| + | |
| + | > [!TIP] |
| + | > Für neue Dienste immer in zwei Schritten denken: **Authelia-Regel** und **Caddy forward_auth**. |
| + | |
| + | > [!WARNING] |
| + | > Nur Webdienste hinter Caddy lassen sich so sauber schützen. Nicht-HTTP-Protokolle brauchen andere Wege. |
| ct-114-games.md .. | |
| @@ 1,7 1,7 @@ | |
| # CT 114 – Games | |
| > [!NOTE] | |
| - | > CT 114 hostet aktuell einen Games-/EmulatorJS-Webdienst. |
| + | > CT 114 hostet einen Games-/EmulatorJS-Webdienst hinter `games.ls-cloud.biz`. Der Container ist aktuell nicht dauerhaft laufend. |
| ## Basisdaten | |
| ct-117-technitium-dns.md .. | |
| @@ 1,7 1,7 @@ | |
| # CT 117 – Technitium DNS | |
| > [!NOTE] | |
| - | > CT 117 hostet aktuell den **Technitium DNS Server**. Er ist über `dns.ls-cloud.biz` öffentlich für die Web-UI erreichbar und dient als aktueller DNS-/Resolver-Kandidat im Setup. |
| + | > CT 117 hostet den **Technitium DNS Server** — den primaeren DNS-Resolver fuer das gesamte lscloud-Netz. Er ist ueber `dns.ls-cloud.biz` oeffentlich fuer die Web-UI erreichbar. |
| ## Basisdaten | |
| @@ 11,28 11,34 @@ | |
| | **Name** | `technitium-dns` | | |
| | **IP** | `192.168.178.87` | | |
| | **OS** | Debian 12 | | |
| - | | **Disk** | 4 GB | |
| | **Web-UI intern** | `http://192.168.178.87:5380` | | |
| | **Web-UI extern** | `https://dns.ls-cloud.biz` | | |
| | **DNS-Port** | `53/tcp`, `53/udp` | | |
| - | | **Dienst** | `dns.service` | |
| + | | **Dienst** | `dns.service` (systemd) | |
| + | | **Install-Pfad** | `/opt/technitium/dns/` | |
| + | | **Version** | v15.2.0 (Stand 2026-05-28) | |
| - | ## Operative Einordnung |
| + | ## Konfiguration |
| - | - Caddy zeigt `dns.ls-cloud.biz` aktuell auf **`192.168.178.87:5380`** |
| - | - Die Web-UI ist damit nicht mehr nur intern relevant, sondern Teil der öffentlichen Domain-Matrix |
| + | - **Upstream:** Cloudflare DoH + Quad9 DoH |
| + | - **Blocklisten:** OISD Big, HaGeZi Pro++, URLhaus, HaGeZi TIF (~48 MB, taeglich aktualisiert) |
| + | - Fritz!Box DHCP zeigt auf `192.168.178.87` |
| + | ## Update-Verfahren |
| - | ## Prüfung |
| + | ```bash |
| + | pct exec 117 -- bash -c 'curl -fsSL https://download.technitium.com/dns/install.sh | bash' |
| + | ``` |
| + | |
| + | ## Pruefung |
| ```bash | |
| pct status 117 | |
| pct exec 117 -- systemctl status dns.service | |
| pct exec 117 -- ss -ltnup | grep -E '53|5380' | |
| - | curl -k -I https://dns.ls-cloud.biz |
| + | curl -kI https://dns.ls-cloud.biz |
| ``` | |
| - | ## Hinweise |
| + | ## Hintergrund |
| - | > [!TIP] |
| - | > Für die operative Doku ist vor allem wichtig: **Domain → CT 117 → Port 5380**. Detail-Tuning zu Blocklisten oder Upstream-DNS kann separat gepflegt werden, wenn daran aktiv gearbeitet wird. |
| + | Technitium DNS hat **Pi-hole auf CT 110** abgeloest. CT 110 lief frueher als Pi-hole-DNS-Container auf IP 192.168.178.78 und wurde spaeter komplett zu Termix umgebaut. DNS laeuft seither auf CT 117. |
| ct-118-paperclipai.md .. | |
| @@ 1,277 1,296 @@ | |
| - | # CT 118 – PaperclipAI |
| + | # CT 118 – Paperclip benutzen (einfach erklaert) |
| > [!NOTE] | |
| - | > CT 118 hostet **PaperclipAI** – eine Open-Source Multi-Agent-Orchestrierungsplattform, die KI-Agenten (Claude Code) als autonome "Mitarbeiter" in virtuellen Unternehmen koordiniert. Zugriff über `https://agent.ls-cloud.biz` (Login erforderlich). |
| + | > Diese Seite erklaert **die Benutzung von Paperclip** moeglichst einfach. Nicht primär Infrastruktur, nicht Container-Interna, sondern: **Wie komme ich rein, was mache ich dort, und woran sehe ich, ob etwas funktioniert?** |
| - | ## Basisdaten |
| + | ## Was ist Paperclip ueberhaupt? |
| - | | Eigenschaft | Wert | |
| - | |---|---| |
| - | | **CT-ID** | `118` | |
| - | | **Name** | `paperclipai` | |
| - | | **IP** | `192.168.178.88` | |
| - | | **OS** | Debian 12 (Bookworm) | |
| - | | **RAM** | 2048 MB | |
| - | | **Disk** | 20 GB | |
| - | | **Web-UI (intern)** | `http://192.168.178.88:3101` | |
| - | | **Web-UI (extern)** | `https://agent.ls-cloud.biz` | |
| - | | **Service** | `paperclipai.service` (User: `paperclip`) | |
| - | | **Node.js** | v20.20.2 | |
| - | | **PaperclipAI** | v2026.403.0 | |
| - | | **Claude Code** | v2.1.96 | |
| - | | **Auth** | Caddy basic_auth + PaperclipAI-eigene Accounts | |
| + | Paperclip ist in diesem Setup die Weboberflaeche unter: |
| - | --- |
| - | |
| - | ## Was ist PaperclipAI? |
| - | |
| - | PaperclipAI ist eine **Agentenorchestrierung** – du erstellst virtuelle Unternehmen mit KI-Agenten (hier: Claude Code), die eigenständig Code schreiben, Bugs fixen, Tasks ausführen und dabei ein Monatsbudget einhalten. |
| + | ```text |
| + | https://agent.ls-cloud.biz |
| + | ``` |
| - | **Kernkonzepte:** |
| + | Darueber arbeitest du mit Agenten. |
| - | | Begriff | Bedeutung | |
| - | |---|---| |
| - | | **Company** | Virtuelles Unternehmen – Container für Agenten und Projekte | |
| - | | **Agent** | KI-Worker (hier Claude Code) – führt Tasks autonom aus | |
| - | | **Job** | Einzelner Auftrag / Prompt, den ein Agent bearbeitet | |
| - | | **Budget** | Monatliches Kostenlimit pro Agent (verhindert Kontrollverlust) | |
| - | | **Plugin** | Erweiterung für Agenten (z.B. GitHub, Jira-Integration) | |
| + | Ganz simpel gesagt: |
| + | - du oeffnest die Webseite |
| + | - meldest dich an |
| + | - waehlst einen Agenten |
| + | - schreibst, was der Agent tun soll |
| + | - liest die Antwort, Logs und den Status |
| - | --- |
| + | Wenn du nur diesen Teil verstehst, bist du schon weiter als viele Produktdokus. Tragisch, aber wahr. |
| - | ## Einrichtung – Schritt für Schritt |
| + | ## Schnellstart in 30 Sekunden |
| - | ### 1. Dashboard öffnen |
| + | Wenn du einfach nur loslegen willst: |
| - | Öffne `https://agent.ls-cloud.biz` im Browser. |
| + | 1. `https://agent.ls-cloud.biz` im Browser aufrufen |
| + | 2. bei **Authelia** anmelden |
| + | 3. in Paperclip einen vorhandenen Agenten anklicken |
| + | 4. unten oder im zentralen Eingabebereich deine Anweisung eingeben |
| + | 5. Run / Send / Start ausloesen |
| + | 6. warten, bis Status, Ausgabe oder Logs erscheinen |
| - | Login mit Caddy-Credentials → danach erscheint das PaperclipAI-Dashboard. |
| + | ## Warum kommt zuerst ein Login? |
| - | > [!NOTE] |
| - | > Beim ersten Aufruf nach Installation erscheint ein **Bootstrap-Wizard** um den ersten Admin-Account anzulegen. E-Mail + Passwort eingeben → Account wird erstellt. |
| + | Vor Paperclip sitzt **Authelia**. |
| + | Das ist die vorgeschaltete Anmeldung mit optionalem 2FA-Schutz. |
| - | --- |
| + | Das heisst: |
| + | - du kommst **nicht direkt** in Paperclip |
| + | - du wirst zuerst zu `auth.ls-cloud.biz` umgeleitet |
| + | - nach erfolgreichem Login landest du wieder bei `agent.ls-cloud.biz` |
| - | ### 2. Ersten Account anlegen (Bootstrap) |
| + | Wenn du dich also wunderst, warum erst Login kommt: |
| + | ### Das ist korrekt und gewollt. |
| - | Falls noch kein Account existiert: |
| + | ## So benutzt du Paperclip Schritt fuer Schritt |
| - | 1. `https://agent.ls-cloud.biz` aufrufen |
| - | 2. **"Create Account"** oder Bootstrap-Formular ausfüllen |
| - | 3. E-Mail + Passwort festlegen |
| - | 4. Du bist jetzt Admin |
| + | ## 1. Seite oeffnen |
| - | > [!TIP] |
| - | > Nach dem ersten Account empfiehlt es sich, in den Einstellungen die freie Registrierung zu deaktivieren – sonst kann sich jeder mit dem Caddy-Passwort auch einen PaperclipAI-Account anlegen. |
| + | Im Browser aufrufen: |
| - | --- |
| + | ```text |
| + | https://agent.ls-cloud.biz |
| + | ``` |
| - | ### 3. Company erstellen |
| + | ## 2. Bei Authelia anmelden |
| - | Eine **Company** ist der Arbeitsraum. Jedes Projekt / jeder Themenkomplex kann eine eigene Company sein. |
| + | Wenn noch keine Session vorhanden ist: |
| + | - Benutzername eingeben |
| + | - Passwort eingeben |
| + | - falls verlangt: zweiten Faktor bestaetigen |
| - | 1. Im Dashboard auf **"New Company"** klicken |
| - | 2. Name vergeben (z.B. `Homelab Automation`) |
| - | 3. Optional: Beschreibung |
| - | 4. **"Create"** → Company ist angelegt |
| + | Danach wirst du zurueck zu Paperclip geleitet. |
| - | Du landest automatisch im Company-Dashboard. |
| + | ## 3. In der Paperclip-Oberflaeche orientieren |
| - | --- |
| + | Je nach Version kann die Oberflaeche leicht anders aussehen. Typisch sind aber folgende Bereiche: |
| - | ### 4. Agent hinzufügen |
| + | - **Agentenliste** oder Auswahl vorhandener Agenten |
| + | - **Runs / Sessions / Tasks** |
| + | - **Eingabefeld** fuer Anweisungen |
| + | - **Ausgabe / Verlauf / Logs** |
| + | - **Status** wie `idle`, `running`, `completed`, `failed` |
| - | Ein Agent ist die Verbindung zu Claude Code (dem eigentlichen KI-Worker). |
| + | Wichtig: |
| + | Du musst nicht jeden Knopf verstehen. |
| + | Fuer den Anfang reichen drei Dinge: |
| + | - Wo waehle ich den Agenten? |
| + | - Wo tippe ich meine Aufgabe ein? |
| + | - Wo sehe ich die Antwort oder den Fehler? |
| - | 1. In der Company auf **"Agents"** → **"Add Agent"** |
| - | 2. **Name** vergeben (z.B. `claude-engineer`) |
| - | 3. **Adapter** wählen: `claude_local` |
| - | 4. **Monatliches Budget** setzen (z.B. `$10.00`) – schützt vor unkontrollierten Kosten |
| - | 5. Optional: **Working Directory** – Verzeichnis in dem Claude Code arbeitet |
| - | 6. **"Save"** → Agent ist registriert |
| + | ## 4. Agent auswaehlen |
| - | > [!WARNING] |
| - | > Ohne Budget-Limit läuft der Agent unbegrenzt. Für Homelab-Nutzung reichen $5–$20/Monat je nach Nutzungsintensität. |
| + | Ein Agent ist vereinfacht gesagt der "Arbeiter" in Paperclip. |
| - | --- |
| + | Du gibst ihm eine Aufgabe wie z. B.: |
| + | - etwas analysieren |
| + | - etwas zusammenfassen |
| + | - eine Struktur erstellen |
| + | - einen Ablauf planen |
| - | ### 5. Ersten Job erstellen (Agent beauftragen) |
| + | Wenn mehrere Agenten sichtbar sind: |
| + | - den passenden anklicken |
| + | - schauen, ob er grundsaetzlich verfuergbar wirkt |
| + | - falls ein Status angezeigt wird, ist `idle` oder `ready` meist gut |
| - | Jobs sind die eigentlichen Aufgaben, die du dem Agenten gibst. |
| + | ## 5. Aufgabe eingeben |
| - | 1. Im Company-Dashboard auf **"New Job"** klicken |
| - | 2. **Agent auswählen** (den gerade angelegten) |
| - | 3. **Prompt eingeben** – so präzise wie möglich, z.B.: |
| + | Jetzt kommt deine eigentliche Anweisung. |
| - | ``` |
| - | Analysiere das Verzeichnis /opt/myapp und finde alle Stellen wo |
| - | SQL-Queries direkt aus User-Input gebaut werden. Liste die Dateien |
| - | und Zeilennummern auf und erkläre das Risiko. |
| - | ``` |
| + | ### Schlechtes Beispiel |
| - | 4. Optional: **Kontext-Dateien** anhängen |
| - | 5. **"Start Job"** → Agent beginnt die Arbeit |
| + | ```text |
| + | mach mal server |
| + | ``` |
| - | Der Job erscheint in der Job-Liste mit Status `running`. Du siehst in Echtzeit die Ausgabe des Agenten. |
| + | Das ist inhaltlich duenn. Paperclip oder der Agent muessen dann raten, was du willst. |
| - | --- |
| + | ### Besseres Beispiel |
| - | ### 6. Job-Ausgabe lesen |
| + | ```text |
| + | Analysiere, warum ein Webdienst nicht startet, und nenne mir die wahrscheinlichste Ursache. |
| + | ``` |
| - | Während und nach dem Job: |
| + | ### Noch besseres Beispiel |
| - | - **Live-Output**: Claude Codes Nachrichten erscheinen in Echtzeit im Job-Detail |
| - | - **Tool-Calls**: Jede Datei die gelesen/geschrieben wird, jeder Bash-Befehl – alles sichtbar |
| - | - **Status**: `running` → `completed` / `failed` |
| - | - **Kosten**: Werden nach Abschluss gegen das Budget gebucht |
| + | ```text |
| + | Analysiere, warum der Dienst nicht startet, und gib mir: |
| + | 1. die wahrscheinlichste Ursache |
| + | 2. die betroffene Datei oder Komponente |
| + | 3. einen konkreten Fix-Vorschlag |
| + | ``` |
| - | --- |
| + | Faustregel: |
| + | ### Je klarer du schreibst, desto brauchbarer wird die Antwort. |
| - | ### 7. Mehrere Agenten & Arbeitsteilung |
| + | ## 6. Run starten |
| - | Du kannst mehrere Agenten in einer Company anlegen und ihnen verschiedene Rollen geben: |
| + | Je nach Oberflaeche heisst der Knopf eventuell: |
| + | - `Run` |
| + | - `Start` |
| + | - `Send` |
| + | - oder etwas aehnliches |
| - | | Agent-Name | Working Dir | Aufgabe | |
| - | |---|---|---| |
| - | | `frontend-dev` | `/opt/webapp/frontend` | React/CSS Änderungen | |
| - | | `backend-dev` | `/opt/webapp/api` | API-Entwicklung | |
| - | | `devops` | `/opt/infra` | Server/Config-Verwaltung | |
| + | Nach dem Start sollte sich sichtbar etwas tun: |
| + | - Status springt auf `running` |
| + | - es erscheinen Logzeilen |
| + | - spaeter eine Antwort oder ein Ergebnis |
| - | Jeder Agent hat sein eigenes Budget. So lässt sich Kosten pro Bereich tracken. |
| + | Wenn **gar nichts** passiert: |
| + | - falscher Agent? |
| + | - Browser haengt? |
| + | - Run wurde nicht wirklich ausgeloest? |
| + | - Seite neu laden und nochmal schauen |
| - | --- |
| + | ## Was bedeuten die Stati? |
| - | ### 8. Plugins & Integrationen |
| + | ### `idle` |
| + | Der Agent wartet und ist nicht aktiv beschaeftigt. |
| - | Unter **Settings → Plugins** kannst du Erweiterungen aktivieren: |
| + | ### `running` |
| + | Der Agent arbeitet gerade. |
| - | - **GitHub**: Agent öffnet automatisch PRs für seine Änderungen |
| - | - **Jira / Linear**: Tasks aus Ticketsystem als Job-Quelle |
| - | - **Webhook**: Externe Trigger für Jobs (z.B. aus CI/CD Pipeline) |
| + | ### `completed` |
| + | Der Lauf ist fertig. |
| + | Es sollte eine Ausgabe, Antwort oder ein Ergebnis geben. |
| - | Plugins werden pro Agent oder global aktiviert. |
| + | ### `failed` |
| + | Der Lauf ist fehlgeschlagen. |
| + | Dann sind Logs und Fehlermeldung wichtiger als jede Vermutung. |
| - | --- |
| + | ### `terminated` |
| + | Der Lauf wurde beendet oder abgebrochen. |
| - | ## Tägliche Nutzung |
| + | ## Wo lese ich das Ergebnis? |
| - | ### Neuen Job starten |
| - | **Company** → **"New Job"** → Agent wählen → Prompt schreiben → **"Start"** |
| + | Meist an einer dieser Stellen: |
| + | - im Verlauf des Runs |
| + | - im Ausgabebereich |
| + | - in der Detailansicht des Tasks |
| + | - in den Logs |
| - | ### Job-Status prüfen |
| - | **Company** → **"Jobs"** → Job anklicken → Live-Output + Kostenübersicht |
| + | Wenn du nicht sicher bist, ob es geklappt hat, schau immer zuerst auf: |
| + | 1. **Status** |
| + | 2. **sichtbare Antwort** |
| + | 3. **Fehlermeldung / Logauszug** |
| - | ### Budget-Verbrauch prüfen |
| - | **Company** → **"Agents"** → Agent anklicken → Budget-Chart (verbraucht / verbleibend) |
| + | ## Typische Beispiele, was man damit machen kann |
| - | ### Agent temporär pausieren |
| - | **Agents** → Agent → **"Disable"** → Agent nimmt keine neuen Jobs an |
| + | Mit Paperclip kannst du zum Beispiel: |
| + | - eine Aufgabe zusammenfassen lassen |
| + | - einen Plan aus etwas Chaotischem machen lassen |
| + | - technische Probleme grob analysieren lassen |
| + | - Struktur fuer ein Projekt oder eine Doku bauen lassen |
| + | - Ergebnisse und Laufverhalten von Agenten nachvollziehen |
| - | --- |
| + | ## Beispiel-Workflows |
| - | ## Überwachung & Wartung |
| + | ## Workflow 1 – Etwas erklaeren lassen |
| - | ### Service-Status |
| + | Beispiel: |
| - | ```bash |
| - | ssh root@192.168.178.88 |
| - | systemctl status paperclipai |
| + | ```text |
| + | Erklaere mir dieses Problem in einfachen Worten und gib mir drei naechste Schritte. |
| ``` | |
| - | ### Logs |
| - | |
| - | ```bash |
| - | # Systemd-Journal |
| - | journalctl -u paperclipai -f |
| + | Sinnvoll, wenn: |
| + | - ein Thema unklar ist |
| + | - du aus Chaos erst einmal Struktur machen willst |
| - | # PaperclipAI eigene Logs |
| - | tail -f /home/paperclip/.paperclip/instances/default/logs/*.log |
| - | ``` |
| + | ## Workflow 2 – Technisches Problem einschaetzen lassen |
| - | ### Neustart |
| + | Beispiel: |
| - | ```bash |
| - | systemctl restart paperclipai |
| + | ```text |
| + | Pruefe diese Fehlermeldung und nenne die wahrscheinlichste Ursache. |
| ``` | |
| - | ### Claude OAuth-Token erneuern (falls abgelaufen) |
| + | Sinnvoll, wenn: |
| + | - du erst eine Richtung brauchst |
| + | - du nicht blind irgendwo herumdoktern willst |
| - | ```bash |
| - | ssh root@192.168.178.88 |
| - | su - paperclip |
| - | claude logout |
| - | claude login |
| - | # URL kopieren → im Browser öffnen → Pro-Account einloggen |
| - | ``` |
| + | ## Workflow 3 – Antwort in brauchbares Format zwingen |
| - | Danach Credentials wieder für den paperclip User verfügbar machen: |
| - | ```bash |
| - | cp /root/.claude/.credentials.json /home/paperclip/.claude/.credentials.json |
| - | chown paperclip:paperclip /home/paperclip/.claude/.credentials.json |
| - | systemctl restart paperclipai |
| - | ``` |
| - | |
| - | ### PaperclipAI updaten |
| + | Beispiel: |
| - | ```bash |
| - | ssh root@192.168.178.88 |
| - | su - paperclip |
| - | npm install -g paperclipai@latest |
| - | systemctl restart paperclipai |
| + | ```text |
| + | Gib mir die Antwort als kurze Checkliste mit Prioritaet hoch, mittel, niedrig. |
| ``` | |
| - | --- |
| - | |
| - | ## Architektur im Überblick |
| + | Sinnvoll, wenn: |
| + | - du keine Laberantwort willst |
| + | - du etwas sofort abarbeiten moechtest |
| + | |
| + | ## Typische Probleme und was sie bedeuten |
| + | |
| + | ## Problem: "Ich sehe nur den Login" |
| + | Das ist normal. |
| + | Authelia sitzt davor. |
| + | Erst anmelden, dann geht es zu Paperclip weiter. |
| + | |
| + | ## Problem: "Ich bin eingeloggt, aber sehe keine brauchbare Antwort" |
| + | Dann kann es sein, dass: |
| + | - der Agent haengt |
| + | - der Run fehlgeschlagen ist |
| + | - die Aufgabe zu unklar war |
| + | - ein internes Adapter-/Backendproblem vorliegt |
| + | |
| + | ## Problem: "Die Seite laedt, aber der Agent reagiert nicht" |
| + | Dann ist oft **nicht** die Domain das Problem, sondern eher: |
| + | - der Agent selbst |
| + | - der Run selbst |
| + | - ein internes Problem im Backend |
| + | |
| + | ## Problem: "Ich bekomme nur Fehler" |
| + | Dann auf Schluesselwoerter achten wie: |
| + | - `failed` |
| + | - `timeout` |
| + | - `auth` |
| + | - `adapter` |
| + | - `workspace` |
| + | - `parse` |
| + | |
| + | Diese Begriffe sagen oft schon recht genau, in welche Richtung der Fehler geht. |
| + | |
| + | ## Woran erkenne ich, ob eher die App oder eher die Infrastruktur kaputt ist? |
| + | |
| + | ### Eher Infrastrukturproblem |
| + | Wenn: |
| + | - die Seite gar nicht aufgeht |
| + | - nur 502 / Bad Gateway kommt |
| + | - der Redirect voellig kaputt ist |
| + | - du nicht sauber durch Authelia kommst |
| + | |
| + | ### Eher App-/Agentenproblem |
| + | Wenn: |
| + | - Login klappt |
| + | - die Seite laedt |
| + | - aber der Agent nicht antwortet oder Runs scheitern |
| + | |
| + | ## Mini-Checkliste bei Stoerungen |
| + | |
| + | 1. Komme ich auf `https://agent.ls-cloud.biz`? |
| + | 2. Werde ich sauber zu Authelia umgeleitet? |
| + | 3. Komme ich nach dem Login wieder zur App? |
| + | 4. Kann ich einen Agenten waehlen? |
| + | 5. Startet ein Run? |
| + | 6. Was sagt der Status? |
| + | 7. Was sagen die Logs? |
| + | |
| + | ## Praktische Merksaetze |
| + | |
| + | > [!IMPORTANT] |
| + | > Paperclip ist fuer die Benutzung kein Magieproblem, sondern fast immer nur ein Ablaufproblem: **Login, Agent waehlen, Aufgabe klar schreiben, Status lesen, Logs beachten.** |
| - | ``` |
| - | Browser |
| - | └── https://agent.ls-cloud.biz |
| - | └── Caddy (Proxmox Host, basic_auth) |
| - | └── nginx CT 118 :3101 |
| - | └── PaperclipAI :3100 (127.0.0.1, User: paperclip) |
| - | └── embedded PostgreSQL :54329 |
| - | └── claude_local Adapter |
| - | └── Claude Code (/usr/bin/claude) |
| - | └── OAuth → Claude Pro Plan |
| - | ``` |
| - | |
| - | --- |
| - | |
| - | ## Wichtige Pfade |
| - | |
| - | | Pfad | Inhalt | |
| - | |---|---| |
| - | | `/home/paperclip/.paperclip/instances/default/config.json` | Hauptkonfiguration | |
| - | | `/home/paperclip/.paperclip/instances/default/db/` | PostgreSQL Daten | |
| - | | `/home/paperclip/.paperclip/instances/default/logs/` | Logs | |
| - | | `/home/paperclip/.paperclip/instances/default/data/backups/` | Automatische DB-Backups | |
| - | | `/home/paperclip/.claude/.credentials.json` | Claude OAuth-Token | |
| - | | `/etc/systemd/system/paperclipai.service` | Systemd Service | |
| - | | `/etc/nginx/sites-enabled/paperclipai` | nginx Proxy-Config | |
| - | |
| - | --- |
| - | |
| - | ## Schnellcheck |
| - | |
| - | ```bash |
| - | # Container läuft? |
| - | ssh root@192.168.178.46 "pct status 118" |
| - | |
| - | # Service läuft? |
| - | ssh root@192.168.178.88 "systemctl status paperclipai --no-pager | head -5" |
| - | |
| - | # API erreichbar? |
| - | curl -s http://192.168.178.88:3101/api/health | python3 -m json.tool |
| - | |
| - | # HTTPS mit Auth? |
| - | curl -sk -u 'xclusive:PASSWORT' https://agent.ls-cloud.biz/api/health |
| - | ``` |
| + | > [!TIP] |
| + | > Wenn eine Antwort schlecht ist, ist oft nicht das Tool dumm, sondern die Anweisung zu unklar formuliert. Das klingt gemein, hilft aber erstaunlich oft. |
| - | --- |
| + | ## Wenn du nur einen einzigen Satz mitnehmen willst |
| - | > [!TIP] |
| - | > Claude Code arbeitet im **Home-Verzeichnis des paperclip-Users** (`/home/paperclip`), sofern kein Working Directory im Agent gesetzt ist. Für produktive Nutzung immer ein konkretes Projektverzeichnis als Working Directory angeben. |
| + | ### Oeffnen, einloggen, Agent waehlen, Aufgabe klar schreiben, Ergebnis und Status lesen. |
| - | > [!WARNING] |
| - | > PaperclipAI läuft im Modus `local_trusted` – das bedeutet die App vertraut allen Requests die über localhost kommen **ohne zusätzliche Token-Prüfung**. Deshalb ist der Caddy `basic_auth` davor zwingend notwendig und darf nicht entfernt werden. |
| + | Damit kommt man in der Praxis schon ziemlich weit. |
| ct-119-azerothcore.md .. | |
| @@ 1,138 1,37 @@ | |
| - | # AzerothCore WoW Realm (CT 119) |
| + | # CT 119 – AzerothCore |
| - | ## Übersicht |
| + | > [!NOTE] |
| + | > CT 119 hostet aktuell den **AzerothCore WoW-Stack** inklusive Realm-/Worldserver und einem Webpanel-Pfad über `panel.ls-cloud.biz`. |
| + | |
| + | ## Basisdaten |
| | Parameter | Wert | | |
| - | |-----------|------| |
| - | | CT-ID | 119 | |
| - | | Hostname | azeroth | |
| - | | IP | 192.168.178.89 | |
| + | |---|---| |
| + | | CT-ID | `119` | |
| + | | Hostname | `azeroth` | |
| + | | IP | `192.168.178.89` | |
| | OS | Debian 12 Bookworm | | |
| - | | CPU / RAM / Disk | 4 vCPU / 8 GB / 40 GB SSD | |
| - | | Realm | lscloud (WotLK 3.3.5a) | |
| - | | Installiert | April 2026 | |
| + | | Disk | 60 GB | |
| + | | Panel | `https://panel.ls-cloud.biz` | |
| - | ## Ports & Dienste |
| + | ## Relevante Ports & Dienste |
| | Port | Dienst | Sichtbar | | |
| |------|--------|----------| | |
| - | | 3724 TCP | AzerothCore Authserver | extern (DNAT) | |
| - | | 8085 TCP | AzerothCore Worldserver | extern (DNAT) | |
| - | | 7878 TCP | SOAP-Interface (Worldserver) | nur intern | |
| - | | 80 TCP | nginx + FusionCMS | intern → Caddy | |
| - | | 3306 TCP | MySQL 8.0 | nur intern | |
| - | |
| - | ## Dateipfade |
| - | |
| - | | Pfad | Inhalt | |
| - | |------|--------| |
| - | | `/opt/azerothcore/bin/` | authserver, worldserver Binaries | |
| - | | `/opt/azerothcore/etc/` | authserver.conf, worldserver.conf | |
| - | | `/opt/azerothcore/logs/` | Server-Logs (SSD, logrotate täglich) | |
| - | | `/opt/azerothcore/data/` | Client-Daten (bind mount, read-only) | |
| - | | `/var/lib/mysql/` | MySQL Daten (SSD) | |
| - | | `/var/www/fusioncms/` | FusionCMS Web-Panel | |
| - | | `/root/acore-credentials.txt` | Credentials (DB-Pass, Admin-Pass) | |
| - | |
| - | **Wichtig:** `/mnt/storage` (externe HDD) ist ausschließlich als read-only bind mount eingebunden. |
| - | Alle schreibenden Dienste (MySQL, Logs) laufen auf lokaler SSD. |
| - | |
| - | ## Credentials (Platzhalter) |
| - | |
| - | ``` |
| - | ACORE_DB_USER : acore |
| - | ACORE_DB_PASS : → /root/acore-credentials.txt |
| - | ADMIN_USER : admin (GM Level 3) |
| - | ADMIN_PASS : → /root/acore-credentials.txt |
| - | FUSIONCMS URL : https://panel.ls-cloud.biz |
| - | ``` |
| - | |
| - | ## Systemd Services |
| - | |
| - | ```bash |
| - | systemctl status acore-auth # Authserver (Port 3724) |
| - | systemctl status acore-world # Worldserver (Port 8085 + SOAP 7878) |
| - | systemctl status mysql # MySQL 8.0 |
| - | systemctl status nginx # nginx + FusionCMS |
| - | ``` |
| - | |
| - | ## WoW Client verbinden |
| - | |
| - | ``` |
| - | SET REALMLIST realm.ls-cloud.biz |
| - | ``` |
| - | → Dann normaler Login-Screen. Realm "lscloud" auswählen. |
| - | |
| - | **Externe DNS-Einträge (Cloudflare):** |
| - | - `realm.ls-cloud.biz` → Proxmox-Host-IP (TCP 3724 via DNAT) |
| - | - `wow.ls-cloud.biz` → Proxmox-Host-IP (TCP 8085 via DNAT) |
| - | - `panel.ls-cloud.biz` → Caddy auf Proxmox-Host → CT119:80 |
| - | |
| - | **Fritz!Box:** Ports 3724 + 8085 müssen auf Proxmox-Host (192.168.178.46) weitergeleitet sein. |
| + | | 3724 TCP | Authserver | extern / Spielzugriff | |
| + | | 8085 TCP | Worldserver | extern / Spielzugriff | |
| + | | 80 TCP | Webpanel | intern → Caddy | |
| - | ## Admin-Commands (Worldserver-Console oder SOAP) |
| + | ## Operative Einordnung |
| - | ``` |
| - | # GM-Level vergeben |
| - | account set gmlevel <user> 3 -1 |
| - | |
| - | # Neuen Account erstellen |
| - | account create <user> <pass> |
| - | |
| - | # Server-Info |
| - | server info |
| - | |
| - | # Online-Spieler |
| - | online list |
| - | ``` |
| + | - Caddy zeigt `panel.ls-cloud.biz` aktuell auf **`192.168.178.89:80`** |
| + | - Die früheren separaten Domain-Bezüge für Realm/World sollten nur dokumentiert werden, wenn sie operativ tatsächlich wieder genutzt werden |
| + | - Die eigentliche Rate-Konfiguration liegt in **`/opt/azerothcore/etc/worldserver.conf`** |
| - | ## SOAP via FusionCMS |
| - | |
| - | FusionCMS schickt GM-Commands über SOAP an `127.0.0.1:7878`. |
| - | Die Verbindung ist in der DB konfiguriert: |
| - | ```sql |
| - | mysql -u root fusioncms -e "SELECT console_username, console_port FROM realms;" |
| - | ``` |
| - | |
| - | ## Update-Prozedur |
| + | ## Prüfung |
| ```bash | |
| - | # 1. In CT119 als root |
| - | cd /root/azerothcore |
| - | |
| - | # 2. Neue Commits holen |
| - | git pull |
| - | |
| - | # 3. Neu kompilieren |
| - | cd build |
| - | cmake .. -DCMAKE_INSTALL_PREFIX=/opt/azerothcore -DCMAKE_C_COMPILER=/usr/bin/clang -DCMAKE_CXX_COMPILER=/usr/bin/clang++ |
| - | make -j$(nproc) && make install |
| - | |
| - | # 4. Services neustarten |
| - | systemctl restart acore-auth acore-world |
| - | |
| - | # DB-Updates werden beim nächsten Worldserver-Start automatisch importiert |
| + | pct status 119 |
| + | pct exec 119 -- systemctl status acore-auth acore-world |
| + | curl -k -I https://panel.ls-cloud.biz |
| ``` | |
| - | |
| - | ## MySQL-Tuning (HDD-Schutz) |
| - | |
| - | Konfiguration in `/etc/mysql/mysql.conf.d/99-acore.cnf`: |
| - | - `expire_logs_days = 3` — Binary Logs automatisch rotieren |
| - | - `general_log = 0` — Query-Log deaktiviert |
| - | - `slow_query_log = 0` — Slow-Log deaktiviert |
| - | - `innodb_buffer_pool_size = 2G` |
| - | |
| - | ## Datenbanken |
| - | |
| - | | DB | Inhalt | |
| - | |----|--------| |
| - | | `acore_auth` | Accounts, Realmliste, GM-Rechte | |
| - | | `acore_characters` | Charakterdaten | |
| - | | `acore_world` | Weltdaten, Quests, NPCs | |
| - | | `fusioncms` | Web-Panel Daten | |
| - | |
| - | ## Verwandte Seiten |
| - | |
| - | - [[gm-commands]] – GM-Command Referenz |
| - | - [[server-konsole]] – SSH, SOAP, Logs, Konsolen-Zugriff |
| - | - [[home]] |
| ct-121-vaultwarden.md .. | |
| @@ 1,70 1,30 @@ | |
| - | # Vaultwarden Passwortmanager (CT 121) |
| + | # CT 121 – Vaultwarden |
| - | ## Übersicht |
| + | > [!NOTE] |
| + | > CT 121 hostet **Vaultwarden** hinter `pw.ls-cloud.biz`. |
| + | |
| + | ## Basisdaten |
| | Parameter | Wert | | |
| - | |-----------|------| |
| - | | CT-ID | 121 | |
| - | | Hostname | vaultwarden | |
| - | | IP | 192.168.178.91 | |
| + | |---|---| |
| + | | CT-ID | `121` | |
| + | | Hostname | `vaultwarden` | |
| + | | IP | `192.168.178.91` | |
| | OS | Debian 12 Bookworm | | |
| - | | CPU / RAM / Disk | 1 vCPU / 256 MB / 8 GB SSD | |
| - | | Software | Vaultwarden 1.35.4 (aus Source), Web Vault v2026.1.1 | |
| - | | Installiert | April 2026 | |
| - | |
| - | ## Ports & Dienste |
| - | |
| - | | Port | Dienst | Sichtbar | |
| - | |------|--------|----------| |
| - | | 8080 TCP | Vaultwarden (Rocket HTTP) | intern → Caddy | |
| - | |
| - | ## Dateipfade |
| - | |
| - | | Pfad | Inhalt | |
| - | |------|--------| |
| - | | `/opt/vaultwarden/vaultwarden` | Binary (selbst kompiliert) | |
| - | | `/opt/vaultwarden/web-vault/` | Web Vault UI | |
| - | | `/opt/vaultwarden/data/` | Datenbank, Keys, Attachments | |
| - | | `/opt/vaultwarden/.env` | Konfiguration | |
| - | | `/root/vaultwarden-credentials.txt` | Admin-Passwort (auf Proxmox-Host) | |
| - | |
| - | ## Konfiguration (.env) |
| - | |
| - | ```ini |
| - | DOMAIN=https://pw.ls-cloud.biz |
| - | ROCKET_PORT=8080 |
| - | WEBSOCKET_ENABLED=true |
| - | SIGNUPS_ALLOWED=false # nach erstem Account deaktivieren |
| - | ADMIN_TOKEN=<argon2id-hash> |
| - | ``` |
| - | |
| - | ## Systemd Service |
| - | |
| - | ```bash |
| - | systemctl status vaultwarden |
| - | systemctl restart vaultwarden |
| - | ``` |
| - | |
| - | ## Admin-Panel |
| - | |
| - | - URL: `https://pw.ls-cloud.biz/admin` |
| - | - Passwort: → `/root/vaultwarden-credentials.txt` auf Proxmox-Host |
| + | | Disk | 8 GB | |
| + | | Extern | `https://pw.ls-cloud.biz` | |
| + | | Intern | `http://192.168.178.91:8080` | |
| - | ## Bitwarden-Client verbinden |
| + | ## Operative Hinweise |
| - | 1. Bitwarden Browser Extension → Einstellungen → Server-URL |
| - | 2. Eintragen: `https://pw.ls-cloud.biz` |
| - | 3. Account anlegen / einloggen |
| + | - Caddy zeigt `pw.ls-cloud.biz` auf **`192.168.178.91:8080`** |
| + | - Der Dienst ist Teil der aktuellen öffentlichen Domain-Matrix |
| + | - Keine Zugangsdaten in der Wiki pflegen; nur Pfade und Zuständigkeiten dokumentieren |
| - | ## Update-Prozedur |
| + | ## Prüfung |
| ```bash | |
| - | # In CT 121 als root |
| - | # 1. Neues Binary kompilieren (oder Binary von inoffiziellem Spiegel) |
| - | # 2. Service stoppen |
| - | systemctl stop vaultwarden |
| - | # 3. Binary ersetzen |
| - | cp new_vaultwarden /opt/vaultwarden/vaultwarden |
| - | # 4. Service starten |
| - | systemctl start vaultwarden |
| + | pct status 121 |
| + | curl -k -I https://pw.ls-cloud.biz |
| + | pct exec 121 -- systemctl status vaultwarden |
| ``` | |
| /dev/null .. ct-122-karakeep.md | |
| @@ 0,0 1,72 @@ | |
| + | # CT 122 – Karakeep |
| + | |
| + | > [!NOTE] |
| + | > CT 122 hostet **Karakeep** als selbst gehosteten Bookmark-/Hoarding-Dienst. Der Aufbau folgt dem offiziellen Docker-/Compose-Weg aus der Karakeep-Doku. |
| + | |
| + | ## Basisdaten |
| + | |
| + | | Eigenschaft | Wert | |
| + | |---|---| |
| + | | **CT-ID** | `122` | |
| + | | **Name** | `karakeep` | |
| + | | **IP** | `192.168.178.92` | |
| + | | **OS** | Debian 13 | |
| + | | **App-URL** | `https://keep.ls-cloud.biz` | |
| + | | **Interner Web-Port** | `3000/tcp` | |
| + | | **Compose-Pfad** | `/opt/karakeep/docker-compose.yml` | |
| + | | **Env-Datei** | `/opt/karakeep/.env` | |
| + | |
| + | ## Offizieller Installationsweg |
| + | |
| + | Karakeep wurde nach der offiziellen Docker-Doku aufgesetzt: |
| + | - offizielles `docker-compose.yml` |
| + | - `.env` mit mindestens: |
| + | - `KARAKEEP_VERSION` |
| + | - `NEXTAUTH_SECRET` |
| + | - `MEILI_MASTER_KEY` |
| + | - `NEXTAUTH_URL` |
| + | |
| + | ## Dienste im Stack |
| + | |
| + | | Dienst | Zweck | |
| + | |---|---| |
| + | | `web` | Karakeep-Webanwendung | |
| + | | `chrome` | Headless Chrome für Archivierung / Rendering | |
| + | | `meilisearch` | Suche / Index | |
| + | |
| + | ## Relevante Dateien |
| + | |
| + | | Pfad | Zweck | |
| + | |---|---| |
| + | | `/opt/karakeep/docker-compose.yml` | offizieller Compose-Stack | |
| + | | `/opt/karakeep/.env` | Version / Secrets / URL | |
| + | |
| + | ## Operative Hinweise |
| + | |
| + | - Karakeep lauscht intern auf **Port `3000`** |
| + | - Caddy zeigt `keep.ls-cloud.biz` auf **`192.168.178.92:3000`** |
| + | - Wenn das Frontend noch nicht sauber über HTTPS kommt, zuerst Caddy-/TLS-Lage und den Containerstatus prüfen |
| + | |
| + | ## Prüfung |
| + | |
| + | ```bash |
| + | pct status 122 |
| + | pct exec 122 -- bash -lc "cd /opt/karakeep && docker compose ps" |
| + | pct exec 122 -- bash -lc "cd /opt/karakeep && docker compose logs --tail=100" |
| + | curl -I http://192.168.178.92:3000 |
| + | curl -k -I https://keep.ls-cloud.biz |
| + | ``` |
| + | |
| + | ## Update |
| + | |
| + | Wenn `KARAKEEP_VERSION=release` genutzt wird: |
| + | |
| + | ```bash |
| + | pct exec 122 -- bash -lc "cd /opt/karakeep && docker compose up --pull always -d" |
| + | ``` |
| + | |
| + | Wenn auf eine feste Version gepinnt wird, zuerst `.env` anpassen und dann: |
| + | |
| + | ```bash |
| + | pct exec 122 -- bash -lc "cd /opt/karakeep && docker compose up -d" |
| + | ``` |
| /dev/null .. ct-126-tdarr.md | |
| @@ 0,0 1,82 @@ | |
| + | # CT 126 – Tdarr |
| + | |
| + | > [!NOTE] |
| + | > CT 126 bündelt den automatischen Medien-Transcoder Tdarr mit Intel QSV GPU-Beschleunigung. |
| + | |
| + | ## Basisdaten |
| + | |
| + | - **CT-ID:** `126` |
| + | - **Name:** `tdarr` |
| + | - **IP:** `192.168.178.73` |
| + | - **OS:** Debian 12, 4 vCPU, 4 GB RAM, 20 GB SSD (local-lvm) |
| + | |
| + | ## Öffentliche Domain |
| + | |
| + | - `https://transcode.ls-cloud.biz` |
| + | |
| + | ## Relevante Ports |
| + | |
| + | ```text |
| + | 8265 Tdarr Web-UI |
| + | 8266 Tdarr Server (intern) |
| + | ``` |
| + | |
| + | ## Setup |
| + | |
| + | Tdarr läuft als Docker Container (privileged) mit GPU-Passthrough: |
| + | |
| + | ```text |
| + | /dev/dri/renderD128 Intel Iris Xe renderD (QSV/VAAPI) |
| + | /dev/dri/card1 Intel Iris Xe card |
| + | ``` |
| + | |
| + | **Compose:** `/opt/tdarr/compose.yml` |
| + | |
| + | ```bash |
| + | cd /opt/tdarr && docker compose up -d |
| + | ``` |
| + | |
| + | ## Mounts |
| + | |
| + | | Host (Proxmox) | Im CT | Im Container | |
| + | |---|---|---| |
| + | | `/mnt/storage/fileserver/media` | `/mnt/media` | `/media` | |
| + | | `/mnt/storage/fileserver/tdarr-cache` | `/mnt/tdarr-cache` | `/temp` | |
| + | |
| + | ## Konfiguration |
| + | |
| + | - **Library:** `4NDShul-F` — Ordner `/media`, folderWatching aktiv |
| + | - **Flow:** `hevc-qsv-flow` — checkVideoCodec → ffmpegCommandStart → SetVideoEncoder(hevc_qsv) → SetContainer(mkv) → Execute → replaceOriginalFile |
| + | - **Worker-Limits:** transcodegpu=2, transcodecpu=1, healthcheckcpu=1 |
| + | - **Node:** `lscloud-tdarr` (ID: `azQaGhE8F`) |
| + | |
| + | ## GPU-Encoder (bestätigt funktionsfähig) |
| + | |
| + | ``` |
| + | hevc_qsv Intel QSV Hardware-Encoder ✓ |
| + | hevc_vaapi Intel VAAPI Hardware-Encoder ✓ |
| + | ``` |
| + | |
| + | ## Prüfung |
| + | |
| + | ```bash |
| + | pct status 126 |
| + | # Transcode-Queue anzeigen: |
| + | curl http://192.168.178.73:8265/api/v2/is-server-alive |
| + | # ffmpeg-Prozesse: |
| + | pct exec 126 -- docker exec tdarr ps aux | grep ffmpeg |
| + | ``` |
| + | |
| + | ## Datenbank |
| + | |
| + | SQLite-DB im Container: `/app/server/Tdarr/DB2/SQL/database.db` |
| + | Tabellen: `flowsjsondb`, `librarysettingsjsondb`, `nodejsondb`, `filejsondb` |
| + | Spalten (alle DB-Tabellen): `id TEXT (PK)`, `timestamp INTEGER`, `json_data TEXT` |
| + | |
| + | Scan manuell triggern: |
| + | |
| + | ```bash |
| + | curl -s -X POST http://192.168.178.73:8265/api/v2/scan-files \ |
| + | -H 'Content-Type: application/json' \ |
| + | -d '{"data":{"scanConfig":{"dbID":"4NDShul-F","mode":"scanFresh","arrayOrPath":"/media"}}}' |
| + | ``` |
| /dev/null .. ct-127-monitoring.md | |
| @@ 0,0 1,48 @@ | |
| + | # CT 127 – Security Monitoring |
| + | |
| + | > [!NOTE] |
| + | > CT 127 stellt den internen Log- und Monitoring-Stack bereit: Grafana, Loki, Promtail. |
| + | |
| + | ## Basisdaten |
| + | |
| + | | Eigenschaft | Wert | |
| + | |---|---| |
| + | | **CT-ID** | `127` | |
| + | | **Name** | `security-monitoring` | |
| + | | **OS** | Debian 12 | |
| + | | **Docker-Compose** | `/opt/security-monitoring/docker-compose.yml` | |
| + | | **Kein oeffentlicher Caddy-Eintrag** | — | |
| + | |
| + | ## Technischer Aufbau |
| + | |
| + | - Container: `grafana` (grafana/grafana:13.0.1) — Dashboard, Port 3000 |
| + | - Container: `loki` (grafana/loki:3.7.2) — Log-Aggregation, Port 3100 |
| + | - Container: `promtail` (grafana/promtail:3.6.11) — Log-Shipper |
| + | |
| + | ## Versions-Stand (2026-05-28) |
| + | |
| + | | Dienst | Version | |
| + | |---|---| |
| + | | Grafana | 13.0.1 | |
| + | | Loki | 3.7.2 | |
| + | | Promtail | 3.6.11 | |
| + | |
| + | ## Zugriff |
| + | |
| + | - Grafana intern: `http://192.168.178.87:3000` — kein oeffentlicher Caddy-Eintrag |
| + | - Admin-Credentials in `/opt/security-monitoring/docker-compose.yml` |
| + | |
| + | ## Hinweise |
| + | |
| + | > [!IMPORTANT] |
| + | > CT 127 hat altes Docker (20.10.x) ohne eingebautes Compose-Plugin. |
| + | > Docker Compose v2.35.1 wurde manuell installiert: |
| + | > `/usr/local/lib/docker/cli-plugins/docker-compose` |
| + | |
| + | ## Update-Verfahren |
| + | |
| + | ```bash |
| + | pct exec 127 -- bash -c 'cd /opt/security-monitoring && docker compose pull && docker compose up -d' |
| + | ``` |
| + | |
| + | Achtung: Promtail hat eigenes Versions-Schema (max. 3.6.x), nicht identisch mit Loki 3.7.x. |
| home.md .. | |
| @@ 6,23 6,30 @@ | |
| | CT | Name | IP | Beschreibung | Wiki | | |
| |----|------|----|--------------|------| | |
| - | | 101 | jellyfin | 192.168.178.55 | Jellyfin Mediaserver | — | |
| + | | 101 | jellyfin | 192.168.178.55 | Jellyfin Mediaserver 10.11.10 | — | |
| | 102 | pbs | 192.168.178.60 | Proxmox Backup Server | [[ct-102-pbs]] | | |
| - | | 103 | fileserver | 192.168.178.61 | Filebrowser | — | |
| - | | 104 | immich | 192.168.178.62 | Immich Fotoverwaltung | [[ct-104-immich]] | |
| - | | 105 | downloads | 192.168.178.63 | qBittorrent, SABnzbd, Prowlarr | [[ct-105-downloads]] | |
| - | | 108 | wiki | 192.168.178.77 | OtterWiki (diese Seite) | — | |
| + | | 103 | fileserver | 192.168.178.61 | Filebrowser v2.63.5 | [[ct-103-fileserver]] | |
| + | | 104 | immich | 192.168.178.62 | Immich v2.7.4 Fotoverwaltung | [[ct-104-immich]] | |
| + | | 105 | downloads | 192.168.178.63 | qBittorrent, SABnzbd, Sonarr, Radarr, Prowlarr, Jellyseerr | [[ct-105-downloads]] | |
| + | | 108 | wiki | 192.168.178.77 | OtterWiki (diese Seite) | [[ct-108-wiki]] | |
| | 109 | claw | 192.168.178.75 | OpenClaw Runtime / Agent-Kontext | — | | |
| - | | 112 | claude-code | 192.168.178.82 | Claude Code Terminal | — | |
| + | | 110 | termix | 192.168.178.95 | Termix 2.2.1 SSH/RDP/VNC Serververwaltung | [[ct-110-termix]] | |
| + | | 111 | webserver | 192.168.178.79 | Webserver | — | |
| + | | 112 | claude-code | 192.168.178.82 | Claude Code Terminal (shellinabox) | — | |
| | 113 | authelia | 192.168.178.64 | Zentrale Auth-/2FA-Schicht | [[ct-113-authelia]] | | |
| - | | 114 | games | 192.168.178.84 | EmulatorJS Retro-Games | — | |
| - | | 115 | local-ai | 192.168.178.85 | Local AI | — | |
| - | | 117 | technitium-dns | 192.168.178.87 | Technitium DNS Server | — | |
| + | | 117 | technitium-dns | 192.168.178.87 | Technitium DNS v15.2.0 | [[ct-117-technitium-dns]] | |
| | 118 | paperclipai | 192.168.178.88 | PaperclipAI Multi-Agent | [[ct-118-paperclipai]] | | |
| - | | 119 | azeroth | 192.168.178.89 | AzerothCore WoW Realm (WotLK) | [[ct-119-azerothcore]] | |
| - | | 120 | dashboard | 192.168.178.90 | Homepage Dashboard | — | |
| - | | 121 | vaultwarden | 192.168.178.91 | Vaultwarden Passwoerter | — | |
| + | | 119 | azeroth | 192.168.178.89 | AzerothCore WoW Realm (gestoppt) | [[ct-119-azerothcore]] | |
| + | | 121 | vaultwarden | 192.168.178.91 | Vaultwarden 1.35.4 Passwoerter | [[ct-121-vaultwarden]] | |
| + | | 122 | karakeep | 192.168.178.92 | Karakeep Lesezeichen | [[ct-122-karakeep]] | |
| | 123 | cs16 | 192.168.178.93 | CS 1.6 Web-Server | [[ct-123-cs16]] | | |
| + | | 124 | homarr | 192.168.178.94 | Homarr v0.16.0 Dashboard | — | |
| + | | 125 | norish | 192.168.178.96 | Norish Rezept-App | — | |
| + | | 126 | tdarr | 192.168.178.73 | Tdarr Medien-Transcoder (Intel QSV) | [[ct-126-tdarr]] | |
| + | | 127 | security-monitoring | intern | Grafana 13.0.1 + Loki 3.7.2 + Promtail (Docker) | [[ct-127-monitoring]] | |
| + | | 128 | bot | 192.168.178.97 | Freqtrade MrXScalper Trading Bot | [[ct-128-bot]] | |
| + | | 129 | burningnotes | 192.168.178.98 | BurningNotes (nginx+PHP+MariaDB) | — | |
| + | | 130 | lstools | 192.168.178.99 | URL-Shortener + BurningNotes Suite | — | |
| ## Oeffentliche Domains | |
| @@ 33,33 40,52 @@ | |
| | `stream.ls-cloud.biz` | Jellyfin | CT 101 | | |
| | `fotos.ls-cloud.biz` | Immich | CT 104 | | |
| | `files.ls-cloud.biz` | Filebrowser | CT 103 | | |
| - | | `qbit.ls-cloud.biz` | qBittorrent | CT 105 | |
| + | | `requests.ls-cloud.biz` | Jellyseerr | CT 105 | |
| | `wiki.ls-cloud.biz` | OtterWiki | CT 108 | | |
| + | | `terminal.ls-cloud.biz` | Shell In A Box | CT 112 | |
| + | | `auth.ls-cloud.biz` | Authelia Portal | CT 113 | |
| | `dns.ls-cloud.biz` | Technitium DNS | CT 117 | | |
| - | | `games.ls-cloud.biz` | EmulatorJS | CT 114 | |
| - | | `panel.ls-cloud.biz` | WoW Webpanel / Altpfad | CT 119 | |
| - | | `pw.ls-cloud.biz` | Vaultwarden | CT 121 | |
| | `agent.ls-cloud.biz` | PaperclipAI | CT 118 | | |
| - | | `auth.ls-cloud.biz` | Authelia Portal | CT 113 | |
| + | | `pw.ls-cloud.biz` | Vaultwarden | CT 121 | |
| | `keep.ls-cloud.biz` | Karakeep | CT 122 | | |
| | `cs.ls-cloud.biz` | CS 1.6 Web-Client | CT 123 | | |
| + | | `ls-cloud.biz` | Homarr Dashboard | CT 124 | |
| + | | `www.ls-cloud.biz` | Redirect auf `ls-cloud.biz` | CT 124 | |
| + | | `termix.ls-cloud.biz` | Termix SSH/RDP/VNC | CT 110 | |
| + | | `norish.ls-cloud.biz` | Norish Rezept-App | CT 125 | |
| + | | `transcode.ls-cloud.biz` | Tdarr Transcoder | CT 126 | |
| + | | `bot.ls-cloud.biz` | Freqtrade Dashboard | CT 128 | |
| + | | `note.ls-cloud.biz` | BurningNotes | CT 129 | |
| + | | `sh0rt.biz` | URL-Shortener | CT 130 | |
| + | | `priv.sh0rt.biz` | BurningNotes (sh0rt.biz) | CT 130 | |
| + | | `panel.ls-cloud.biz` | WoW Webpanel (gestoppt) | CT 119 | |
| + | | `games.ls-cloud.biz` | EmulatorJS (gestoppt) | CT 114 | |
| ## Detailseiten | |
| - | - [[lscloud-inventur]] — Host-Inventur |
| - | - [[ct-119-azerothcore]] — AzerothCore WoW Server (CT 119) |
| - | - [[ct-102-pbs]] — Proxmox Backup Server |
| - | - [[ct-104-immich]] — Immich |
| - | - [[ct-105-downloads]] — Downloads |
| - | |
| - | - [[ct-117-technitium-dns]] — Technitium DNS |
| - | - [[ct-118-paperclipai]] — PaperclipAI |
| - | - [[ct-121-vaultwarden]] — Vaultwarden |
| - | - [[services-uebersicht]] — Service-Matrix |
| - | - [[netz-und-domains]] — Domains und Ziele |
| - | - [[container-und-vms]] — Laufende und gestoppte Systeme |
| - | |
| - | - [[ct-113-authelia]] — Authelia |
| + | - [[lscloud-inventur]] |
| + | - [[services-uebersicht]] |
| + | - [[netz-und-domains]] |
| + | - [[container-und-vms]] |
| + | - [[infrastruktur-uebersicht]] |
| + | - [[operativer-einstieg]] |
| + | - [[runbooks]] |
| + | - [[storage-und-mounts]] |
| + | - [[ct-102-pbs]] |
| + | - [[ct-103-fileserver]] |
| + | - [[ct-104-immich]] |
| + | - [[ct-105-downloads]] |
| + | - [[ct-108-wiki]] |
| + | - [[ct-110-termix]] |
| + | - [[ct-113-authelia]] |
| + | - [[ct-117-technitium-dns]] |
| + | - [[ct-118-paperclipai]] |
| + | - [[ct-119-azerothcore]] |
| + | - [[ct-121-vaultwarden]] |
| + | - [[ct-122-karakeep]] |
| + | - [[ct-123-cs16]] |
| + | - [[ct-126-tdarr]] |
| + | - [[ct-127-monitoring]] |
| + | - [[ct-128-bot]] |
| - | - [[ct-122-karakeep]] — Karakeep |
| - | - [[ct-123-cs16]] — CS 1.6 Web-Server |
| + | > Letztes Update: 2026-05-28 — Mass-Update aller Dienste |
| infrastruktur-uebersicht.md .. | |
| @@ 1,80 1,38 @@ | |
| - | # Infrastruktur-Übersicht |
| + | # Infrastruktur-Uebersicht |
| > [!NOTE] | |
| - | > Diese Seite ist die schnelle Einordnung für `lscloud`: Was ist Kern, was hängt woran, und welche Systeme sind operativ wirklich wichtig? |
| + | > Diese Seite ist die schnelle Einordnung fuer `lscloud`: Was ist Kern, was haengt woran, und welche Systeme sind operativ wirklich wichtig? |
| ## Betriebsbild | |
| | Bereich | Systeme | Bedeutung | | |
| |---|---|---| | |
| - | | Core | Host, Caddy, CT 108 `wiki`, CT 109 `claw` | Fundament für Zugriff, Doku und Agent-Kontext | |
| - | | Medien | CT 101 `jellyfin`, CT 103 `fileserver`, CT 104 `immich`, CT 105 `downloads` | Inhalte, Bibliotheken, Datenflüsse | |
| - | | Spezialdienste | CT 112 `claude-code`, CT 114 `games` | Webterminal, Games/EmulatorJS | |
| - | | Nebenobjekte | CT 100 `guacamole`, CT 107 `monitoring`, VM 200 `Windows11Pro` | situativ wichtig, aber bewusst Teil des Setups | |
| - | |
| - | ## Gesamtbild |
| - | |
| - | ```mermaid |
| - | flowchart LR |
| - | classDef ingress fill:#0f172a,stroke:#64748b,color:#f8fafc; |
| - | classDef core fill:#1e293b,stroke:#94a3b8,color:#f8fafc; |
| - | classDef svc fill:#1f2937,stroke:#6b7280,color:#f9fafb; |
| - | classDef spec fill:#312e81,stroke:#818cf8,color:#eef2ff; |
| - | classDef aux fill:#3f3f46,stroke:#a1a1aa,color:#fafafa; |
| - | |
| - | Internet[Internet / externe Clients]:::ingress --> Caddy[Caddy auf lscloud]:::ingress |
| - | |
| - | subgraph Core[Core-Dienste] |
| - | Admin[Host Admin / Proxmox]:::core |
| - | Wiki[CT 108 Wiki]:::core |
| - | Claw[CT 109 Claw]:::core |
| - | end |
| - | |
| - | subgraph Media[Medien & Daten] |
| - | Files[CT 103 Fileserver]:::svc |
| - | Jelly[CT 101 Jellyfin]:::svc |
| - | Immich[CT 104 Immich]:::svc |
| - | Downloads[CT 105 Downloads]:::svc |
| - | Web[CT 111 Webserver]:::svc |
| - | end |
| - | |
| - | subgraph Special[Spezialdienste] |
| - | Terminal[CT 112 Terminal]:::spec |
| - | Games[CT 114 Games]:::spec |
| - | end |
| - | |
| - | subgraph Other[Nebenobjekte] |
| - | Guac[CT 100 Guacamole]:::aux |
| - | Mon[CT 107 Monitoring]:::aux |
| - | Win[VM 200 Windows11]:::aux |
| - | end |
| - | |
| - | Caddy --> Admin |
| - | Caddy --> Wiki |
| - | Caddy --> Files |
| - | Caddy --> Jelly |
| - | Caddy --> Immich |
| - | Caddy --> Downloads |
| - | Caddy --> Web |
| - | Caddy --> Terminal |
| - | Caddy --> Games |
| - | Caddy --> Guac |
| - | Claw -. Agenten-/OpenClaw-Kontext .-> Wiki |
| - | Win -. Monitoring-Pfad .-> Mon |
| - | ``` |
| + | | Core | Host, Caddy, CT 108 `wiki`, CT 109 `claw`, CT 113 `authelia` | Fundament fuer Zugriff, Doku, Agent-Kontext und zentrale Auth | |
| + | | Medien | CT 101 `jellyfin`, CT 103 `fileserver`, CT 104 `immich`, CT 105 `downloads`, CT 111 `webserver` | Inhalte, Bibliotheken, Datenfluesse | |
| + | | Produktiv-nahe Webdienste | CT 110 `termix`, CT 118 `paperclipai`, CT 121 `vaultwarden`, CT 122 `karakeep`, CT 124 `homarr`, CT 125 `norish` | aktiv genutzte Oberflaechen und Dienste | |
| + | | Situative / Altlasten | CT 107 `monitoring`, CT 114 `games`, CT 119 `azeroth`, verwaiste Caddy-Ziele wie `ai` oder `octobot` | nach Aufraeumarbeiten besonders pruefpflichtig | |
| ## Operative Lesart | |
| > [!TIP] | |
| - | > Wenn du öffentlich ein Problem siehst, beginne meist bei **Caddy**, dann beim **Zielsystem**, dann beim **Dienst im Zielsystem**. |
| + | > Wenn du oeffentlich ein Problem siehst, beginne meist bei **Caddy**, dann beim **Zielsystem**, dann beim **Dienst im Zielsystem**. |
| > [!IMPORTANT] | |
| > CT 109 ist der relevante OpenClaw-/Agent-Kontext. CT 112 ist aktuell eher Webterminal-/Claude-Code-Umfeld und nicht einfach als alte Jarvis-Phase zu lesen. | |
| > [!WARNING] | |
| - | > Gestoppte Systeme können in der öffentlichen Wahrnehmung trotzdem Fehler auslösen, wenn Caddy noch aktiv auf sie zeigt. |
| + | > Nach dem Aufraeumen sind vor allem Eintraege verdachtig, die noch in Caddy stehen, aber kein sichtbares Zielsystem mehr in `pct list` haben. |
| + | |
| + | ## Auffaellige Punkte per 2026-04-22 |
| + | |
| + | - **CT 124 `homarr`** ist der aktuelle Dashboard-Host hinter `ls-cloud.biz`. |
| + | - **CT 125 `norish`** ist neu aktiv und ueber `norish.ls-cloud.biz` erreichbar. |
| + | - **CT 115 `local-ai`** und **CT 120 `dashboard`** tauchen in der aktuellen Proxmox-Liste nicht mehr auf. |
| + | - `ai.ls-cloud.biz` ist nach Live-Pruefung die klarste Altlast: Ziel `192.168.178.85:3000` ist vom Host nicht erreichbar, CT 115 taucht nicht mehr in `pct list` auf, extern kommt `502`. |
| + | - `octobot.ls-cloud.biz` ist kein reiner Phantomeintrag, weil Authelia sauber antwortet. Das eigentliche Backend `192.168.178.93:5001` ist aber geschlossen; die IP gehoert aktuell zu CT 123 `cs16`, also passt die Zuordnung erkennbar nicht mehr sauber zur heutigen Lage. |
| + | - `panel.ls-cloud.biz`, `games.ls-cloud.biz` und `net.ls-cloud.biz` zeigen aktuell auf bewusst gestoppte CTs. Das ist hier nicht automatisch ein Fehler, sondern eher eine Frage, ob die oeffentlichen Eintraege waehrend der Pause bestehen bleiben sollen. |
| - | ## Weiterführende Seiten |
| + | ## Weiterfuehrende Seiten |
| - [[services-uebersicht]] | |
| - [[netz-und-domains]] | |
| netz-und-domains.md .. | |
| @@ 1,7 1,7 @@ | |
| # Netz & Domains | |
| > [!NOTE] | |
| - | > Diese Seite beantwortet zwei praktische Fragen: Welche Adresse gehört wozu — und welche Domain zeigt am Ende wohin? |
| + | > Diese Seite beantwortet zwei praktische Fragen: Welche Adresse gehoert wozu, und welche Domain zeigt am Ende wohin? |
| ## Kernadressen | |
| @@ 12,13 12,16 @@ | |
| | Wiki | `192.168.178.77` | CT 108 | | |
| | Claw / OpenClaw | `192.168.178.75` | CT 109 | | |
| | Claude-Code / Terminal | `192.168.178.82` | CT 112 | | |
| + | | Termix | `192.168.178.95` | CT 110 | |
| + | | Homarr | `192.168.178.94` | CT 124 | |
| + | | Norish | `192.168.178.96` | CT 125 | |
| | Games | `192.168.178.84` | CT 114 | | |
| ## Domain-Matrix | |
| | Domain | Ziel | Zweck | | |
| |---|---|---| | |
| - | | `admin.ls-cloud.biz` | Host / Proxmox | Adminoberfläche | |
| + | | `admin.ls-cloud.biz` | Host / Proxmox | Adminoberflaeche | |
| | `backup.ls-cloud.biz` | CT 102 | Proxmox Backup Server | | |
| | `wiki.ls-cloud.biz` | CT 108 | Infrastruktur-Wiki | | |
| | `files.ls-cloud.biz` | CT 103 | Filebrowser | | |
| @@ 29,28 32,34 @@ | |
| | `dl.ls-cloud.biz` | CT 105 | Prowlarr | | |
| | `dns.ls-cloud.biz` | CT 117 | Technitium DNS | | |
| | `pw.ls-cloud.biz` | CT 121 | Vaultwarden | | |
| - | | `agent.ls-cloud.biz` | CT 118 | PaperclipAI | |
| + | | `agent.ls-cloud.biz` | CT 118 | Paperclip / Agent-Plattform (via Authelia) | |
| | `auth.ls-cloud.biz` | CT 113 | Authelia Portal | | |
| | `keep.ls-cloud.biz` | CT 122 | Karakeep | | |
| - | | `ai.ls-cloud.biz` | CT 115 | Local AI | |
| + | | `ai.ls-cloud.biz` | kein aktiver CT mehr sichtbar | verwaister Local-AI-Eintrag, aktuell `502` | |
| | `terminal.ls-cloud.biz` | CT 112 | Webterminal | | |
| | `games.ls-cloud.biz` | CT 114 | Games / EmulatorJS | | |
| | `web.ls-cloud.biz` | CT 111 | Webserver | | |
| | `net.ls-cloud.biz` | CT 107 | Monitoring / ntopng | | |
| - | | `live.ls-cloud.biz` | CT 100 | Guacamole | |
| | `panel.ls-cloud.biz` | CT 119 | WoW Webpanel / Altpfad | | |
| + | | `ls-cloud.biz` | CT 124 | Homarr Dashboard | |
| + | | `www.ls-cloud.biz` | Redirect auf `ls-cloud.biz` | WWW-Redirect | |
| | `cs.ls-cloud.biz` | CT 123 | CS 1.6 Webclient | | |
| + | | `termix.ls-cloud.biz` | CT 110 | Termix Serververwaltung mit SSH und RDP (via Authelia) | |
| + | | `norish.ls-cloud.biz` | CT 125 | Norish Rezept-App | |
| + | | `octobot.ls-cloud.biz` | Ziel-IP von CT 123, Port 5001 aber zu | Zuordnung unklar, derzeit nur Authelia-Redirect sichtbar | |
| {{DataTable}} | |
| ## Einordnung | |
| > [!TIP] | |
| - | > Für Außenwirkung ist diese Seite die schnellste Wahrheit: Domain → Ziel → Zweck. |
| + | > Fuer Aussenwirkung ist diese Seite die schnellste Wahrheit: Domain → Ziel → Zweck. |
| + | ## Merksaetze |
| - | ## Merksätze |
| - | |
| - | - Neue Domains immer gegen **Caddy**, **Backend-Port** und **Dienststatus** prüfen. |
| - | - Öffentliche Fehlerbilder sind oft schlichter, als sie aussehen: gestoppter CT, falscher Port, kaputter Backend-Dienst. |
| + | - Neue Domains immer gegen **Caddy**, **Backend-Port** und **Dienststatus** pruefen. |
| + | - Oeffentliche Fehlerbilder sind oft schlichter, als sie aussehen: gestoppter CT, falscher Port, kaputter Backend-Dienst. |
| - `terminal.ls-cloud.biz` ist ein Webterminal, kein klassischer Webdienst. | |
| + | - `termix.ls-cloud.biz` ist ueber Authelia vorgeschaltet und zeigt auf CT 110 `:8080`. |
| + | - `norish.ls-cloud.biz` zeigt auf CT 125 `:3000`. |
| + | - `ls-cloud.biz` wird aktuell von **CT 124 `homarr`** ausgeliefert. |
| operativer-einstieg.md .. | |
| @@ 38,3 38,9 @@ | |
| |toc=false | |
| |toggle=false | |
| }} | |
| + | |
| + | |
| + | ## Auth-Schicht |
| + | |
| + | - Für vorgeschaltete Login-/2FA-Themen siehe [[ct-113-authelia]]. |
| + | - Wenn Codes oder Bestätigungen angeblich nicht ankommen, zuerst `notification.txt` prüfen. |
| runbooks.md .. | |
| @@ 95,3 95,12 @@ | |
| ## tmux | |
| - [[tmux]] | |
| + | |
| + | |
| + | ## Authelia – Schnellchecks |
| + | |
| + | ```bash |
| + | pct status 113 |
| + | pct exec 113 -- bash -lc "cd /opt/authelia && docker compose -f compose.yml ps" |
| + | pct exec 113 -- tail -60 /opt/authelia/config/notification.txt |
| + | ``` |
| services-uebersicht.md .. | |
| @@ 1,7 1,9 @@ | |
| # Services & Domains auf `lscloud` | |
| + | Stand: 2026-05-28 |
| + | |
| > [!NOTE] | |
| - | > Diese Seite ist als operative Service-Matrix gedacht. Sortieren, suchen und querlesen soll hier schneller gehen als Rätselraten. |
| + | > Diese Seite ist als operative Service-Matrix gedacht. |
| ## Service-Matrix | |
| @@ 9,32 11,31 @@ | |
| |---|---|---|---|---| | |
| | `admin.ls-cloud.biz` | `https://localhost:8006` | Host `lscloud` | Proxmox Web UI | erreichbar | | |
| | `backup.ls-cloud.biz` | `https://192.168.178.60:8007` | CT 102 `pbs` | Proxmox Backup Server | erreichbar | | |
| - | | `files.ls-cloud.biz` | `192.168.178.61:8080` | CT 103 `fileserver` | Filebrowser | erreichbar | |
| - | | `stream.ls-cloud.biz` | `192.168.178.55:8096` | CT 101 `jellyfin` | Jellyfin | erreichbar | |
| - | | `fotos.ls-cloud.biz` | `192.168.178.62:2283` | CT 104 `immich` | Immich | erreichbar | |
| - | | `qbit.ls-cloud.biz` | `192.168.178.63:8081` | CT 105 `downloads` | qBittorrent | situativ | |
| - | | `usenet.ls-cloud.biz` | `192.168.178.63:8082` | CT 105 `downloads` | SABnzbd | situativ | |
| - | | `dl.ls-cloud.biz` | `192.168.178.63:9696` | CT 105 `downloads` | Prowlarr | situativ | |
| - | | `requests.ls-cloud.biz` | `192.168.178.63:5055` | CT 105 `downloads` | Jellyseerr Anfragen-Portal | erreichbar | |
| - | | `net.ls-cloud.biz` | `192.168.178.72:3000` | CT 107 `monitoring` | ntopng / Monitoring | bewusst gestoppt / bei Bedarf aktivierbar | |
| + | | `files.ls-cloud.biz` | `192.168.178.61:8080` | CT 103 `fileserver` | Filebrowser v2.63.5 | erreichbar | |
| + | | `stream.ls-cloud.biz` | `192.168.178.55:8096` | CT 101 `jellyfin` | Jellyfin 10.11.10 | erreichbar | |
| + | | `fotos.ls-cloud.biz` | `192.168.178.62:2283` | CT 104 `immich` | Immich v2.7.4 | erreichbar | |
| + | | `requests.ls-cloud.biz` | `192.168.178.63:5055` | CT 105 `downloads` | Jellyseerr 2.7.3 | erreichbar | |
| | `wiki.ls-cloud.biz` | `192.168.178.77:8080` | CT 108 `wiki` | OtterWiki | erreichbar | | |
| - | | `web.ls-cloud.biz` | `192.168.178.79:80` | CT 111 `webserver` | Webserver / Webspace | erreichbar, solange CT 111 laeuft | |
| - | | `games.ls-cloud.biz` | `192.168.178.84:8080` | CT 114 `games` | Games / EmulatorJS-Webdienst | bewusst gestoppt / bei Bedarf aktivierbar | |
| - | | `terminal.ls-cloud.biz` | `192.168.178.82:7681` | CT 112 `claude-code` | Webterminal (Shell In A Box) | erreichbar | |
| - | | `agent.ls-cloud.biz` | `192.168.178.88:3101` | CT 118 `paperclipai` | PaperclipAI Multi-Agent Platform | via Authelia geschuetzt | |
| - | | `bot.ls-cloud.biz` | `192.168.178.97:5001` | CT 128 `bot` | Trading Bot Dashboard (Freqtrade) | via Authelia geschuetzt | |
| - | | `panel.ls-cloud.biz` | `192.168.178.89:80` | CT 119 `azeroth` | WoW Webpanel (FusionCMS) | bewusst gestoppt / bei Bedarf aktivierbar | |
| - | | `wow.ls-cloud.biz` | `192.168.178.89:8085` | CT 119 `azeroth` | AzerothCore WotLK Realm | bei Bedarf aktivierbar | |
| - | | `pw.ls-cloud.biz` | `192.168.178.91:8080` | CT 121 `vaultwarden` | Vaultwarden Passwortmanager | erreichbar | |
| - | | `ls-cloud.biz` | `192.168.178.94:7575` | CT 124 `homarr` | Homarr Dashboard | erreichbar | |
| - | | `www.ls-cloud.biz` | Redirect auf `ls-cloud.biz` | CT 124 `homarr` | WWW-Redirect | erreichbar | |
| - | | `dns.ls-cloud.biz` | `192.168.178.87:5380` | CT 117 `technitium-dns` | Technitium DNS Web UI | erreichbar | |
| + | | `termix.ls-cloud.biz` | `192.168.178.95:8080` | CT 110 `termix` | Termix 2.2.1 (SSH/RDP/VNC) | via Authelia geschuetzt | |
| + | | `web.ls-cloud.biz` | `192.168.178.79:80` | CT 111 `webserver` | Webserver | erreichbar | |
| + | | `terminal.ls-cloud.biz` | `192.168.178.82:7681` | CT 112 `claude-code` | shellinabox / Claude Code | erreichbar | |
| | `auth.ls-cloud.biz` | `192.168.178.64:9091` | CT 113 `authelia` | Authelia Portal | erreichbar | | |
| + | | `dns.ls-cloud.biz` | `192.168.178.87:5380` | CT 117 `technitium-dns` | Technitium DNS v15.2.0 | erreichbar | |
| + | | `agent.ls-cloud.biz` | `192.168.178.88:3101` | CT 118 `paperclipai` | PaperclipAI 2026.525.0 | via Authelia geschuetzt | |
| + | | `pw.ls-cloud.biz` | `192.168.178.91:8080` | CT 121 `vaultwarden` | Vaultwarden 1.35.4 | erreichbar | |
| | `keep.ls-cloud.biz` | `192.168.178.92:3000` | CT 122 `karakeep` | Karakeep | erreichbar | | |
| - | | `cs.ls-cloud.biz` | `192.168.178.93:27016` | CT 123 `cs16` | CS 1.6 Web-Client | erreichbar | |
| - | | `termix.ls-cloud.biz` | `192.168.178.95:8080` | CT 110 `termix` | Termix Web-basierte Serververwaltung mit SSH/RDP | via Authelia vorgeschaltet | |
| + | | `cs.ls-cloud.biz` | `192.168.178.93:80` | CT 123 `cs16` | CS 1.6 Web-Client | erreichbar | |
| + | | `ls-cloud.biz` | `192.168.178.94:7575` | CT 124 `homarr` | Homarr v0.16.0 | erreichbar | |
| + | | `www.ls-cloud.biz` | Redirect auf `ls-cloud.biz` | CT 124 | Redirect | erreichbar | |
| | `norish.ls-cloud.biz` | `192.168.178.96:3000` | CT 125 `norish` | Norish Rezept-App | erreichbar | | |
| - | | `transcode.ls-cloud.biz` | `192.168.178.73:8265` | CT 126 `tdarr` | Tdarr Medien-Transcoder (Intel QSV) | erreichbar | |
| + | | `transcode.ls-cloud.biz` | `192.168.178.73:8265` | CT 126 `tdarr` | Tdarr (Intel QSV) | erreichbar | |
| + | | `bot.ls-cloud.biz` | `192.168.178.97:5001` | CT 128 `bot` | Freqtrade MrXScalper Dashboard | via Authelia geschuetzt | |
| + | | `note.ls-cloud.biz` | `192.168.178.98:80` | CT 129 `burningnotes` | BurningNotes | erreichbar | |
| + | | `sh0rt.biz` | `192.168.178.99:80` | CT 130 `lstools` | URL-Shortener | erreichbar | |
| + | | `priv.sh0rt.biz` | `192.168.178.99:80` | CT 130 `lstools` | BurningNotes (sh0rt.biz) | erreichbar | |
| + | | `panel.ls-cloud.biz` | `192.168.178.89:80` | CT 119 `azeroth` | WoW Webpanel (FusionCMS) | bewusst gestoppt | |
| + | | `games.ls-cloud.biz` | `192.168.178.84:8080` | CT 114 `games` | EmulatorJS | bewusst gestoppt | |
| + | | `net.ls-cloud.biz` | `192.168.178.72:3000` | CT 107 `monitoring` | ntopng | bewusst gestoppt | |
| {{DataTable}} | |
| @@ 43,7 44,7 @@ | |
| > [!IMPORTANT] | |
| > Gestoppte Container erklaeren oft auch oeffentliche Fehlerbilder direkt. Erst Backend-Status pruefen, dann Caddy verdaechtigen. | |
| - | - `web.ls-cloud.biz` haengt am Zustand von **CT 111** |
| - | - `terminal.ls-cloud.biz` ist ein Webterminal, kein normaler Webdienst im klassischen Sinn |
| - | - `termix.ls-cloud.biz` ist mit Authelia vor dem Termix-Backend abgesichert |
| - | - **Nicht jeder gestoppte CT ist ein Fehlerbild**: `net`, `games` und `panel` koennen bewusst stillgelegt sein, um Ressourcen zu sparen. |
| + | - `termix.ls-cloud.biz` und `agent.ls-cloud.biz` sind mit Authelia vor dem Backend abgesichert |
| + | - `bot.ls-cloud.biz` ist Freqtrade-Dashboard (live Binance-Trading — vorsichtig) |
| + | - **CT 110** ist jetzt Termix (frueheres Pi-hole/DNS). DNS laeuft auf CT 117 Technitium. |
| + | - Nicht jeder gestoppte CT ist ein Fehlerbild: `net`, `games` und `panel` sind bewusst stillgelegt. |
| storage-und-mounts.md .. | |
| @@ 16,7 16,6 @@ | |
| | CT | Name | Rootfs | | |
| |---|---|---| | |
| - | | 100 | guacamole | `local-lvm:vm-100-disk-0,size=8G` | |
| | 101 | jellyfin | `local-lvm:vm-101-disk-0,size=16G` | | |
| | 102 | pbs | `local-lvm:vm-102-disk-0,size=50G` | | |
| | 103 | fileserver | `local-lvm:vm-103-disk-0,size=8G` | | |
| @@ 38,7 37,6 @@ | |
| | CT | Name | Host-Pfad | Ziel im CT | Art | Zweck | | |
| |---|---|---|---|---|---| | |
| - | | 100 | guacamole | `/dev/net/tun` | `dev/net/tun` | bind file | TUN-Device | |
| | 101 | jellyfin | `/mnt/storage/fileserver/media` | `srv/media` | bind dir | Medienbibliothek | | |
| | 102 | pbs | `/mnt/storage/pbs-datastore` | `mnt/datastore` | bind dir | Backup-Datastore | | |
| | 103 | fileserver | `/mnt/storage/fileserver` | `srv/storage` | bind dir | Dateidaten | | |
| vm-201-macos-sequoia.md .. | |
| @@ 1,189 1,19 @@ | |
| - | # VM 201 – macOS Sequoia (Hackintosh) |
| - | |
| - | Stand: April 2026 |
| - | |
| - | > [!NOTE] |
| - | > macOS Sequoia als KVM-VM auf Proxmox. Läuft über OpenCore-Bootloader mit SMBIOS-Spoofing – kein nativer Apple-Support, aber vollständig funktionsfähig inkl. iCloud. |
| - | |
| - | ## Basisdaten |
| - | |
| - | | Parameter | Wert | |
| - | |---|---| |
| - | | **VM-ID** | `201` | |
| - | | **Name** | `macos-sequoia` | |
| - | | **OS** | macOS Sequoia 15.6.1 (24G90) | |
| - | | **CPU** | `host` passthrough, 4 Cores | |
| - | | **RAM** | 8.192 MB | |
| - | | **Firmware** | OVMF (UEFI), kein Secure Boot | |
| - | | **Machine** | q35 | |
| - | | **Display** | VMware SVGA | |
| - | | **Netzwerk** | vmxnet3, DHCP | |
| - | |
| - | ## Disk-Übersicht |
| - | |
| - | | Slot | LVM-Volume | Inhalt | Größe | |
| - | |---|---|---|---| |
| - | | `efidisk0` | `vm-201-disk-0` | OVMF UEFI NVRAM | 4 MB | |
| - | | `sata0` | `vm-201-disk-1` | macOS BaseSystem (Recovery-Image) | 1,3 GB | |
| - | | `sata2` | `vm-201-disk-3` | Macintosh HD (macOS-Installation) | 100 GB | |
| - | | `sata3` | `vm-201-disk-2` | OpenCore v21 Bootloader (GPT-Disk) | 152 MB | |
| - | |
| - | **Boot-Reihenfolge:** `sata3` (OpenCore) → `sata0` (BaseSystem) → `sata2` (Macintosh HD) |
| - | |
| - | ## Bootloader – OpenCore |
| - | |
| - | - **Projekt:** [KVM-Opencore v21](https://github.com/thenickdude/KVM-Opencore) (REL-100, März 2024) |
| - | - **SMBIOS:** `iMacPro1,1` |
| - | - **SecureBootModel:** `j137` (T1-Chip-Simulation – für iCloud zwingend erforderlich) |
| - | - **ScanPolicy:** `0x0` (alle Disk-Typen) |
| + | # VM 201 – macOS Sequoia (Versuchsobjekt) |
| > [!WARNING] | |
| - | > Das OpenCore-„ISO" ist kein echtes ISO 9660, sondern ein **raw GPT-Disk-Image**. Es muss als **SATA-Disk** (nicht als CD-ROM) eingebunden werden – sonst findet OVMF keinen Bootloader. |
| + | > Diese Seite ist derzeit **kein Erfolgsbericht**, sondern nur ein Platzhalter für einen unvollständigen macOS-/Hackintosh-Versuch auf Proxmox. Die VM existiert aktuell zwar, aber die frühere Beschreibung als vollständig funktionsfähig ist für den jetzigen Stand nicht belastbar. |
| - | ## SMBIOS-Seriennummern (iCloud-fähig) |
| + | ## Aktueller Stand |
| | Feld | Wert | | |
| |---|---| | |
| - | | SystemSerialNumber | `C02YJRZXHX87` | |
| - | | MLB | `C02914310QXJG361M` | |
| - | | SystemUUID | `6B7D3ACC-FA73-4437-94ED-3CEF31EF773C` | |
| - | | ROM | `BC2411E13CD2` (= VM-MAC ohne Doppelpunkte) | |
| - | |
| - | ## OpenCore config.plist bearbeiten |
| - | |
| - | > [!IMPORTANT] |
| - | > Nur bei **gestoppter VM** durchführen. |
| - | |
| - | ```bash |
| - | qm stop 201 |
| - | mkdir -p /mnt/oc_efi |
| - | losetup -f --show -o $((40*512)) /dev/pve/vm-201-disk-2 # gibt /dev/loopX aus |
| - | mount /dev/loopX /mnt/oc_efi |
| - | nano /mnt/oc_efi/EFI/OC/config.plist |
| - | umount /mnt/oc_efi && losetup -d /dev/loopX |
| - | qm start 201 |
| - | ``` |
| - | |
| - | ## iCloud & Apple-Dienste |
| - | |
| - | | Dienst | Status | |
| - | |---|---| |
| - | | iCloud Drive, Fotos, Keychain | ✅ funktioniert | |
| - | | App Store | ✅ funktioniert | |
| - | | iMessage / FaceTime | ⚠️ manchmal blockiert – 24h warten, dann nochmal | |
| - | | Handoff, AirDrop, Sidecar | ❌ kein Bluetooth/WLAN in VM | |
| - | | GPU-Beschleunigung | ❌ kein Passthrough | |
| - | | Sleep / Standby | ❌ in macOS deaktivieren | |
| - | |
| - | **Troubleshooting „Prüfung fehlgeschlagen":** |
| - | 1. SecureBootModel muss `j137` sein (nicht `Disabled`) |
| - | 2. iPhone/iPad: Einstellungen → Apple-ID → Passwort & Sicherheit → Bestätigungsdialog? |
| - | 3. Nochmal versuchen oder kurz über anderen IP-Bereich (Hotspot) |
| - | |
| - | ## Neue SMBIOS-Seriennummern generieren |
| - | |
| - | ```bash |
| - | # macserial herunterladen (einmalig) |
| - | curl -L https://github.com/acidanthera/OpenCorePkg/releases/download/1.0.7/OpenCore-1.0.7-RELEASE.zip -o /tmp/oc.zip |
| - | unzip /tmp/oc.zip 'Utilities/macserial/macserial.linux' -d /tmp/oc/ |
| - | chmod +x /tmp/oc/Utilities/macserial/macserial.linux |
| - | |
| - | # 3 Seriennummern generieren, einen Satz auswählen |
| - | /tmp/oc/Utilities/macserial/macserial.linux -m iMacPro1,1 -n 3 |
| - | |
| - | # EFI mounten und patchen |
| - | qm stop 201 |
| - | losetup -f --show -o $((40*512)) /dev/pve/vm-201-disk-2 |
| - | mount /dev/loopX /mnt/oc_efi |
| - | |
| - | python3 << 'PYEOF' |
| - | import plistlib, uuid |
| - | with open('/mnt/oc_efi/EFI/OC/config.plist', 'rb') as f: |
| - | p = plistlib.load(f) |
| - | pi = p['PlatformInfo']['Generic'] |
| - | pi['SystemSerialNumber'] = 'NEUE_SERIAL' # ← anpassen |
| - | pi['MLB'] = 'NEUE_MLB' # ← anpassen |
| - | pi['SystemUUID'] = str(uuid.uuid4()).upper() |
| - | pi['ROM'] = bytes.fromhex('BC2411E13CD2') |
| - | with open('/mnt/oc_efi/EFI/OC/config.plist', 'wb') as f: |
| - | plistlib.dump(p, f) |
| - | print('Fertig:', pi['SystemSerialNumber']) |
| - | PYEOF |
| - | |
| - | umount /mnt/oc_efi && losetup -d /dev/loopX |
| - | qm start 201 |
| - | ``` |
| - | |
| - | --- |
| - | |
| - | ## VM vollständig entfernen (Rollback) |
| - | |
| - | > [!WARNING] |
| - | > Diese Schritte löschen die VM und **alle zugehörigen Daten unwiderruflich**. Kein Backup nötig, aber sicher sein. |
| - | |
| - | ### Schritt 1 – VM stoppen und vollständig löschen |
| - | |
| - | ```bash |
| - | qm stop 201 |
| - | qm destroy 201 --purge |
| - | ``` |
| - | |
| - | `--purge` entfernt automatisch alle LVM-Volumes: |
| - | - `vm-201-disk-0` (EFI NVRAM, 4 MB) |
| - | - `vm-201-disk-1` (BaseSystem, 1,3 GB) |
| - | - `vm-201-disk-2` (OpenCore, 152 MB) |
| - | - `vm-201-disk-3` (Macintosh HD, 100 GB) |
| - | - `/etc/pve/qemu-server/201.conf` |
| - | |
| - | ### Schritt 2 – Heruntergeladene Dateien entfernen |
| - | |
| - | ```bash |
| - | # OpenCore ISO aus local-Storage |
| - | rm -f /var/lib/vz/template/iso/OpenCore-v21.iso |
| - | |
| - | # BaseSystem-Dateien auf HDD (hdd5tb) |
| - | rm -f /mnt/storage/pve-data/iso/BaseSystem.dmg |
| - | rm -f /mnt/storage/pve-data/iso/BaseSystem.img |
| - | rm -f /mnt/storage/pve-data/iso/BaseSystem.chunklist |
| - | |
| - | # OSX-KVM Projektverzeichnis |
| - | rm -rf /opt/OSX-KVM |
| - | |
| - | # macserial / OpenCorePkg (falls vorhanden) |
| - | rm -rf /tmp/oc/ /tmp/oc.zip /tmp/oc107* /tmp/oc107.zip |
| - | ``` |
| - | |
| - | ### Schritt 3 – Optionale Aufräumarbeiten |
| - | |
| - | ```bash |
| - | # Mount-Verzeichnisse entfernen |
| - | rmdir /mnt/oc_efi /mnt/macos_installer 2>/dev/null || true |
| - | |
| - | # Tools deinstallieren (nur wenn nicht anderweitig genutzt) |
| - | apt remove -y dmg2img p7zip-full |
| - | ``` |
| - | |
| - | ### Verifikation – alles weg? |
| - | |
| - | ```bash |
| - | qm list # VM 201 darf nicht erscheinen |
| - | lvs | grep vm-201 # darf keine Ausgabe liefern |
| - | ls /var/lib/vz/template/iso/ | grep -i opencore |
| - | ls /mnt/storage/pve-data/iso/ | grep -iE 'base|opencore' |
| - | ls /opt/OSX-KVM 2>/dev/null && echo 'NOCH DA' # nichts ausgeben = OK |
| - | ``` |
| - | |
| - | --- |
| - | |
| - | ## Prüfung / Status |
| - | |
| - | ```bash |
| - | qm status 201 |
| - | qm config 201 |
| - | ``` |
| + | | VM-ID | `201` | |
| + | | Name | `macos-sequoia` | |
| + | | Status | aktuell gestoppt | |
| + | | Einordnung | unfertiger Versuch / nicht operativ genutzt | |
| - | ## Verwandte Seiten |
| + | ## Operative Regel |
| - | - [[container-und-vms]] |
| - | - [[vm-200-windows11pro]] |
| - | - [[infrastruktur-uebersicht]] |
| + | - Diese VM nicht als produktiv oder funktionsfähig dokumentieren |
| + | - Vor neuen macOS-Versuchen zuerst sauber planen, welches Medium und welcher Bootpfad wirklich genutzt werden sollen |
| + | - Alte Detailbehauptungen zu iCloud, OpenCore-Versionen oder „vollständig funktionsfähig“ gelten hier bewusst nicht als aktuelle Wahrheit |
