Caddy Web UI
Find a file
andyf f6cf258652 feat(builder): TLS dropdown picks from managed cert sources
Adds 'Aus Cert-Source (verwaltet)' as a new TLS mode in the site builder.
Renders a dropdown of configured cert sources (name + subject + days till
expiry), emits the correct tls directive using the source's local_dir.

The parser also detects existing tls directives whose paths match a
source and pre-selects that source on edit.
2026-05-28 14:07:03 +02:00
static/img Initial commit: CaddyUI 1.0.0 2026-05-28 13:11:35 +02:00
templates feat(builder): TLS dropdown picks from managed cert sources 2026-05-28 14:07:03 +02:00
.gitattributes chore: enforce LF line endings via .gitattributes 2026-05-28 13:12:09 +02:00
.gitignore Initial commit: CaddyUI 1.0.0 2026-05-28 13:11:35 +02:00
install.sh feat: external certificate mirroring (HTTPS/SSH/Local + daily timer) 2026-05-28 14:01:57 +02:00
main.py feat(builder): TLS dropdown picks from managed cert sources 2026-05-28 14:07:03 +02:00
README.md Initial commit: CaddyUI 1.0.0 2026-05-28 13:11:35 +02:00
uninstall.sh feat: external certificate mirroring (HTTPS/SSH/Local + daily timer) 2026-05-28 14:01:57 +02:00

CaddyUI

Minimalistischer Web-Editor für /etc/caddy/Caddyfile mit strukturiertem Site-Builder, Validate/Reload, automatischen Backups und Brutalist-Design.

Features

  • Sites verwalten — Karten-Übersicht aller Site-Blöcke, Add/Edit/Delete
  • Strukturierter Builder — Handler-Auswahl (Reverse Proxy, File Server, Redirect, Respond, PHP-FastCGI, Custom), TLS-Optionen (Auto/Internal/Custom/Email/Off), Custom Headers, Basic Auth, Komprimierung, Logging
  • Raw-Editor — komplettes Caddyfile als Textarea bearbeiten
  • Validate + Reload — direkt aus der UI, mit caddy validate Vorprüfung
  • Automatische Backups — bei jeder Änderung, max. 10 behalten (konfigurierbar), nur bei tatsächlicher Änderung
  • Backups einsehen + wiederherstellen
  • Status-Indikator — zeigt ob die Datei mit dem laufenden Caddy synchron ist
  • Session-basiertes Login — kein nerviges Browser-Popup
  • Custom Confirm-Dialogs — DaisyUI Modals statt confirm()-Popups

Voraussetzungen

  • Linux mit systemd (Debian/Ubuntu/Fedora/Alpine)
  • Caddy ist installiert und läuft als caddy.service
  • Caddyfile unter /etc/caddy/Caddyfile
  • Python 3.10+ (wird automatisch via Paketmanager geprüft)
  • Port 8088 frei (per .env änderbar)

Installation

# Tarball auf Zielserver kopieren
scp caddyui-1.0.0.tar.gz user@target:/tmp/

# Auf dem Zielserver
ssh user@target
sudo tar -xzf /tmp/caddyui-1.0.0.tar.gz -C /tmp/
sudo /tmp/caddyui/install.sh

Am Ende zeigt der Installer URL, Benutzer und ein generiertes Passwort. Passwort steht in /opt/caddyui/.env (Mode 600).

Upgrade

Einfach den neuen Tarball entpacken und install.sh erneut ausführen. Die .env und der Backup-Ordner bleiben erhalten.

Konfiguration (/opt/caddyui/.env)

CADDYUI_USER=admin
CADDYUI_PASS=...
CADDYUI_SECRET=...               # Session-Secret (zufällig bei Install)
PORT=8088
# CADDYFILE=/etc/caddy/Caddyfile
# CADDYUI_BACKUPS=/opt/caddyui/backups
# CADDYUI_BACKUP_RETENTION=10
# CADDYUI_RELOAD_CMD=systemctl reload caddy
# CADDYUI_VALIDATE_CMD=caddy validate --config /etc/caddy/Caddyfile

Nach Änderung: systemctl restart caddyui

Service-Verwaltung

systemctl status caddyui           # Status anzeigen
systemctl restart caddyui          # Neu starten
journalctl -u caddyui -f           # Live-Logs

Optional: über Caddy selbst exponieren

In der UI eine neue Site anlegen:

  • Domain: z.B. caddyui.example.com
  • Handler: Reverse Proxy → 127.0.0.1:8088
  • TLS: Auto (Let's Encrypt)
  • (optional) Basic Auth zusätzlich

Deinstallation

sudo /opt/caddyui/uninstall.sh

oder vor Löschen vom System:

sudo bash uninstall.sh

Dateistruktur (nach Installation)

/opt/caddyui/
├── main.py                 # Flask-App
├── templates/              # Jinja2-Templates
├── static/img/             # MANAZ-Logo etc.
├── venv/                   # Python virtual env
├── backups/                # Auto-Backups (Caddyfile.YYYYMMDD-HHMMSS.bak)
├── .env                    # Credentials + Config (mode 600)
├── .last-reload-hash       # Tracker für Active/Pending-Status
├── install.sh              # dieser Installer
├── uninstall.sh
└── README.md

Lizenz / Credits

Made by MANAZ.