Docker-Deployment¶
Das Docker-Image enthält .NET, Node.js und mermaid-cli — eine konsistente, portable Laufzeitumgebung.
Image bauen¶
Ausführen¶
# Upload: Zugangsdaten per Umgebungsvariablen injizieren
docker run --rm -it \
-e CONFLUENCE__BASEURL \
-e CONFLUENCE__AUTHMODE \
-e CONFLUENCE__USEREMAIL \
-e CONFLUENCE__APITOKEN \
-v $(pwd)/docs:/workspace/docs:ro \
confluencesynkmd \
upload \
--path /workspace/docs \
--conf-space IHR_SPACE_KEY \
--conf-parent-id IHRE_PAGE_ID
# Download: separater schreibbarer Output-Mount
docker run --rm -it \
-e CONFLUENCE__BASEURL \
-e CONFLUENCE__AUTHMODE \
-e CONFLUENCE__USEREMAIL \
-e CONFLUENCE__APITOKEN \
-v $(pwd)/output:/workspace/output \
confluencesynkmd \
download \
--path /workspace/output \
--conf-space IHR_SPACE_KEY \
--conf-parent-id IHRE_PAGE_ID
# Upload (CI/CD empfohlen): Secrets als Runner-Umgebungsvariablen injizieren
docker run --rm -it \
-e CONFLUENCE__BASEURL \
-e CONFLUENCE__AUTHMODE \
-e CONFLUENCE__USEREMAIL \
-e CONFLUENCE__APITOKEN \
-v $(pwd)/docs:/workspace/docs:ro \
confluencesynkmd \
upload \
--path /workspace/docs \
--conf-space IHR_SPACE_KEY \
--conf-parent-id IHRE_PAGE_ID
# Download (CI/CD empfohlen): schreibbarer Output-Mount
docker run --rm -it \
-e CONFLUENCE__BASEURL \
-e CONFLUENCE__AUTHMODE \
-e CONFLUENCE__USEREMAIL \
-e CONFLUENCE__APITOKEN \
-v $(pwd)/output:/workspace/output \
confluencesynkmd \
download \
--path /workspace/output \
--conf-space IHR_SPACE_KEY \
--conf-parent-id IHRE_PAGE_ID
# Upload: Zugangsdaten per Umgebungsvariablen injizieren
docker run --rm -it `
-e CONFLUENCE__BASEURL `
-e CONFLUENCE__AUTHMODE `
-e CONFLUENCE__USEREMAIL `
-e CONFLUENCE__APITOKEN `
-v ${PWD}/docs:/workspace/docs:ro `
confluencesynkmd `
upload `
--path /workspace/docs `
--conf-space IHR_SPACE_KEY `
--conf-parent-id IHRE_PAGE_ID
# Download: separater schreibbarer Output-Mount
docker run --rm -it `
-e CONFLUENCE__BASEURL `
-e CONFLUENCE__AUTHMODE `
-e CONFLUENCE__USEREMAIL `
-e CONFLUENCE__APITOKEN `
-v ${PWD}/output:/workspace/output `
confluencesynkmd `
download `
--path /workspace/output `
--conf-space IHR_SPACE_KEY `
--conf-parent-id IHRE_PAGE_ID
# Upload (CI/CD empfohlen): Secrets als Runner-Umgebungsvariablen injizieren
docker run --rm -it `
-e CONFLUENCE__BASEURL `
-e CONFLUENCE__AUTHMODE `
-e CONFLUENCE__USEREMAIL `
-e CONFLUENCE__APITOKEN `
-v ${PWD}/docs:/workspace/docs:ro `
confluencesynkmd `
upload `
--path /workspace/docs `
--conf-space IHR_SPACE_KEY `
--conf-parent-id IHRE_PAGE_ID
# Download (CI/CD empfohlen): schreibbarer Output-Mount
docker run --rm -it `
-e CONFLUENCE__BASEURL `
-e CONFLUENCE__AUTHMODE `
-e CONFLUENCE__USEREMAIL `
-e CONFLUENCE__APITOKEN `
-v ${PWD}/output:/workspace/output `
confluencesynkmd `
download `
--path /workspace/output `
--conf-space IHR_SPACE_KEY `
--conf-parent-id IHRE_PAGE_ID
REM Upload: Zugangsdaten per Umgebungsvariablen
docker run --rm -it ^
-e CONFLUENCE__BASEURL ^
-e CONFLUENCE__AUTHMODE ^
-e CONFLUENCE__USEREMAIL ^
-e CONFLUENCE__APITOKEN ^
-v %cd%/docs:/workspace/docs:ro ^
confluencesynkmd ^
upload ^
--path /workspace/docs ^
--conf-space IHR_SPACE_KEY ^
--conf-parent-id IHRE_PAGE_ID
REM Download: separater schreibbarer Output-Mount
docker run --rm -it ^
-e CONFLUENCE__BASEURL ^
-e CONFLUENCE__AUTHMODE ^
-e CONFLUENCE__USEREMAIL ^
-e CONFLUENCE__APITOKEN ^
-v %cd%/output:/workspace/output ^
confluencesynkmd ^
download ^
--path /workspace/output ^
--conf-space IHR_SPACE_KEY ^
--conf-parent-id IHRE_PAGE_ID
REM Upload (CI/CD empfohlen): Secrets als Runner-Umgebungsvariablen injizieren
docker run --rm -it ^
-e CONFLUENCE__BASEURL ^
-e CONFLUENCE__AUTHMODE ^
-e CONFLUENCE__USEREMAIL ^
-e CONFLUENCE__APITOKEN ^
-v %cd%/docs:/workspace/docs:ro ^
confluencesynkmd ^
upload ^
--path /workspace/docs ^
--conf-space IHR_SPACE_KEY ^
--conf-parent-id IHRE_PAGE_ID
REM Download (CI/CD empfohlen): schreibbarer Output-Mount
docker run --rm -it ^
-e CONFLUENCE__BASEURL ^
-e CONFLUENCE__AUTHMODE ^
-e CONFLUENCE__USEREMAIL ^
-e CONFLUENCE__APITOKEN ^
-v %cd%/output:/workspace/output ^
confluencesynkmd ^
download ^
--path /workspace/output ^
--conf-space IHR_SPACE_KEY ^
--conf-parent-id IHRE_PAGE_ID
Arbeitsverzeichnis
Wenn Sie ${PWD} / $(pwd) mounten, muss der Befehl im gewünschten Projektverzeichnis ausgeführt werden. Bevorzugen Sie gezielte Mounts nur für benötigte Pfade.
Mount-Strategien & Arbeitsverzeichnis¶
| Mount | Anwendungsfall |
|---|---|
-v $(pwd)/docs:/workspace/docs:ro |
Empfohlen für Upload: Docs-only mit Minimalrechten |
-v $(pwd)/docs:/workspace/docs:ro + zusätzliche Mounts (z. B. -v $(pwd)/img:/workspace/img:ro) |
Wenn Markdown auf Assets außerhalb von docs verweist |
-v $(pwd):/workspace |
Vollständiger Workspace-Mount (Fallback), nur bei vielen pfadübergreifenden Referenzen |
Pfade mit Leerzeichen
Mount-Pfade mit Leerzeichen müssen korrekt quotiert werden, z. B. PowerShell: -v "${PWD}/my docs:/workspace/docs:ro".
Validierung
Die PowerShell-Mount-Syntax mit Pfaden inklusive Leerzeichen wurde gegen das Docker-Image geprüft. Bash-Syntax im Ziel-CI-Runner separat validieren.
Sicherheit
Für CI/CD bevorzugt Secrets des CI-Systems (GitHub/GitLab geschützte Variablen) zur Laufzeit injizieren.
Minimale CI-Snippets¶
name: Confluence Sync
on:
workflow_dispatch:
jobs:
upload:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Docker Image bauen
run: docker build -t confluencesynkmd .
- name: Upload ausführen
env:
CONFLUENCE__BASEURL: ${{ secrets.CONFLUENCE__BASEURL }}
CONFLUENCE__AUTHMODE: Basic
CONFLUENCE__USEREMAIL: ${{ secrets.CONFLUENCE__USEREMAIL }}
CONFLUENCE__APITOKEN: ${{ secrets.CONFLUENCE__APITOKEN }}
run: |
docker run --rm \
-e CONFLUENCE__BASEURL \
-e CONFLUENCE__AUTHMODE \
-e CONFLUENCE__USEREMAIL \
-e CONFLUENCE__APITOKEN \
-v "$PWD/docs:/workspace/docs:ro" \
confluencesynkmd \
upload \
--path /workspace/docs \
--conf-space "${{ vars.CONFLUENCE_SPACE }}" \
--conf-parent-id "${{ vars.CONFLUENCE_PARENT_ID }}"
stages: [upload]
confluence_upload:
stage: upload
image: docker:27
services:
- docker:27-dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TLS_CERTDIR: ""
script:
- docker build -t confluencesynkmd .
- |
docker run --rm \
-e CONFLUENCE__BASEURL \
-e CONFLUENCE__AUTHMODE \
-e CONFLUENCE__USEREMAIL \
-e CONFLUENCE__APITOKEN \
-v "$CI_PROJECT_DIR/docs:/workspace/docs:ro" \
confluencesynkmd \
upload \
--path /workspace/docs \
--conf-space "$CONFLUENCE_SPACE" \
--conf-parent-id "$CONFLUENCE_PARENT_ID"
variables:
CONFLUENCE__AUTHMODE: "Basic"
# Als masked/protected CI variables setzen:
# CONFLUENCE__BASEURL, CONFLUENCE__USEREMAIL, CONFLUENCE__APITOKEN,
# CONFLUENCE_SPACE, CONFLUENCE_PARENT_ID
Inhalt des Standard-Images¶
Das veröffentlichte ghcr.io/opendocsync/confluencesynkmd:0.1 Image enthält alle vom Projekt versprochenen Renderer vorinstalliert:
| Renderer | Engine |
|---|---|
| Mermaid | @mermaid-js/mermaid-cli + Chromium (Puppeteer) |
| Draw.io | drawio-desktop (Electron, headless via Xvfb-once aus entrypoint.sh) |
| PlantUML | default-jre-headless + das plantuml Paket |
| LaTeX | TeX Live (texlive-latex-base + texlive-latex-extra + fonts-recommended) + Ghostscript direkt (ohne ImageMagick) |
Zur Verifikation der Renderer-Gesundheit:
docker run --rm ghcr.io/opendocsync/confluencesynkmd:0.1 doctor --renderers-only
Forward-Only-Fix-Politik¶
Falls ein veröffentlichtes :0.1.x Release einen kritischen Bug enthält, liefert das Projekt einen :0.1.x+1 Patch und aktualisiert den fortlaufenden :0.1 Tag. Digest-Pulls (docker pull ghcr.io/opendocsync/confluencesynkmd@sha256:...) werden niemals gelöscht — Nutzer, die per Digest pinnen, haben einen Grund dafür.
Nur für sicherheitskritische Vorfälle (geleakte Credentials, aktiv schädliche Regression) löscht der release-yank.yml Workflow einen Tag (nicht einen Digest) aus GHCR. Entscheidungskriterien sind in der Workflow-Datei dokumentiert.