Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MagicMirror loading fails behind reverse proxy after upgrading to v2.29 due to missing environment variables #3613

Open
XTrandi opened this issue Nov 1, 2024 · 4 comments

Comments

@XTrandi
Copy link

XTrandi commented Nov 1, 2024

Platform: Raspbian GNU/Linux 11 (bullseye) on Raspberry Pi 2

Node Version: 22.11.0

MagicMirror² Version: 2.29.0

Description: After upgrading MagicMirror from v2.28.0 to v2.29.0 my web interface won't display anything. Turning on developer tools displays missing /env subpath resulting in an exception in loader.js / main.js and subsequent loading.
env_404-notfound

Steps to Reproduce: I use a nginx webserver, which uses a reverse proxy on /apps/MagicMirror to redirect it to hostname:8080. My config.js has the reverse proxy included.

let config = {
	address: "0.0.0.0",
	port: 8080,
//	basePath: "/",
	basePath: "/apps/MagicMirror/", 	// The URL path where MagicMirror² is hosted. If you are using a Reverse proxy
					// you must set the sub path here. basePath must end with a /
	...
};

Expected Results: As for previous versions socket.io uses the basePath to establish socket connection between client and server. The initial loading for loading environment variables should, too.

Actual Results: MagicMirror loading fails. As a workaround I modified loader.js to

  const res = await fetch(`${location.protocol}//${location.host}/` + config.basePath + `/env`);

in order to make my application work again. Probably needs further refinement and exception handling.

@khassel khassel added the bug label Nov 1, 2024
@khassel
Copy link
Collaborator

khassel commented Nov 1, 2024

thanks, we should have a test for this ...

@khassel khassel self-assigned this Nov 1, 2024
@khassel
Copy link
Collaborator

khassel commented Nov 1, 2024

we should have a test for this ...

but I have no idea for this without a reverse proxy ...

rejas pushed a commit that referenced this issue Nov 2, 2024
fixes #3613 

wanted to write a test for `basePath` but have no idea at the moment to
simulate this without a reverse proxy.

Here my test setup for documentation:
```yaml
networks:
  proxy:
    driver: bridge

services:
  socket-proxy:
    privileged: true
    image: tecnativa/docker-socket-proxy:edge
    container_name: socket-proxy
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    environment:
      CONTAINERS: 1
    ports:
      - "127.0.0.1:2375:2375"
    networks:
      - proxy

  traefik:
    image: traefik:latest
    container_name: traefik
    restart: unless-stopped
    user: 1000:1000
    command:
      - "--providers.docker=true"
      - "--providers.docker.network=traefik_proxy"
      - "--providers.docker.endpoint=tcp://socket-proxy:2375"
      - "--entryPoints.http.address=:80"
      - "--global.sendAnonymousUsage=false"
      - "--log.level=INFO"
      - "--api=true"
      - "--api.dashboard=true"
#      - "--accessLog=true"
#      - "--accesslog.fields.defaultmode=keep"
#      - "--accesslog.fields.headers.defaultmode=keep"
    networks:
      - proxy
    ports:
      - "80:80"

  magicmirror:
    image: karsten13/magicmirror:develop
    container_name: mm
    restart: unless-stopped
    entrypoint:
      - sleep
      - infinity
    networks:
      - proxy
    labels:
      - "traefik.http.services.karsten13.loadbalancer.server.port=8080"
      - "traefik.http.routers.k13-http.service=karsten13"
      - "traefik.http.routers.k13-http.entrypoints=http"
      - "traefik.http.routers.k13-http.rule=Host(`localhost`) && PathPrefix(`/testbasepath`)"
      - "traefik.http.middlewares.k13-stripprefix.stripprefix.prefixes=/testbasepath"
      - "traefik.http.routers.k13-http.middlewares=k13-stripprefix"
```
@sdetweil
Copy link
Collaborator

so, i created a simple proxy it works for whatever I code to use the port (config +10)
but not everything is sent thru the proxy.
basePath:"/apps/MagicMirror/",

