question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Live reload not working with reverse proxy

See original GitHub issue

Have you read the Contributing Guidelines on issues?

Prerequisites

  • I’m using the latest version of Docusaurus.
  • I have tried the npm run clear or yarn clear command.
  • I have tried rm -rf node_modules yarn.lock package-lock.json and re-installing packages.
  • I have tried creating a repro with https://new.docusaurus.io.
  • I have read the console error message carefully (if applicable).

Description

When running Docusaurus behind a reverse proxy (Codespaces, code-server etc.), Docusaurus is likely being accessed under a different url than it is being exposed on. (eg. localhost:3000 --Docker & Reverse Proxy-> dev.mycodespace.io) In this scenario (Docusaurus needs to be run with --host 0.0.0.0), webpack uses the same options for the web socket server as for the dev server, and passes those on to the client: protocol=ws%3A&hostname=0.0.0.0&port=3000&pathname=%2Fws&logging=warn&reconnect=10 (https://github.com/webpack/webpack-dev-server/blob/master/lib/Server.js#L634). Luckily, 0.0.0.0 is replaced by self.location.hostname (https://github.com/webpack/webpack-dev-server/blob/master/client-src/utils/createSocketURL.js#L91), same goes for the protocol, but there is no way to correct the incorrect port, so there must be a way for the developer to specify this. This should be implemented here: https://github.com/facebook/docusaurus/blob/main/packages/docusaurus/src/commands/start.ts#L190

For those who are looking for a solution for the time being, this patch will make webpack hot reload connect to self.location.port.

diff --git a/node_modules/@docusaurus/core/lib/commands/start.js b/node_modules/@docusaurus/core/lib/commands/start.js
index 4fd663b..3678353 100644
--- a/node_modules/@docusaurus/core/lib/commands/start.js
+++ b/node_modules/@docusaurus/core/lib/commands/start.js
@@ -142,6 +142,9 @@ async function start(siteDirParam = '.', cliOptions = {}) {
                 warnings: false,
                 errors: true,
             },
+            webSocketURL: {
+                port: 0
+            }
         },
         headers: {
             'access-control-allow-origin': '*',

Reproducible demo

No response

Steps to reproduce

  1. Run Docusaurus behind a reverse proxy (inside a Docker Container in this example)
  2. Start dev mode pnpm start --host 0.0.0.0
  3. Open console and see errors (also no live reload)

Expected behavior

Docusaurus should automatically refresh after changes to the source file.

Actual behavior

It does not.

Your environment

pnpm start --host 0.0.0.0 inside a Docker Container that rebinds :3000 -> :3007 hidden behind a reverse proxy that serves :3007 on dev.mycodespace.io

Self-service

  • I’d be willing to fix this bug myself.

Issue Analytics

  • State:closed
  • Created a year ago
  • Comments:5 (3 by maintainers)

github_iconTop GitHub Comments

1reaction
jeengbecommented, Aug 10, 2022

The snippet fixes the problem, since it tells HMR to use the same port that the website is currently running on. You should also consider always passing 0.0.0.0 as hostname, since that sets it to the current domain.

The following code snippets go together, and this is where the issue arises:

Will provide a repo with steps to reproduce asap

0reactions
jeengbecommented, Aug 12, 2022

I do very well understand that. Luckily, I had a similar configuration lying around and quickly managed to throw together a working sample repository. Note that you might have to wait a little for Docusaurus to finish building upon launching it. Locate to localhost, and open dev tools to see ws:// connections being made to localhost:3000 image

The patch fixes this issue as it, as outlined above with code references, makes hmr use the port the site is being accessed on.

Read more comments on GitHub >

github_iconTop Results From Across the Web

Setting up Hot Reloading behind a Reverse Proxy | Raccoons
This blog will explain how you can set up Hot Reloading behind a Reverse Proxy. This way, you can work more efficiently and...
Read more >
Multiple Vue.js sites / NGINX reverse proxies / Hot Reload not ...
I found out my vue.config.js, devserver "public" property was set incorrectly. According to the webpack devserver documentation, the devserver ...
Read more >
Live Reloading An Angular 2+ App Behind NGINX
Reverse proxy traffic to this port using NGINX. After restarting or reloading your NGINX instance (the simplest way is to run nginx -s...
Read more >
Development - Parcel
Parcel includes a development server out of the box supporting hot reloading, HTTPS, an API proxy, and more.
Read more >
Browser Refreshing - CodeKit
That's the only one CodeKit will auto-refresh. When you use an external server, CodeKit becomes a reverse-proxy; ... It Doesn't Work In Firefox!...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found