Files
proxdeploy/CHANGELOG.md
T
florian.wildeandClaude Opus 5.5 ca9d6de446 fix(ablauf): angelegte ID merken, bevor auf Proxmox gewartet wird
Brach das Warten auf Klonen oder Anlegen ab, legte Proxmox den Gast trotzdem fertig an – und „Aufräumen“ wusste nichts von ihm (CT 114 im Feldtest).

Refs #020

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-23 16:02:57 +02:00

11 KiB
Raw Blame History

Changelog

Alle nennenswerten Änderungen an ProxDeploy werden in dieser Datei dokumentiert.

Das Format basiert auf Keep a Changelog, und dieses Projekt folgt Semantic Versioning.

[Unveröffentlicht]

Hinzugefügt

  • Standardwerte je Server (Node, Storage, Bridge) im Server-Formular; der Assistent belegt sie vor, die CLI nutzt sie für kurze Befehle (#023)

Geändert

  • LXC: nesting ist für Container standardmäßig an, wie in der Proxmox-Oberfläche – Debian 12 und Ubuntu 22.04 (systemd 252/249) brauchen es; abwählbar im Assistenten und mit --nesting=false (#020)

Behoben

  • „Aufräumen“ kannte einen Gast nicht, wenn das Warten auf Klonen bzw. Anlegen abbrach, Proxmox ihn aber fertig anlegte – die ID wird jetzt gemerkt, sobald Proxmox den Auftrag angenommen hat (#020)
  • Warten auf Proxmox-Tasks bricht bei vorübergehend fehlschlagenden Statusabfragen nicht mehr ab, sondern fragt bis zum Zeitlimit des Tasks weiter; Verbindungsaufbau darf 30 s statt 10 s dauern (#020)
  • Gast-Benutzer, der wie eine vorhandene Gruppe heißt (z. B. „admin“ auf Ubuntu 22.04), ließ die Provisionierung mit Code 9 abbrechen; die Gruppe wird jetzt Primärgruppe (#020)
  • pnpm test:container lief seit pnpm 12 nicht mehr (pnpm -s gibt es dort nicht) (#020)
  • Auf ausgelasteten Nodes brachen Aufträge beim ersten Verbindungswackler ab („Broken pipe“, „other side closed“, Zeitüberschreitung). Lesende Proxmox-Aufrufe werden jetzt bis zu dreimal wiederholt, schreibende nur, wenn die Anfrage sicher nicht ankam; Schreibaufrufe dürfen 120 s dauern; Wiederholungen stehen im Detail-Log (#020)
  • proxdeploy batch --dry-run --quiet gab Leerzeilen für erfolgreiche Einträge aus (#020)
  • Übersicht am Handy breiter als der Bildschirm (lange Auftragszeilen); der Browser zoomte heraus und die Navigation verdeckte „Abmelden“ (#023)
  • Seitenleiste scrollt, wenn ihr Inhalt höher als der Bildschirm ist (#023)
  • Beim Wechsel des Servers im Assistenten wurde die erste Bridge statt vmbr0 vorbelegt (#023)

Entfernt

Sicherheit

  • Next.js 16.4.0 → 16.4.2: zwei kritische Lücken (Remote Code Execution in der Bildoptimierung mit SVG und in use cache) und eine hohe (DoS über Server Actions); ProxDeploy nutzte die betroffenen Funktionen nicht, der Bild-Endpunkt ist aber standardmäßig erreichbar
  • Prisma 7.10.0 → 7.10.1: hebt mysql2 und deepmerge-ts über bekannte Lücken (nur im Prisma-CLI, nicht zur Laufzeit)

[0.6.1] – 2026-10-12

Behoben

  • Debian-12-Templates bekamen keine cloud-init-Konfiguration: das cloud-init-Laufwerk hing an ide2 (SATA bei q35), den der Debian-12-Cloud-Kernel nicht kennt. Neue Templates nutzen scsi1 (#021)

[0.6.0] – 2026-10-12

Hinzugefügt

  • Betrieb per Docker Compose (postgres, migrate, app, worker) mit einem Image für alles, non-root (#019)
  • LXC-Installer deploy/install-lxc.sh: legt auf dem Proxmox-Host einen Debian-13-Container an, installiert Node.js und PostgreSQL, richtet systemd-Dienste ein; mit Update-Pfad (#019)
  • Migrationen im Betrieb ohne Prisma-CLI, kompatibel zu Prisma (#019)
  • Übersicht zeigt Nodes, CPUs und freien RAM je Server (#018)
  • README mit Banner, Screenshots, Installation, ersten Schritten und Katalog-Anleitungen (#018)
  • Marken-Dateien nach Vorgabe unter public/brand/: Symbol (dunkel/hell), kleines Icon, Avatar, Logo (dunkel/hell), Banner 1280×640, Favicons, Apple-Touch- und Manifest-Icons; erzeugt mit pnpm marke (#017)
  • Web-App-Manifest; Favicon passt sich hellem und dunklem Browser an (#017)

Behoben

  • Die Übersicht zeigte statt der letzten Deployments nur einen Platzhalter (#018)

[0.5.0] – 2026-10-12

Hinzugefügt

  • Anmeldung per OIDC (z. B. authentik): PKCE, State und Nonce, Rolle aus dem Gruppen-Claim bei jeder Anmeldung, neue Konten beim ersten Anmelden, Verknüpfen eines lokalen Kontos aus den Einstellungen (#016)
  • Benutzerverwaltung für Admins: anlegen, Rolle ändern, sperren und entsperren, Passwort neu setzen; der letzte Admin und das eigene Konto sind geschützt (#015)
  • Eigenes Passwort in den Einstellungen ändern (#015)
  • Audit-Log-Ansicht für Admins, filterbar nach Benutzer, Quelle, Text und Zeitraum; auch GET /api/v1/protokoll (#015)
  • Verlauf filterbar nach Server, Typ, Distribution und Status, mit Seitenblättern; die Filter stehen in der URL. Auch per API und proxdeploy history (#014)
  • „Wiederholen“: der Assistent übernimmt alle Werte eines früheren Auftrags, Name, VMID und feste IP gibt man neu an (#014)
  • „Aufräumen“ nach Fehlschlag oder Abbruch: löscht nach Bestätigung den halb angelegten Gast – nur, wenn seine Beschreibung auf den Auftrag verweist; Templates nie. Web, API und proxdeploy cleanup (#014)

Behoben

  • „Einstellungen“ fehlte in der Navigation (#015)
  • Erzeugte SSH-Schlüssel (je Server und Bereitstellungsschlüssel) waren in etwa 4 von 1000 Fällen für ssh2 selbst nicht lesbar; jetzt wird geprüft und neu erzeugt (#014)

Sicherheit

  • SSO übernimmt nie ein lokales Konto über den Benutzernamen; Verknüpfen geht nur angemeldet (#016)
  • Sperren, Passwort-Reset und Passwortwechsel beenden alle bestehenden Sitzungen des Benutzers (#015)

[0.4.0] – 2026-10-12

Hinzugefügt

  • CLI proxdeploy (Go, ein Binary für Linux/macOS/Windows × amd64/arm64): login, servers, distros, profiles, presets, vm, lxc, template list|build, batch, status, logs --follow, cancel; Ausgabe im Aufbau der Vorgabe mit 24-bit-/256-Farben, --ascii, --quiet, --json, --dry-run (#013)
  • API-Tokens für die CLI: anlegen und widerrufen in den Einstellungen, proxdeploy login tauscht Benutzername und Passwort gegen ein Token; Anmeldung per Authorization: Bearer (#013)
  • Kurze Anfragen: fehlen Storage, Bridge, Node, Benutzer oder SSH-Schlüssel, nimmt der Server die Standards (Server-Einstellungen, Verbindungstest, eigener Benutzername, hinterlegte Schlüssel) – auch beim Template-Bau (#013)
  • OpenAPI-Beschreibung unter /api/v1/openapi.json, aus denselben zod-Schemas wie die API (#013)

Geändert

  • Die Abschlussbox (Name, ID, IP, Profile, SSH bzw. Phase, Ursache, Hinweis) berechnet der Server; Web-GUI und CLI zeigen dieselben Zeilen (#013)

Sicherheit

  • API-Tokens werden nur als SHA-256 gespeichert und genau einmal angezeigt; ein ungültiges Token gilt als nicht angemeldet, auch wenn zusätzlich ein Sitzungscookie mitkommt (#013)

[0.3.0] – 2026-10-12

Hinzugefügt

  • Template-Bau ohne SSH zum Node: über eine Bau-Adresse installiert ProxDeploy den Guest-Agent per SSH in der Vorbereitungs-VM (#021)
  • SSH-Schlüssel in den Einstellungen hinterlegen (persönlich und, für Admins, Team-Schlüssel); sie kommen automatisch in jeden Gast – auch per API/CLI ohne Angabe – und sind im Assistenten abwählbar (#015)
  • Templates mit eingebackenen Profilen: beim Template-Bau Profile wählen; Ausrollen nimmt das passende Template und überspringt, was schon drin ist (#022)
  • Profil-Editor: eigene Profile als YAML mit Live-Prüfung und Skriptvorschau, Katalogprofile als Kopie bearbeiten (#011)
  • Vorlagen (Presets): im Assistenten wählen und speichern, Vorlagenseite, vorlage in der API; Beispiel „Docker-Host klein“ (#012)
  • Ubuntu 22.04/24.04/26.04 als VM und LXC; Fortschritt beim Klonen aus dem Task-Log (#010)
  • LXC-Container ausrollen: Container-Template prüfen und laden, anlegen (unprivilegiert, nesting für docker), Netz, Provisionierung per pct exec über Node-SSH oder per SSH in den Container mit einem Bereitstellungsschlüssel (#009)
  • Profile kennen die festen Bedingungen if: vm und if: lxc (#009)

Behoben

  • Verbindungstest meldete „Template-Bau per API“ auch dann, wenn der Guest-Agent mangels SSH gar nicht ins Template käme (#021)
  • chrony wird in Containern nicht mehr installiert – ohne CAP_SYS_TIME scheiterte dort das Profil base (#009)
  • SSH-Härtung auf Ubuntu 24.04 scheiterte an fehlendem /run/sshd (#009)

[0.2.0] – 2026-10-12

Hinzugefügt

  • Katalog als Daten: Debian 12/13 und Ubuntu 22.04/24.04/26.04 sowie die Profile base, docker und zabbix-agent als YAML unter catalog/, beim Start in die Datenbank abgeglichen (#004)
  • Katalogseite mit Aktiv-Schaltern für Distributionen und Profile; GET /api/v1/distributionen?typ=vm|lxc, GET /api/v1/profile (#004)
  • README mit Stand, Fähigkeiten und Entwicklungsumgebung (#018)
  • Provisionierungs-Adapter debian und Profil-Engine: Profile werden zu einem idempotenten Skript; geprüft mit shellcheck und echt in Containern für alle fünf Distributionen (pnpm test:container) (#005)
  • docs/katalog.md: neue Distribution, neuer Adapter, eigenes Profil (#005)
  • Aufträge im worker (pg-boss) mit Phasen, Detail-Log und Live-Fortschritt per Server-Sent Events; Live-Ansicht im Aufbau der CLI-Ausgabe, Verlaufsseite (#006)
  • Template-Bau: Cloud-Image mit Prüfsumme laden, VM mit q35/UEFI anlegen, Disk importieren, Guest-Agent einbauen, als Template markieren; Templates-Seite (#007)
  • VM ausrollen: Klonen, Hardware, cloud-init, Start, Guest-Agent, Provisionierung der Profile über den Guest-Agent – ohne SSH (#008)
  • Deploy-Assistent mit 9 Schritten, Dry-Run mit allen geplanten Proxmox-Aufrufen und passendem CLI-Befehl (#008)

Behoben

  • Provisionierungsskripte mit Umlauten scheiterten an Proxmox' file-write; sie werden jetzt base64-kodiert übertragen (#008)

Sicherheit

  • Profil-Variablen werden in Shell-Befehlen immer gequotet; Zeitzone, Locale und Tastatur gegen strenge Muster geprüft (#005)
  • VMIDs werden unter einer Sperre je Server vergeben – parallele Aufträge bekommen nie dieselbe ID (#006)

[0.1.0] – 2026-10-12

Hinzugefügt

  • Architektur- und Umsetzungsplan (docs/architektur.md) mit Prüfung der Proxmox-API 8.x/9.x und der Image-Quellen (#001)
  • Issues #001–#020 für die sechs Etappen und den Feldtest (#001)
  • Grundgerüst: Next.js 16, Prisma 7, Tailwind 4 mit den ProxDeploy-Farben als Tokens, dunkles und helles Theme (#001)
  • Anmeldung mit lokalem Benutzer; der erste Administrator entsteht aus ADMIN_BENUTZER/ADMIN_PASSWORT (#001)
  • Seitenleiste mit Wortmarke, auf dem Handy als Schublade; Übersichtsseite (#001)
  • /api/v1/gesundheit und /api/v1/ich (#001)
  • Server-Verwaltung: Proxmox-Server anlegen, bearbeiten, löschen; Zertifikat ansehen und Fingerprint pinnen; Verbindung vor dem Speichern prüfen (#002)
  • Optionales SSH-Schlüsselpaar je Server mit Einzeiler zum Hinterlegen auf den Nodes (#002)
  • Server-Umschalter in der Seitenleiste, Serverliste auf der Übersicht (#002)
  • Verbindungstest: Version, Cluster, Nodes, Storages, Bridges, VNets und die Rechte des Tokens; je Vorgang, ob er per API, per SSH oder gar nicht geht (#003)
  • SSH zu den Nodes mit Host-Key-Pinning nach Bestätigung (#003)
  • docs/proxmox-rechte.md: Rolle ProxDeploy für PVE 8 und 9 mit fertigen pveum-Befehlen (#003)
  • Proxmox-Client mit verständlichen Fehlern (Ursache + Hinweis, fehlendes Recht samt Pfad) und Warten auf Proxmox-Tasks (#002)

Sicherheit

  • Geheimnisse werden mit AES-256-GCM verschlüsselt, Schlüssel aus PROXDEPLOY_SCHLUESSEL (#001)
  • Passwörter mit argon2id; Sperre nach zehn Fehlversuchen in 15 Minuten; Content-Security-Policy mit Nonce (#001)
  • Das Audit-Log ist per Datenbank-Trigger nur anhängbar (#001)
  • Proxmox-Token-Secret und SSH-Privatschlüssel liegen nur verschlüsselt vor und verlassen den Server nie; TLS ohne Prüfung oder Pin ist ausgeschlossen (#002)