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

Closed
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 

sdetweil added a commit that referenced this issue Jan 1, 2025
## [2.30.0] - 2025-01-01

Thanks to: @xsorifc28, @HeikoGr, @bugsounet, @khassel,
@KristjanESPERANTO, @rejas, @sdetweil.

> ⚠️ This release needs nodejs version `v20` or `v22 or higher`, minimum
version is `v20.18.1`

### Added

- [core] Add wayland and windows start options to `package.json` (#3594)
- [docs] Add step for npm publishing in release process (#3595)
- [core] Add GitHub workflow to run spellcheck a few days before each
release (#3623)
- [core] Add test flag to `index.html` to pass to module js for test
mode detection (needed by #3630)
- [core] Add export on animation names (#3644)
- [compliments] Add support for refreshing remote compliments file, and
test cases (#3630)
- [linter] Re-add `eslint-plugin-import`now that it supports ESLint v9
(#3586)
- [linter] Re-activate `eslint-plugin-package-json` to lint
`package.json` (#3643)
- [linter] Add linting for markdown files (#3646)
- [linter] Add some handy ESLint rules.
- [calendar] Add ability to display end date for full date events, where
end is not same day (showEnd=true) (#3650)
- [core] Add text to the config.js.sample file about the locale variable
(#3654, #3655)
- [core] Add fetch timeout for all node_helpers (thru undici, forces
node 20.18.1 minimum) to help on slower systems. (#3660) (3661)

### Changed

- [core] Run code style checks in workflow only once (#3648)
- [core] Fix animations export #3644 only on server side (#3649)
- [core] Use project URL in fallback config (#3656)
- [core] Fix Access Denied crash writing js/positions.js (on synology
nas) #3651. new message, MM starts, but no modules showing (#3652)
- [linter] Switch to 'npx' for lint-staged in pre-commit hook (#3658)

### Removed

- [tests] Remove `node-pty` and `drivelist` from rebuilded test (#3575)
- [deps] Remove `@eslint/js` dependency. Already installed with `eslint`
in deep (#3636)

### Updated

- [repo] Reactivate `stale.yaml` as GitHub action to mark issues as
stale after 60 days and close them 7 days later (if no activity) (#3577,
#3580, #3581)
- [core] Update electron dependency to v32 (test electron rebuild) and
all other dependencies too (#3657)
- [tests] All test configs have been updated to allow full external
access, allowing for easier debugging (especially when running as a
container)
- [core] Run and test with node 23 (#3588)
- [workflow] delete exception `allow-ghsas: GHSA-8hc4-vh64-cxmj` in
`dep-review.yaml` (#3659)

### Fixed

- [updatenotification] Fix pm2 using detection when pm2 script is inside
or outside MagicMirror root folder (#3576) (#3605) (#3626) (#3628)
- [core] Fix loading node_helper of modules: avoid black screen, display
errors and continue loading with next module (#3578)
- [weather] Change default value for weatherEndpoint of provider
openweathermap to "/onecall" (#3574)
- [tests] Fix electron tests with mock dates, the mock on server side
was missing (#3597)
- [tests] Fix testcases with hard coded Date.now (#3597)
- [core] Fix missing `basePath` where `location.host` is used (#3613)
- [compliments] croner library changed filenames used in latest version
(#3624)
- [linter] Fix ESLint ignore pattern which caused that default modules
not to be linted (#3632)
- [core] Fix module path in case of sub/sub folder is used and use
path.resolve for resolve `moduleFolder` and `defaultModuleFolder` in
app.js (#3653)
- [calendar] Update to resolve issues #3098 #3144 #3351 #3422 #3443
#3467 #3537 related to timezone changes
- [calendar] Fix #3267 (styles array), also fixes event with both exdate
AND recurrence(and testcase)
- [calendar] Fix showEndsOnlyWithDuration not working, #3598, applies
ONLY to full day events
- [calendar] Fix showEnd for Full Day events (#3602)
- [tests] Suppress "module is not defined" in e2e tests (#3647)
- [calendar] Fix #3267 (styles array, really this time!)
- [core] Fix #3662 js/positions.js created incorrectly

---------

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Michael Teeuw <[email protected]>
Co-authored-by: Kristjan ESPERANTO <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Karsten Hassel <[email protected]>
Co-authored-by: Ross Younger <[email protected]>
Co-authored-by: Veeck <[email protected]>
Co-authored-by: Bugsounet - Cédric <[email protected]>
Co-authored-by: jkriegshauser <[email protected]>
Co-authored-by: illimarkangur <[email protected]>
Co-authored-by: vppencilsharpener <[email protected]>
Co-authored-by: veeck <[email protected]>
Co-authored-by: Paranoid93 <[email protected]>
Co-authored-by: Brian O'Connor <[email protected]>
Co-authored-by: WallysWellies <[email protected]>
Co-authored-by: Jason Stieber <[email protected]>
Co-authored-by: jargordon <[email protected]>
Co-authored-by: Daniel <[email protected]>
Co-authored-by: Ryan Williams <[email protected]>
Co-authored-by: Panagiotis Skias <[email protected]>
Co-authored-by: Marc Landis <[email protected]>
Co-authored-by: HeikoGr <[email protected]>
Co-authored-by: Pedro Lamas <[email protected]>
Co-authored-by: veeck <[email protected]>
@sdetweil sdetweil closed this as completed Jan 1, 2025
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