MagicMirror Forum
    • Recent
    • Tags
    • Unsolved
    • Solved
    • MagicMirror² Repository
    • Documentation
    • 3rd-Party-Modules
    • Donate
    • Discord
    • Register
    • Login
    A New Chapter for MagicMirror: The Community Takes the Lead
    Read the statement by Michael Teeuw here.

    Docker MagicMirror + a separate "dumb" display Pi (remote kiosk over a reverse proxy)

    Scheduled Pinned Locked Moved General Discussion
    2 Posts 2 Posters 18 Views 2 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • R Offline
      Rags
      last edited by

      Sharing a setup that’s been working well for me, in case it’s useful to anyone else juggling a physical MM display on aging/fragile hardware.
      Background: I had MagicMirror running natively on a Raspberry Pi 3B with a monitor attached. I wanted to move to Docker, but didn’t want to run Docker on the same Pi that’s driving the display, that Pi is old, and I didn’t want display/GPU quirks tangled up with container management.

      What I ended up with instead:

      • MagicMirror runs as a single Docker container on a separate, more capable Pi on the same home network , completely headless, no monitor attached.
      • The Pi with the physical monitor doesn’t run MagicMirror at all anymore. It just runs a browser in kiosk mode, pointed at a small local reverse-proxy process running on that same Pi, which in turn proxies through to the Docker container’s web UI.
        Why the proxy, instead of just pointing the browser straight at containerhost:8080?
        Two reasons:
      1. MagicMirror sends X-Frame-Options: SAMEORIGIN, which matters if you want to wrap the feed in your own page (see #2).
      2. I wanted a couple of small custom status overlays on the display itself — e.g. a banner if the Docker host becomes unreachable, or if internet connectivity drops but the local container is still fine. To overlay anything on top of MM’s own page you need it loaded same-origin, so a tiny local Node reverse-proxy on the display Pi re-serves the container’s content from localhost, strips that header, and the wrapper page around it handles the status banners.
        Why this arrangement, generally:

      One MagicMirror instance/config to maintain, no matter how many physical screens you eventually want — each display Pi is just “a browser + a small proxy,” nothing module- or backend-specific.
      Any hardware-specific pain (GPU driver quirks, monitor power management, etc.) on the display Pi stays isolated from the actual MagicMirror process, a crash or leak in a module’s backend logic can’t take the display down, since they’re not sharing a process tree anymore.

      Honest caveat: this doesn’t make the display Pi itself lighter, it’s still a real browser doing real DOM/JS rendering and image decoding locally, so don’t expect a resource-usage miracle on the display side. What you get is architectural: single source of truth for MM itself, and a much smaller, simpler thing running on whatever hardware is stuck driving a screen
      I’m pairing this with a Radar motion sensor for wake-on-motion, poll a GPIO pin and call dpms_control on on a HIGH reading, dpms_control off after N minutes of no motion. One thing worth knowing if you’re doing the same: Trixie’s kernel exposes the GPIO chip at a different base offset than older Raspberry Pi OS versions, so older libraries like onoff that write raw BCM pin numbers straight to sysfs (/sys/class/gpio/export) fail with EINVAL. Shelling out to gpioget/gpiomon from libgpiod-tools instead sidesteps that entirely:

      B 1 Reply Last reply Reply Quote 1
      • B Offline
        bwente @Rags
        last edited by

        @Rags I might try that out. But use a Fully Kiosk Browser on an Android tablet for the display.
        I could probably use the camera for motion detection.

        1 Reply Last reply Reply Quote 0

        Hello! It looks like you're interested in this conversation, but you don't have an account yet.

        Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

        With your input, this post could be even better 💗

        Register Login
        • 1 / 1
        • First post
          Last post
        Enjoying MagicMirror? Please consider a donation!
        MagicMirror created by Michael Teeuw.
        Forum managed by Sam, technical setup by Karsten.
        This forum is using NodeBB as its core | Contributors
        Contact | Privacy Policy