# ZMB Webui - Installation Guide ZMB Webui ist eine moderne Web-UI für ZFS und Samba/NFS Verwaltung auf Linux-Systemen. Dieses Dokument beschreibt die Installation auf Ubuntu/Debian. **Zielplattformen:** - Raspberry Pi (ARM64, 4GB RAM+) - Debian/Ubuntu Server (x86_64 oder ARM64) - LXC Container ## Voraussetzungen ### System - **OS:** Ubuntu 20.04+ oder Debian 11+ - **RAM:** Minimal 2GB (4GB empfohlen) - **Disk:** Minimal 500MB für Installation - **Root-Zugang** erforderlich ### Abhängigkeiten ```bash # ZFS und System-Tools apt-get update apt-get install -y \ python3.9+ \ python3-pip \ python3-venv \ zfsutils-linux \ samba \ nfs-kernel-server \ nginx \ curl \ git # Node.js (für Frontend-Build) # Optional, nur wenn du das Frontend selbst bauen möchtest curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash - apt-get install -y nodejs # Samba-Admin-Tools apt-get install -y samba-client samba-dsdb-modules ``` ## Installation ### 1. Repository klonen ```bash cd /opt git clone https://gitea.perlbach24.de/patrick/zmb-webui.git cd zmb-webui ``` ### 2. Backend Setup #### 2.1 Python Virtual Environment erstellen ```bash cd backend python3 -m venv venv source venv/bin/activate pip install --upgrade pip setuptools wheel pip install -r requirements.txt ``` #### 2.2 Admin-Benutzer erstellen ```bash python3 << 'EOF' from services.auth import auth_service # Erstelle einen Admin-Benutzer username = input("Benutzername: ") password = input("Passwort: ") auth_service.add_user(username, password) print(f"✓ Benutzer '{username}' erstellt") EOF ``` Oder über System-Benutzer: ```bash # Erstelle einen System-Benutzer useradd -m -s /bin/false webadmin echo "webadmin:mypassword123" | chpasswd # Der Benutzer kann sich dann mit diesem Passwort anmelden ``` ### 3. Frontend Setup #### 3.1 Frontend bauen (empfohlen auf schnellerem System) **Option A: Lokal bauen und deployen (schneller)** ```bash cd frontend # Abhängigkeiten installieren npm install # Build für statischen Export npm run build # Erstellt ./out/ mit fertigen HTML-Dateien # Output prüfen ls -la out/ | grep -E "\.html|index" ``` **Option B: Direkt auf dem Ziel-System bauen** ```bash # Auf dem Ziel-System ssh root@192.168.1.179 # oder deine IP cd /opt/zmb-webui/frontend npm install npm run build ``` ### 4. Deployment auf Ziel-System #### 4.1 Backend deployen ```bash # Von deinem lokalen Rechner scp -r backend root@192.168.1.179:/opt/zmb-webui/ # Oder via rsync rsync -avz backend/ root@192.168.1.179:/opt/zmb-webui/backend/ ``` #### 4.2 Frontend deployen ```bash # Von deinem lokalen Rechner (nach npm run build) rsync -avz --delete frontend/out/ root@192.168.1.179:/opt/zmb-webui/frontend/ ``` ### 5. Systemd Service Setup #### 5.1 Service-Datei erstellen ```bash sudo cp deploy/zfs-manager-backend.service /etc/systemd/system/zmb-webui-backend.service ``` Überprüfe die Datei: ```bash sudo cat /etc/systemd/system/zmb-webui-backend.service ``` **Inhalt sollte etwa so aussehen:** ```ini [Unit] Description=ZMB Webui Backend API After=network.target [Service] Type=simple User=root WorkingDirectory=/opt/zmb-webui/backend Environment="PATH=/opt/zmb-webui/venv/bin" ExecStart=/opt/zmb-webui/venv/bin/python -m uvicorn main:app --host 0.0.0.0 --port 8000 Restart=on-failure RestartSec=10 [Install] WantedBy=multi-user.target ``` #### 5.2 Service aktivieren und starten ```bash sudo systemctl daemon-reload sudo systemctl enable zmb-webui-backend sudo systemctl start zmb-webui-backend # Status prüfen sudo systemctl status zmb-webui-backend ``` ### 6. Nginx Konfiguration #### 6.1 Nginx Config erstellen ```bash sudo tee /etc/nginx/sites-available/zmb-webui > /dev/null << 'EOF' server { listen 8090 ssl http2; listen [::]:8090 ssl http2; server_name _; # SSL-Zertifikate (self-signed für Entwicklung) ssl_certificate /etc/nginx/ssl/zmb-webui.crt; ssl_certificate_key /etc/nginx/ssl/zmb-webui.key; root /opt/zmb-webui/frontend; index index.html; # Frontend - statische HTML location / { try_files $uri $uri/ /index.html; expires 1h; add_header Cache-Control "public, max-age=3600"; } # Backend API - Proxy location /api/ { proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_read_timeout 60s; } # WebSocket location /ws { proxy_pass http://127.0.0.1:8000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_read_timeout 86400; } # Health check location /health { proxy_pass http://127.0.0.1:8000/health; } } EOF ``` #### 6.2 Self-signed SSL-Zertifikat erstellen ```bash # SSL-Verzeichnis erstellen sudo mkdir -p /etc/nginx/ssl # Self-signed Zertifikat (gültig 365 Tage) sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \ -keyout /etc/nginx/ssl/zmb-webui.key \ -out /etc/nginx/ssl/zmb-webui.crt \ -subj "/CN=zmb-webui/O=Home/C=DE" sudo chmod 600 /etc/nginx/ssl/zmb-webui.key ``` #### 6.3 Nginx aktivieren und neustarten ```bash sudo ln -s /etc/nginx/sites-available/zmb-webui /etc/nginx/sites-enabled/ sudo rm -f /etc/nginx/sites-enabled/default # Konfiguration testen sudo nginx -t # Neustarten sudo systemctl restart nginx ``` ### 7. Samba Registry Setup (optional aber empfohlen) ```bash # Samba konfigurieren um Registry statt smb.conf zu nutzen sudo bash /opt/zmb-webui/deploy/setup-samba-registry.sh ``` Oder manuell: ```bash # Minimale smb.conf erstellen sudo tee /etc/samba/smb.conf > /dev/null << 'EOF' [global] include = registry EOF # Samba neustarten sudo systemctl restart smbd ``` ## Erste Schritte ### 1. Zugriff auf WebUI Öffne in deinem Browser: ``` https://192.168.1.179:8090 ``` (Ersetze die IP mit deiner Ziel-System IP) ### 2. Login - **Benutzername:** Der Admin-Benutzer, den du erstellt hast - **Passwort:** Das Passwort, das du gesetzt hast ### 3. Navigation Nach Login siehst du: - **Dashboard** - Pool Status, Quick Stats - **Shares** - Samba und NFS Shares verwalten - **File Sharing** - Samba Global Config (Samba Registry Parameter) - **Navigator** - Datei-Browser - **Identities** - Benutzer und Gruppen - **Logs** - System Logs ## Samba Global Configuration Die Samba Global Configuration wird vom **Samba Registry** gelesen: ```bash # Zeige alle Global Parameters net conf list # Zeige einen Parameter net conf getparm global "log level" # Setze einen Parameter net conf setparm global "log level" 3 ``` Diese Parameter können auch über die WebUI unter `/shares` → "Samba Config" Tab bearbeitet werden. ## NFS Configuration NFS Exports werden in `/etc/exports` gespeichert: ```bash # Zeige alle Exports cat /etc/exports # Reload nach Änderungen exportfs -r ``` Diese können auch über die WebUI unter `/shares` → "NFS" Tab bearbeitet werden. ## Troubleshooting ### Backend startet nicht ```bash # Logs prüfen sudo journalctl -u zmb-webui-backend -n 50 -f # Manuell starten (für Fehlerausgabe) cd /opt/zmb-webui/backend source venv/bin/activate python -m uvicorn main:app --host 0.0.0.0 --port 8000 ``` ### Frontend lädt nicht ```bash # Nginx logs sudo tail -f /var/log/nginx/error.log # Überprüfe Dateien ls -la /opt/zmb-webui/frontend/ ``` ### Samba Fehler ```bash # Samba Config testen sudo testparm -s # Samba Logs sudo tail -f /var/log/samba/log.smbd ``` ### API Fehler 401 (Unauthorized) - Token ist abgelaufen → Neu anmelden - Falsche Anmeldedaten → Benutzer überprüfen ```bash # Benutzer überprüfen/erstellen cd /opt/zmb-webui/backend source venv/bin/activate python3 << 'EOF' from services.auth import auth_service auth_service.add_user("admin", "newpassword") EOF ``` ## Performance Optimierung ### Auf Raspberry Pi ```bash # Gunicorn mit weniger Workers (spart RAM) # In zmb-webui-backend.service: # ExecStart=/opt/zmb-webui/venv/bin/gunicorn main:app \ # --workers 2 --worker-class uvicorn.workers.UvicornWorker \ # --bind 0.0.0.0:8000 # Cache TTL erhöhen (in services/zfs_runner.py) CACHE_TTL = 120 # 2 Minuten statt 30 Sekunden # Memory Monitor free -h watch -n 1 free -h ``` ### Auf x86_64 Server ```bash # Mehr Workers nutzen ExecStart=... --workers 4 ... # Redis Cache (optional) # Siehe CLAUDE.md für Details ``` ## Automatisches Update von Gitea ```bash # Deploy-Script kopieren cp deploy/update-from-gitea.sh /opt/zmb-webui/ # Executable machen chmod +x /opt/zmb-webui/update-from-gitea.sh # Cronjob erstellen (tägliches Auto-Update) sudo tee /etc/cron.daily/zmb-webui-update > /dev/null << 'EOF' #!/bin/bash cd /opt/zmb-webui ./update-from-gitea.sh EOF sudo chmod +x /etc/cron.daily/zmb-webui-update ``` ## Sicherheit ⚠️ **Für Produktion:** 1. **SSL-Zertifikat:** Self-signed durch echtes Zertifikat ersetzen 2. **CORS:** In `backend/main.py` ändern: ```python allow_origins = ["https://deine-domain.de"] # statt ["*"] ``` 3. **Passwörter:** Starke Passwörter verwenden 4. **Firewall:** Port 8090 nur für vertrauenswürdige IPs freigeben 5. **Updates:** Regelmäßig git pull und neu bauen ## Dateistruktur nach Installation ``` /opt/zmb-webui/ ├── backend/ │ ├── venv/ # Python Virtual Environment │ ├── main.py │ ├── routers/ # API Endpoints │ ├── services/ # Business Logic │ ├── models/ # Pydantic Models │ ├── requirements.txt │ └── README.md ├── frontend/ │ ├── _next/ # Next.js Build Output │ ├── app/ # Next.js Pages │ ├── components/ # React Components │ ├── lib/ # Utilities & API Client │ ├── public/ # Static Files │ ├── package.json │ ├── *.html # Generated Static Pages │ └── README.md ├── deploy/ │ ├── zfs-manager-backend.service │ ├── setup-samba-registry.sh │ ├── update-from-gitea.sh │ └── samba-template.conf ├── INSTALLATION.md # Diese Datei ├── CLAUDE.md # Entwickler-Dokumentation └── README.md # Feature-Übersicht ``` ## Weitere Dokumentation - **CLAUDE.md** - Architektur, Entwicklung, Deployment - **backend/README.md** - API-Endpoints, curl Beispiele - **frontend/README.md** - Frontend-Konfiguration, Build-Options --- **Support:** Bei Fragen oder Problemen, siehe CLAUDE.md oder kontaktiere patrick@perlbach24.de