- Python/Flask Backend - SQLAlchemy Models (notes, tasks, templates, users) - Gunicorn + Nginx Deploy-Konfiguration - Static Assets (CSS/JS) - Jinja2 Templates
8.2 KiB
Executable File
8.2 KiB
Executable File
Claude-Code Prompt für Deployment von NotesManager auf Proxmox LXC
Nutze den folgenden Prompt direkt in Claude Code.
Du arbeitest als selbstständig handelnder Linux-, Proxmox-, Netzwerk-, DNS-, Reverse-Proxy- und Deployment-Administrator.
Ziel
Deploye das beigefügte Webprojekt NotesManager als produktives System in einem neuen LXC-Container auf dem Proxmox-Host pve-braetter.braetter.local. Das Ergebnis muss vollständig lauffähig und sauber dokumentiert sein.
Harte Vorgaben
- Proxmox-Host:
pve-braetter.braetter.local - Container-Typ: LXC
- Container-OS: Ubuntu 24.04
- LXC Template: pve-braetter.braetter.local/Isos/CT Templates
- LXC Laufwerk: osdisk -> Größe 150GB
- LXC-ID: nicht fest vorgegeben → ermittle selbstständig eine freie LXC-ID auf
pve-braetter.braetter.local - IP-Adresse: nicht fest vorgegeben → ermittle per nmap eine freie statische IP im Netz
192.168.0.0/24 - Gateway:
192.168.0.1 - DNS-Server:
192.168.0.202 - Hostname/FQDN lokal:
notes.braetter.local - Externe Domain hinter Reverse Proxy:
notes.braetter-int.de - Hauptbenutzer im Container:
nicolay - Passwort Hauptbenutzer:
N17b011975 - Remoteinstallationsbenutzer:
claude - Passwort Remoteinstallationsbenutzer:
Agent - Der Benutzer
claudesoll vollesudo-Rechte ohne Passwortabfrage erhalten - Der Benutzer
claudebesitzt eine vollständige Public-Key-Authentifizierung; nutze die vorhandene Konfiguration bzw. Schlüssel aus/home/claude/.ssh/configzur Verteilung an Zielsysteme, falls benötigt - Reverse Proxy / SSL läuft über Nginx Proxy Manager
- Das SSL-Zertifikat für
*.braetter-int.deist bereits im Proxy vorhanden - DNS-Zusatzaufgabe: Auf dem DNS-Server muss für die Zone
braetter.localein Hosteintragnotesauf die ermittelte statische Container-IP angelegt werden - Zentrales Logging:
logserver.braetter.local - Das System soll nach Abschluss vollständig erreichbar und getestet sein
- Arbeite weitgehend autonom und beantworte notwendige Standardfragen selbst
Wichtige Arbeitsweise
- Triff sinnvolle Entscheidungen selbst.
- Frage nur dann nach, wenn es absolut technisch unmöglich ist, ohne Rückfrage weiterzumachen.
- Prüfe jede Annahme aktiv.
- Validiere jeden großen Schritt direkt nach der Umsetzung.
- Gib am Ende eine klare Zusammenfassung mit:
- gewählter LXC-ID
- gewählter IP-Adresse
- Hostname
- Pfaden
- Diensten
- Testergebnissen
- Zugangsdaten
- offenen Punkten, falls etwas extern blockiert ist
Technische Zielarchitektur
Das bereitgestellte Projekt NotesManager soll im Container produktiv betrieben werden mit:
- Python 3
- virtuelle Umgebung (
venv) - Flask-Anwendung
- Gunicorn als App-Server
- Nginx lokal im Container als Reverse Proxy zu Gunicorn
- systemd-Service für Gunicorn
- SQLite-Datenbank lokal im Applikationsverzeichnis bzw. Instance-Verzeichnis
- UFW so restriktiv wie sinnvoll, aber funktional für Webbetrieb
- Logging an
logserver.braetter.local
Deployment-Aufgaben im Detail
1. Proxmox vorbereiten
- Verbinde dich mit
pve-braetter.braetter.local - Ermittle eine freie LXC-ID automatisch
- Benutze den vorgabe Storage selbstständig
- Verwende ein Ubuntu-24.04-kompatibles LXC-Template, sofern vorhanden; falls mehrere vorhanden sind, nimm das sinnvollste aktuelle Template
- Prüfe RAM-, CPU-Ressourcen des Hosts und wähle eine sinnvolle Containergröße für eine kleine bis mittlere interne Webanwendung
- Dokumentiere die gewählten Ressourcen
2. Freie statische IP ermitteln
- Nutze nmap, um im Netz
192.168.0.0/24eine freie IP zu ermitteln - Verifiziere zusätzlich, dass die gewählte IP nicht bereits in ARP-/Lease-/DNS-Kontexten auffällig belegt ist
- Konfiguriere diese IP statisch im Container mit:
- IP: automatisch ermittelt
- Gateway:
192.168.0.1 - DNS:
192.168.0.202
3. Container anlegen
- Erstelle den LXC-Container
- Hostname:
notes.braetter.local - Lege die Benutzer
nicolayundclaudean - Setze die vorgegebenen Passwörter
- Hinterlege für
claudefunktionierende SSH-Authentifizierung - Setze
claudeals Passwortlos-Sudoer - Führe Systemupdates durch
4. NotesManager deployen
- Übertrage das mitgelieferte Projekt in den Container, vorzugsweise nach
/opt/notesmanager - Prüfe die Projektstruktur
- Erstelle eine Python-
venv - Installiere alle Abhängigkeiten aus
requirements.txt - Stelle sicher, dass die Anwendung im Produktionsmodus mit Gunicorn läuft
- Nutze die vorhandenen Deployment-Dateien im Projekt, wenn sinnvoll (
deploy/notesmanager.service,gunicorn.conf.py, Beispiel-Nginx-Datei) - Passe Konfigurationen auf die echte Zielumgebung an
- Setze Dateirechte sinnvoll
- Sorge dafür, dass die App nach Reboot automatisch startet
5. Nginx im Container konfigurieren
- Installiere und konfiguriere Nginx im Container
- Lokales Nginx soll Requests an Gunicorn auf
127.0.0.1:5000weiterreichen oder auf den final gewählten lokalen Gunicorn-Socket/-Port - Prüfe die Konfiguration mit
nginx -t - Aktiviere und starte Nginx sauber per systemd
6. Reverse Proxy in Nginx Proxy Manager
- Lege in Nginx Proxy Manager einen neuen Proxy Host für
notes.braetter-int.dean - Ziel ist der neue Container mit seiner statischen IP und dem internen HTTP-Port der Anwendung
- Weise das bereits vorhandene Zertifikat für
*.braetter-int.dezu - Aktiviere sinnvolle SSL-/Proxy-Optionen
- Teste den externen Zugriff über
https://notes.braetter-int.de
7. DNS-Eintrag anlegen
- Lege auf dem DNS-Server einen A-Record für
notesin der Zonebraetter.localan - Ziel ist die ermittelte statische IP des Containers
- Prüfe die Namensauflösung mit
dig,hostodernslookup
8. Logging anbinden
- Richte System- und Web-Logging so ein, dass Logs an
logserver.braetter.localweitergeleitet werden - Nutze dafür eine saubere rsyslog- oder journald-kompatible Lösung
- Prüfe die Übertragung mit einem Testlogeintrag
9. Sicherheit und Betriebsfähigkeit
- Deaktiviere unnötige Dienste
- Härte die Standardkonfiguration sinnvoll ab, ohne die Funktion zu beeinträchtigen
- Stelle sicher, dass nur notwendige Ports erreichbar sind
- Prüfe Boot-Verhalten, Service-Status und Web-Erreichbarkeit
- Führe Smoke-Tests durch:
- Container pingbar
- DNS-Auflösung intern funktioniert
- Nginx lokal antwortet
- Gunicorn-Service aktiv
- NotesManager Login-Seite erreichbar
- Reverse-Proxy-Zugriff extern erreichbar
10. Funktionstest der Anwendung
- Öffne die Weboberfläche
- Prüfe, ob Login funktioniert
- Prüfe, ob die Flask-App korrekt antwortet
- Prüfe, ob statische Inhalte geladen werden
- Falls nötig, führe einen minimalen App-Test durch, z. B. Startseite/Login-Seite und HTTP-Statuscodes
Erwartete Ergebnisdokumentation
Gib am Ende eine strukturierte Abschlussdokumentation aus mit:
- Gewählter LXC-ID
- Gewählter statischer IP
- Container-Hostname
- Installierter Software
- Verwendetem Storage
- CPU/RAM/Disk-Zuweisung
- Pfad der Anwendung
- Aktivierten Diensten
- Reverse-Proxy-Konfiguration
- DNS-Eintrag
- Logging-Anbindung
- Testresultaten
- Zugangsdaten:
nicolay / N17b011975claude / Agent
- Hinweisen, welche Standard-Anwendungsanmeldung initial gesetzt wurde
- Ggf. Restarbeiten oder manuelle Nacharbeiten
Zusatzanforderung für die Anwendung
Falls im Projekt noch Standardwerte enthalten sind, passe sie produktiv an:
- Setze einen sicheren Flask-Secret-Key
- Falls die App einen Demo-Admin enthält, dokumentiere diesen Zustand sauber oder ändere ihn auf einen produktiven Erstlogin-Mechanismus
- Stelle sicher, dass keine Entwicklungsoptionen wie
debug=Trueproduktiv aktiv bleiben
Wichtig
- Arbeite sauber, nachvollziehbar und mit sichtbaren Prüfungen.
- Bevorzuge robuste, wartbare Standardlösungen.
- Kein unfertiges Ergebnis abliefern.
- Wenn ein externer Zugriff auf Nginx Proxy Manager oder DNS technisch nicht möglich ist, dokumentiere exakt, welcher konkrete Schritt blockiert war und liefere die genauen finalen Befehle oder Klickschritte, die noch auszuführen sind.
Falls die Projektdaten lokal vorliegen, nutze sie direkt als Quelle für das Deployment. Projektname: NotesManager.