server.js
in testmode (#3631)

			if(process.env.mmTestMode === 'true' ){
				const httpProxy = require('http-proxy')
				var proxy = httpProxy.createProxyServer({});

				//
				//  proxies the request, but removes the basePath as we are in the same location
				// this is just for testing the basePath function
				//
				console.log("setup proxy server")
				http.createServer(function (req, res) {
				  // This simulates an operation that takes 500ms to execute
				    const requestedUrl = req.url;
  					console.log("proxy for="+requestedUrl);
  					if(config.basePath.length>1 && requestedUrl.startsWith(config.basePath)){
  						req.url=requestedUrl.slice(config.basePath.length)
  					}
  					// send the request to the normal port
				    proxy.web(req, res, {
				      target: 'http://localhost:'+port
				    });
				}).listen(port+10);
			}

@sdetweil
Copy link
Collaborator

sdetweil commented Nov 12, 2024

log of requests thru proxy... only socket.io uses the basePath prefix
when opening http://localhost:8100
the link thru http://localhost:8090 (configured port) doesn't work

[2024-11-12 10:27:49.178] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o1lq0dc6&sid=mfop4E6RGkZm80rWAAAL 
[2024-11-12 10:27:49.178] [LOG]   proxy for=/modules/MMM-MealieMenu//MMM-MealieMenu.njk?s=1731428869176 
[2024-11-12 10:27:49.179] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o1lq0ml2&sid=VVAvAH20rHv4prhHAAAA 
[2024-11-12 10:27:49.180] [LOG]   proxy for=/modules/MMM-MealieMenu//MMM-MealieMenu.njk?s=1731428869177 
[2024-11-12 10:27:49.237] [LOG]   proxy for=/modules/default/newsfeed//newsfeed.njk?s=1731428869236 
[2024-11-12 10:27:54.091] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o1pii4km&sid=mfop4E6RGkZm80rWAAAL 
[2024-11-12 10:27:54.092] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o1piixhy&sid=mfop4E6RGkZm80rWAAAL 
[2024-11-12 10:27:57.289] [LOG]   proxy for=/socket.io/?EIO=4&transport=polling&t=PCXD0Fd&sid=KlLUkZ_qGwJxsjlTAAAI 
[2024-11-12 10:27:57.289] [LOG]   proxy for=/socket.io/?EIO=4&transport=polling&t=PCXD0Fe&sid=KlLUkZ_qGwJxsjlTAAAI 
[2024-11-12 10:27:59.237] [LOG]   proxy for=/modules/default/newsfeed//newsfeed.njk?s=1731428879235 
[2024-11-12 10:28:09.239] [LOG]   proxy for=/modules/default/newsfeed//newsfeed.njk?s=1731428889237 
[2024-11-12 10:28:09.509] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o21er6lf&sid=VVAvAH20rHv4prhHAAAA 
[2024-11-12 10:28:09.510] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o21esqiq&sid=VVAvAH20rHv4prhHAAAA 
[2024-11-12 10:28:19.107] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o28td0nx&sid=mfop4E6RGkZm80rWAAAL 
[2024-11-12 10:28:19.108] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o28tecyy&sid=mfop4E6RGkZm80rWAAAL 
[2024-11-12 10:28:19.237] [LOG]   proxy for=/modules/default/newsfeed//newsfeed.njk?s=1731428899236 
[2024-11-12 10:28:22.295] [LOG]   proxy for=/socket.io/?EIO=4&transport=polling&t=PCXD6MM&sid=KlLUkZ_qGwJxsjlTAAAI 
[2024-11-12 10:28:22.296] [LOG]   proxy for=/socket.io/?EIO=4&transport=polling&t=PCXD6MM.0&sid=KlLUkZ_qGwJxsjlTAAAI 
[2024-11-12 10:28:29.237] [LOG]   proxy for=/modules/default/newsfeed//newsfeed.njk?s=1731428909235 
[2024-11-12 10:28:30.253] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o2hezy3u&sid=mfop4E6RGkZm80rWAAAL 
[2024-11-12 10:28:30.255] [INFO]  [MMM-MealieMenu] Week starts: 2024-11-11, next week starts: 2024-11-18 
[2024-11-12 10:28:30.541] [INFO]  Mealie error={} 
[2024-11-12 10:28:30.550] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o2hn7iig&sid=mfop4E6RGkZm80rWAAAL 
[2024-11-12 10:28:30.550] [LOG]   proxy for=/modules/MMM-MealieMenu//MMM-MealieMenu.njk?s=1731428910548 
[2024-11-12 10:28:30.551] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o2hn8hdp&sid=VVAvAH20rHv4prhHAAAA 
[2024-11-12 10:28:30.552] [LOG]   proxy for=/modules/MMM-MealieMenu//MMM-MealieMenu.njk?s=1731428910549 
[2024-11-12 10:28:34.518] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o2kpftyg&sid=VVAvAH20rHv4prhHAAAA 
[2024-11-12 10:28:34.519] [LOG]   proxy for=/apps/MagicMirror/socket.io/?EIO=4&transport=polling&t=o2kpgww0&sid=VVAvAH20rHv4prhHAAAA 
[2024-11-12 10:28:39.237] [LOG]   proxy for=/modules/default/newsfeed//newsfeed.njk?s=1731428919235 

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants