Backend (in Docker) zeigt Port 8082 für UI nicht.

Hallo zusammen,

Zuerst einmal vielen Dank für dieses sehr coole Projekt! Ich finde es fantastisch, was hier alles schon aufgebaut wurde. Ich selbst kann davon leider noch nicht allzu viel “geniessen”, da ich immer noch ziemlich tief in der (bekanntermassen steilen) Lernkurve stecke :thinking:.

Lokal habe ich eine erste Simulation zum Laufen gebracht und möchte darum als nächsten Lernschritt das Backend “dockerisiert” aufsetzen.

Leider bekomme ich aber partout die Verbindung zwischen UI und Backend nicht zum laufen.

Zunächst die generellen Informationen:

Setup: Backend, UI, NGINX (reverse proxy) und Let’s encrypt jeweils in eigenem Container
System: Ubuntu 24.04.3 LTS (GNU/Linux 6.8.0-90-generic x86_64)
Docker: 29.1.3
NGINX: alpine
Let’s encrypt: certbot
Edge: noch nicht implementiert
Backend: diverse (2025.10.0, 2025.12.0, 2026.1.0)
Ui: latest (2025.12.0)
DB: noch nicht implementiert
Odoo: noch nicht implementiert

Backend scheint zu laufen und Port 8079 ist erreichbar (Apache Felix).

Meine docker-compose.yml sieht wie folgt aus:

services:
  # ---------- Certbot ----------
  certbot:
    image: certbot/certbot
    container_name: certbot
    volumes:
      - ./certs:/etc/letsencrypt
      - ./certbot-www:/var/www/certbot
    command: >
      certonly --webroot -w /var/www/certbot
      -d example.com -d ems.example.com
    networks:
      - webnet

  # ---------- Nginx Reverse Proxy ----------
  nginx:
    image: nginx:alpine
    container_name: nginx
    ports:
      - "443:443"
      - "80:80"
    volumes:
      - ./certs:/etc/letsencrypt:ro
      - ./nginx/conf.d:/etc/nginx/conf.d:ro
    depends_on:                         # service names
      - openems-backend
      - openems-ui
    networks:
      - webnet

  # ---------- OpenEMS Backend ----------
  openems-backend:                      # service name
#    image: openems/backend:latest
    image: openems/backend:2025.10.0
    container_name: openems_backend     # container name
    hostname: openems_backend
    restart: unless-stopped
    volumes:
      - openems-backend-conf:/var/opt/openems/config:rw
      - openems-backend-data:/var/opt/openems/data:rw
    ports:
      - 8079:8079 # Apache-Felix
      - 8081:8081 # Edge-Websocket
      - 8082:8082 # UI-Websocket
    networks:
      - webnet

  # ---------- OpenEMS UI ----------
  openems-ui:
    image: openems/ui-backend:latest
    container_name: openems_ui
    hostname: openems_ui
    restart: unless-stopped
    environment:
      - WEBSOCKET_HOST=example.com
      - WEBSOCKET_PORT=443
      - WEBSOCKET_PROTOCOL=wss

    networks:
      - webnet

volumes:
  openems-backend-conf:
  openems-backend-data:
   
networks:
  webnet:
    driver: bridge

Diese Config lehnt sich hier an: Deploy OpenEMS Backend to Docker :: Open Energy Management System

Der Vollständigkeit halber hier auch noch meine NGINX Config (./nginx/conf.d/default_prod.conf)

# -------- HTTP → HTTPS Redirect --------
server {
    listen 80;
    server_name example.com ems.example.com;

    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }

    location / {
        return 301 https://$host$request_uri;
    }
}

# -------- HTTPS Server --------
server {
#    listen 443 ssl http2;
    listen 443 ssl;
    server_name example.com ems.example.com;

    ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
#    ssl_ciphers HIGH:!aNULL:!MD5;

    # ---------- OpenEMS UI ----------
    location / {
        proxy_pass http://openems-ui:80;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $remote_addr;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    # ---------- OpenEMS Edge -> OpenEMS Backend  ----------
    location /edge-to-backend {
        proxy_pass http://openems-backend:8081;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        access_log /var/log/nginx/edge-to-backend.access.log;
        error_log /var/log/nginx/edge-to-backend.error.log;
    }

    # ---------- OpenEMS UI -> OpenEMS Backend----------
    location /openems-backend {
        proxy_pass http://openems_backend:8082;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
#        proxy_set_header X-Forwarded-Proto https;
#        proxy_set_header X-Real-IP $remote_addr;
#        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        access_log /var/log/nginx/ui-to-backend.access.log;
        error_log /var/log/nginx/ui-to-backend.error.log;
    }
}

Problembeschreibung

  • alle Container starten
  • Das Backend lässt sich über Apache Felix (port 8079) erreichen
  • https://example.com zeigt: Server nicht erreichbar
  • Ein Verbindung zwischen UI und Backend kommt meines Erachtens nicht zu Stande.

Dinge die ich überprüft/probiert habe:

Ports

sudo docker exec -it openems_backend sh -lc 'netstat -tulpn | egrep "8079|8081|8082" || true'

tcp        0      0 :::8079                 :::*                    LISTEN      -

Also kein Port 8082

Varianten in den Configs

Ein paar wenige Versuche habe ich als Kommentar in meinen Configs stehen lassen. Andere Versuche habe ich der Übersicht halber wieder gelöscht.

Apache Felix → Core.JsonRpcRequestHandler:

  • Status: unsatisfied (reference)
  • Reference edgeManager: Unsatisfied

Ist das eine Spur oder ein Nebenschauplatz?:man_shrugging:

Verschiedene Versionen des Backend

  • 2025.10.0
  • 2025.12.0
  • 2026.1.0

Bin mir aber noch nicht mal sicher, ob ich überhaupt an der richtigen Stelle suche…
Vielen Dank jetzt schon für jeden Hinweis.

Viele Grüsse, Simon

Hallo Simon,

ich würde schlicht behaupten, dass das backend gar nicht vollständig hochgefahren ist. Schau dir doch mal die LOG-Ausgaben an (docker compose logs openems-backend). Auch in der Felix-Admin-Oberfläche im Menü unter OSGi→LogServices kann man einiges sehen.

Ich nutze zwar ein vollständig eigenes docker setup, aber ich denke die Angaben

 `environment:
  - WEBSOCKET_HOST=``example.com``
  - WEBSOCKET_PORT=443
  - WEBSOCKET_PROTOCOL=wss`

können so nicht richtig sein, da du sicher nicht Eigentümer von example.com bist. Da müsste afaik Hostname und Port hin, wo das backend zu erreichen ist - aus Sicht des Browers.

Hallo chpo

Vielen Dank für deine Rückmeldung.

  • Startet das Backend überhaupt?
    Ich habe mir die LOG-Ausgabe angeschaut. Sieht IMHO nicht schlecht aus. Folgende Auffälligkeiten habe ich entdeckt:

openems_backend | [custom-init] No custom files found, skipping…

und ein [WARN] habe ich gefunden:

openems_backend | 2026-01-01T17:08:25,824 [hread-11] WARN [end.metadata.file.MetadataFile] [Metadata.File] Unable to read file [/var/opt/openems/metadata.json]: /var/opt/openems/metadata.json (No such file or directory)
openems_backend | java.io.FileNotFoundException: /var/opt/openems/metadata.json (No such file or directory)

Alles andere sind [INFO] z.T. auch mit “stopped”:
Hier darum die ganze LOG-Ausgabe:

sudo docker compose logs openems-backend

openems_backend  | [migrations] started
openems_backend  | [migrations] no migrations found
openems_backend  | usermod: no changes
openems_backend  | ───────────────────────────────────────────
openems_backend  |  _____ _____ _____ _____ _____ _____ _____
openems_backend  | |     |  _  |   __|   | |   __|     |   __|
openems_backend  | |  |  |   __|   __| | | |   __| | | |__   |
openems_backend  | |_____|__|  |_____|_|___|_____|_|_|_|_____|
openems_backend  |
openems_backend  |     Based on images from linuxserver.io
openems_backend  | ───────────────────────────────────────────
openems_backend  | for further information visit:
openems_backend  | https://openems.io/
openems_backend  |
openems_backend  | ───────────────────────────────────────
openems_backend  | GID/UID:    911/911
openems_backend  | ───────────────────────────────────────
openems_backend  | [custom-init] No custom files found, skipping...
openems_backend  | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling Java Util Logging API support.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling SLF4J API support.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling Apache Commons Logging API support.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling JULI Logger API support.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling Avalon Logger API support.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling JBoss Logging API support.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling Log4J v1 API support.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [org.ops4j.pax.logging.internal.Activator] INFO : Enabling Log4J v2 API support.
openems_backend  | 2026-01-01T17:08:25.174201341Z FelixStartLevel INFO Initializing Log4j2 using default configuration
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Initializing Log4j2 using default configuration
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Starting LoggerContext[name=pax-logging] with configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761...
openems_backend  | 2026-01-01T17:08:25.387040537Z FelixStartLevel INFO Starting LoggerContext[name=pax-logging] with configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761...
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Starting configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761...
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761 started.
openems_backend  | 2026-01-01T17:08:25.393579157Z FelixStartLevel INFO Starting configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761...
openems_backend  | 2026-01-01T17:08:25.394176442Z FelixStartLevel INFO Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761 started.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Stopping configuration org.apache.logging.log4j.core.config.DefaultConfiguration@54ba9525...
openems_backend  | 2026-01-01T17:08:25.396801051Z FelixStartLevel INFO Stopping configuration org.apache.logging.log4j.core.config.DefaultConfiguration@54ba9525...
openems_backend  | 2026-01-01T17:08:25.397880387Z FelixStartLevel INFO Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@54ba9525 stopped.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@54ba9525 stopped.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : LoggerContext[name=pax-logging] started with configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761.
openems_backend  | 2026-01-01T17:08:25.400404737Z FelixStartLevel INFO LoggerContext[name=pax-logging] started with configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Log4J2 configured using default configuration.
openems_backend  | 2026-01-01T17:08:25.401233588Z FelixStartLevel INFO Log4J2 configured using default configuration.
openems_backend  | org.ops4j.pax.logging.pax-logging-log4j2 [org.ops4j.pax.logging.spi.support.EventAdminConfigurationNotifier] INFO : Sending Event Admin notification (configuration successful) to org/ops4j/pax/logging/Configuration
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Stopping configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761...
openems_backend  | 2026-01-01T17:08:25.405088460Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Stopping configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761...
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761 stopped.
openems_backend  | 2026-01-01T17:08:25.407662885Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Configuration org.apache.logging.log4j.core.config.DefaultConfiguration@2041f761 stopped.
openems_backend  | 2026-01-01T17:08:25.474006478Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Starting LoggerContext[name=pax-logging] with configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087...
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Starting LoggerContext[name=pax-logging] with configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087...
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Starting configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087...
openems_backend  | 2026-01-01T17:08:25.625969416Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Starting configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087...
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087 started.
openems_backend  | 2026-01-01T17:08:25.631115301Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087 started.
openems_backend  | 2026-01-01T17:08:25.634832467Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Stopping configuration org.apache.logging.log4j.core.config.NullConfiguration@5d0a3db3...
openems_backend  | 2026-01-01T17:08:25.635737221Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Configuration org.apache.logging.log4j.core.config.NullConfiguration@5d0a3db3 stopped.
openems_backend  | 2026-01-01T17:08:25.635969990Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO LoggerContext[name=pax-logging] started with configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087.
openems_backend  | 2026-01-01T17:08:25.636070760Z CM Configuration Updater (ManagedService Update: pid=[org.ops4j.pax.logging]) INFO Log4J2 configured using configuration from passed properties
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Stopping configuration org.apache.logging.log4j.core.config.NullConfiguration@5d0a3db3...
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Configuration org.apache.logging.log4j.core.config.NullConfiguration@5d0a3db3 stopped.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : LoggerContext[name=pax-logging] started with configuration org.apache.logging.log4j.core.config.properties.PropertiesConfiguration@48281087.
openems_backend  | org.ops4j.pax.logging.pax-logging-api [log4j2] INFO : Log4J2 configured using configuration from passed properties
openems_backend  | 2026-01-01T17:08:25,645 [ogging])] INFO  [ventAdminConfigurationNotifier] Sending Event Admin notification (configuration successful) to org/ops4j/pax/logging/Configuration
openems_backend  | 2026-01-01T17:08:25,644 [artLevel] INFO  [backend.application.BackendApp] ===========================================
openems_backend  | 2026-01-01T17:08:25,656 [artLevel] INFO  [backend.application.BackendApp] OpenEMS Backend version [2025.10.0] started
openems_backend  | 2026-01-01T17:08:25,657 [artLevel] INFO  [backend.application.BackendApp] ===========================================
openems_backend  | 2026-01-01T17:08:25,707 [artLevel] INFO  [.debugcycle.DebugCycleExecutor] Update metrics all 5 Seconds
openems_backend  | 2026-01-01T17:08:25,818 [artLevel] INFO  [end.metadata.file.MetadataFile] Activate [path=/var/opt/openems/metadata.json]
openems_backend  | 2026-01-01T17:08:25,824 [hread-11] WARN  [end.metadata.file.MetadataFile] [Metadata.File] Unable to read file [/var/opt/openems/metadata.json]: /var/opt/openems/metadata.json (No such file or directory)
openems_backend  | java.io.FileNotFoundException: /var/opt/openems/metadata.json (No such file or directory)
openems_backend  |      at java.base/java.io.FileInputStream.open0(Native Method)
openems_backend  |      at java.base/java.io.FileInputStream.open(Unknown Source)
openems_backend  |      at java.base/java.io.FileInputStream.<init>(Unknown Source)
openems_backend  |      at java.base/java.io.FileInputStream.<init>(Unknown Source)
openems_backend  |      at java.base/java.io.FileReader.<init>(Unknown Source)
openems_backend  |      at io.openems.backend.metadata.file.MetadataFile.refreshData(MetadataFile.java:190)
openems_backend  |      at io.openems.backend.metadata.file.MetadataFile.lambda$activate$0(MetadataFile.java:117)
openems_backend  |      at java.base/java.util.concurrent.CompletableFuture$AsyncRun.run(Unknown Source)
openems_backend  |      at java.base/java.lang.Thread.run(Unknown Source)
openems_backend  | 2026-01-01T17:08:25,876 [artLevel] INFO  [d.timedata.dummy.TimedataDummy] [Timedata.Dummy] Activate
openems_backend  | 2026-01-01T17:08:26,279 [artLevel] INFO  [rg.eclipse.jetty.server.Server] jetty-12.0.25; built: 2025-08-11T23:52:37.219Z; git: a862b76d8372e24205765182d9ae1d1d333ce2ea; jvm 21.0.8+9-LTS
openems_backend  | 2026-01-01T17:08:26,346 [artLevel] INFO  [ession.DefaultSessionIdManager] Session workerName=node0
openems_backend  | 2026-01-01T17:08:26,386 [artLevel] INFO  [.server.handler.ContextHandler] Started oeje10s.ServletContextHandler@6fda328d{ROOT,/,b=null,a=AVAILABLE,h=oeje10s.SessionHandler@53c5a4bc{STARTED}}
openems_backend  | 2026-01-01T17:08:26,398 [artLevel] INFO  [.servlet.ServletContextHandler] Started oeje10s.ServletContextHandler@6fda328d{ROOT,/,b=null,a=AVAILABLE,h=oeje10s.SessionHandler@53c5a4bc{STARTED}}
openems_backend  | 2026-01-01T17:08:26,410 [artLevel] INFO  [rg.eclipse.jetty.server.Server] Started oejs.Server@511efb0b{STARTING}[12.0.25,sto=0] @3599ms
openems_backend  | 2026-01-01T17:08:26,524 [artLevel] INFO  [jetty.server.AbstractConnector] Started ServerConnector@72c3ae47{HTTP/1.1, (http/1.1)}{0.0.0.0:8079}
openems_backend  | 2026-01-01T17:08:26,531 [artLevel] INFO  [org.apache.felix.http         ] Started Jetty 12.0.25 at port(s) HTTP:8079 on context path / [minThreads=8,maxThreads=200,acceptors=1,selectors=1,virtualThreadsEnabled=false]
openems_backend  | 2026-01-01T17:08:26,641 [artLevel] INFO  [org.apache.felix.webconsole   ] org.apache.felix.webconsole.internal.compendium.PreferencesConfigurationPrinter not enabled. Reason: Class org/osgi/service/prefs/BackingStoreException missing
openems_backend  | 2026-01-01T17:08:26,697 [artLevel] INFO  [org.apache.felix.webconsole   ] Servlet 3 bridge enabled
openems_backend  | Connection to 127.0.0.1 8079 port [tcp/*] succeeded!
openems_backend  | [ls.io-init] done.

Wie beurteilst du den LOG?

  • nicht Eigentümer von example.com
    Sorry, da war ich zu wenig ausführlich. Die Domain gehört mir tatsächlich nicht. Ich habe aber zu Testzwecken eine Domain registriert und auf die IP meines Test-Servers verbunden. example.com ist darum nur ein Platzhalter, damit ich meine “provisorische Test-URL” nicht publizieren muss. Habe das bei anderen Posts auch schon gesehen und dachte, das sein üblich.

Zudem muss ich noch einen Nachtrag machen: Beim copy-pasten ist mir bei der NGINX-config eine Klammer verloren gegangen. Im Code ist sie aber vorhanden:

    # ---------- OpenEMS UI ----------
    location / {
        proxy_pass http://openems-ui:80;
        proxy_http_version 1.1;

        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $remote_addr;

        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
    
    # ---------- OpenEMS Edge -> OpenEMS Backend  ----------

(Gibt es die Möglichkeit in diesem Forum seine eigenen Einträg nachträglich zu editieren?)

Ich habe das Backend gerade nicht mehr laufen. Falls du nur ein paar einfach Sachen machen willst, reicht ein Edge.

Ich denke aber im Backend braucht man die metadata.json, da darin Benutzerinformationen konfiguriert werden, sofern du Metadata.File verwendest. Für nen Test wäre auch Metadata.Dummy eine Möglichkeit. Ausserdem pfüfe mal im Felix, ob du einen Ui.Websocket konfiguriert und aktiviert hast.

Hallo @S1m0n,

tatsächlich sind deine variablen

    environment:
      - WEBSOCKET_HOST=example.com
      - WEBSOCKET_PORT=443
      - WEBSOCKET_PROTOCOL=wss

falsch. Diese geben nicht an, wo dein UI gehostet ist, sondern wo der UI-Websocket des backends ereichbar ist.

für deine configuration sollten die standart variablen

    environment:
      - WEBSOCKET_HOST=openems_backend
      - WEBSOCKET_PORT=8082

funktionieren.

Und du könntest versuchen die volumes openems-backend-conf und openems-backend-data zu löschen, um das metadata.json problem zu lösen.