# HexaHost Panel Web-Panel zur Steuerung von **Proxmox VE**-VMs, **Traefik**-Routen (File Provider), **Plesk DNS** und Anbindung an **WHMCS 9** für Bestellung und Abrechnung. **Repository:** `ssh://git@git.hexahost.dev:8006/smueller/HexaHost-Panel.git` Produktions-URL (Ziel): [https://panel.hexahost.de](https://panel.hexahost.de) Ausführliche Server-Anleitung: [DEPLOY.md](DEPLOY.md) --- ## Funktionen | Bereich | Beschreibung | |--------|----------------| | **VM-Verwaltung** | Anlegen, Start/Stop/Reboot, Live-Status, Konsole (noVNC) | | **Provisioning** | Queue-basiert mit Rollback (Proxmox → DNS → Traefik) | | **WHMCS API** | HMAC-gesicherte Endpoints: Provision, Suspend, Terminate, Status | | **Netzwerk** | Private IP-Pools (10.32.0.0/24), optionale öffentliche IPs | | **Traefik** | YAML-Merge, atomisches Schreiben, Reload | | **Snapshots** | Manuell + automatisch vor kritischen Aktionen, 48h Retention | | **ISO-Upload** | Kunden-ISO auf Proxmox-Storage (Limits konfigurierbar) | | **Backups** | vzdump → PBS (wenn `BACKUPS_ENABLED=true`) | | **Firewall** | Regeln pro VM, Sync zu Proxmox | | **Sicherheit** | 2FA-Pflicht für Admins, Login-Throttle, Policies pro Rolle | | **Admin** | VM-Templates, System-Health, Benutzer, IP-Pools | --- ## Architektur ``` WHMCS 9 ──HMAC API──► Laravel Panel ──► Proxmox VE (Hyperion) ├──► Plesk DNS (A-Records) └──► Traefik dynamic YAML + Reload ``` --- ## Tech-Stack - **PHP** 8.3+, **Laravel** 13 - **SQLite** (Entwicklung) / **MariaDB** (Produktion empfohlen) - **Tailwind CSS 4**, **Vite** - **Queue:** `database` (Worker erforderlich) - **WHMCS-Modul:** `whmcs-module/hexahost/` --- ## Lokale Entwicklung ### Voraussetzungen - PHP 8.3+, Composer, Node.js 20+ - Optional: Proxmox API-Token in `.env` ### Installation ```bash git clone ssh://git@git.hexahost.dev:8006/smueller/HexaHost-Panel.git cd HexaHost-Panel composer install cp .env.example .env php artisan key:generate php artisan migrate php artisan db:seed --class=HostingSeeder npm install npm run build ``` ### Starten ```bash # Terminal 1 – App php artisan serve # Terminal 2 – Queue (Provisioning) php artisan queue:work # Terminal 3 – optional Assets npm run dev ``` Standard-Admin nach Seeder: `admin@hexahost.local` / `admin1234` — **in Produktion sofort ändern.** ### Tests ```bash npm run build php artisan test ``` --- ## Konfiguration Alle hosting-spezifischen Werte liegen in `config/hosting.php` und werden über `.env` gesetzt. Vorlage: `.env.example`. Wichtige Gruppen: | Präfix | Zweck | |--------|--------| | `PROXMOX_*` | API, Node, Storage, ISO, PBS | | `HOSTING_*` / `HOSTING_PUBLIC_*` | IP-Pools, Gateways, CIDR | | `TRAEFIK_*` | Pfad zur dynamic config, Reload | | `PLESK_*` | DNS-API | | `WHMCS_*` | API-Secret, IP-Allowlist | | `CONSOLE_PROXY_*` | WebSocket-Proxy (optional) | **Niemals** `.env` committen (enthält Secrets). --- ## Geplante Aufgaben (Cron) Der Laravel Scheduler muss **jede Minute** laufen (`php artisan schedule:run`): | Command | Intervall | |---------|-----------| | `hosting:release-vmids` | alle 15 Min. | | `hosting:purge-iso-uploads` | stündlich | | `hosting:prune-snapshots` | stündlich | | `hosting:collect-metrics` | alle 5 Min. | --- ## WHMCS Server-Modul-Skeleton: `whmcs-module/hexahost/hexahost.php` API-Basis: `https://panel.hexahost.de/api/whmcs/` (nur HMAC, kein offenes Hosting-API mehr). `WHMCS_API_SECRET` in Panel-`.env` und im WHMCS-Modul identisch setzen. --- ## Console-Proxy (optional) Direkte Browser-Verbindung zu Proxmox-VNC ist unsicher und oft blockiert. Empfohlen: 1. `CONSOLE_PROXY_ENABLED=true` in `.env` 2. Node-Proxy starten: `scripts/console-ws-proxy.mjs` 3. Reverse-Proxy `/ws/vm` → lokaler Port (siehe [DEPLOY.md](DEPLOY.md)) --- ## Projektstruktur (Auszug) ``` app/Services/Hosting/ Proxmox/ # API-Client, VM-Management Provisioning/ # Provision, Deprovision, IP, VMID Traefik/ # YAML-Generator Plesk/ # DNS Snapshots/ # Snapshot-Service ... routes/ web.php # Panel-UI api.php # WHMCS + Console-Validate whmcs-module/ # WHMCS 9 Server Module ``` --- ## Lizenz MIT (Laravel-Basis). Siehe `composer.json`.