Confluence-Backup-Webapp: ZIP hochladen, zerlegen, einzelne Seiten wiederherstellen.
  • Python 76.8%
  • HTML 23.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-29 09:54:21 +02:00
deploy PoC: Confluence-Backup-Viewer (parser, web, sample, systemd-unit) 2026-08-28 17:24:42 +02:00
sample PoC: Confluence-Backup-Viewer (parser, web, sample, systemd-unit) 2026-08-28 17:24:42 +02:00
src fix: Such-Snippets aus cleanem Text (page_text), nicht rohem Storage-XHTML 2026-08-29 09:01:51 +02:00
web feat: Volltextsuche über alle Seiten (GET /search + UI) 2026-08-29 08:57:59 +02:00
.gitignore feat: Volltextsuche über alle Seiten (GET /search + UI) 2026-08-29 08:57:59 +02:00
launch.py PoC: Confluence-Backup-Viewer (parser, web, sample, systemd-unit) 2026-08-28 17:24:42 +02:00
README.md docs: Service als optionale Vorlage (deploy/), README-IP korrigiert 2026-08-29 09:54:21 +02:00

Confluence Backup Viewer

Web-Service, um ein Confluence-Space-Backup (ZIP) hochzuladen, es zu zerlegen und einzelne Seiten wiederherzustellen — als HTML, Markdown oder selbständige HTML-Datei (Bilder inline). Zusätzlich lässt sich ein Teil-Backup exportieren: ausgewählte Seiten samt ihrer Attachments als neues, re-importierbares Confluence-ZIP.

PoC-Stand: Python 3.11, nur Standardbibliothek, keine Dependencies.

Funktionsumfang

Endpoint Bedeutung
POST /upload ZIP-Backup hochladen und zerlegen
GET /pages Seitenliste (Titel, Version, Attachments, Vorschau)
GET /page/<id> Seite als HTML (im App-Kontext, Attachments über /attachments/…)
GET /page/<id>.md Seite als Markdown
GET /page/<id>/download Selbständige HTML-Datei (Bilder als Data-URIs)
GET /export?pids=2,3 Teil-Backup-Export: ausgewählte Seiten + deren Attachments als neues Confluence-ZIP
GET /attachments/<page>/<id> Roh-Attachment (PNG, PDF, …)
POST /reset Aktuelles Backup vergessen
GET /health Status

Formatannahmen

Atlassian-Space-Export (Doku: „Retrieving file attachments from a backup"):

entities.xml                  # Space, Page, BodyContent, Attachment als XML-Entities
attachments/<pageId>/<aid>    # Layout <= 8.0
attachments/<pageId>/<aid>/<version>  # Layout >= 8.1

Der Renderer übersetzt Storage-Format-XHTML in sauberes HTML und deckt die üblichen Macros ab (panel, note, info, callout, warning, code, expand, toc, user, ac:image, ac:link). Unbekannte Macros landen in einer [Macro: …]-Box — nichts geht verloren, aber es ist kein 1:1-Clone von Confluence.

Start

python3 src/server.py          # Port 8321 (HOST/PORT per Env)

oder als Dienst (siehe deploy/conf-backup-viewer.service):

sudo cp deploy/conf-backup-viewer.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now conf-backup-viewer
curl -s http://HOST:8321/health

Der Dienst ist optional — python3 src/server.py startet denselben Server ohne systemd. Die Unit ist die Referenz-Vorlage für jede Hosting-Umgebung.

Testdaten

python3 src/make_sample.py     # erzeugt sample/demo-projekt.xml.zip

Grenzen (ehrliche PoC-Grenzen)

  • Rendering: regelbasierter Storage-Format-Konverter, keine 1:1-Parität.
  • „Wiederherstellen" = Seite als HTML/MD/Datei rausholen (fertig).
  • Teil-Backup-Export (nur ausgewählte Pages + Attachments in neues ZIP) — fertig: GET /export?pids=… baut ein neues entities.xml + attachments/…, das sauber re-importierbar ist (Round-trip durch parse_backup() verifiziert).
  • Re-Import in live Confluence (REST-API „Import as HTML") ist die nächste Ausbaustufe.
  • Ein Backup = ein Modell im RAM (/reset leert es).