-
Notifications
You must be signed in to change notification settings - Fork 82
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
Support running myst server behind JupyterHub URL proxy #302
Comments
Thanks for opening your first issue here! Engagement like this is essential for open source projects! 🤗 |
Thanks @fperez - figuring out how best to make this work is going to be a bit tricky. In the current app, there are two servers involved (one for content, and one for server-side rendering), both need to be coordinated on the base path, and that is relatively involved in the routing framework that we use. Understanding the use case better for this: this is to give users of a jupyterhub a local development experience where they can preview the work they are doing? There might be a few other solutions that are easier: (1) pushing ahead on jupyterlab-myst to make a multi-page experience, as well as support markdown files; (2) having a jupyterlab plugin that exposes a new URL specific for myst websites (not sure how hard this is); (3) create a new template that has routing specific for use in jupyterlab (I think this could suffer the same problems as the current app); (4) focusing on static rendering #188 which you hinted at as well. I will continue to think on this. I think that some combination of (1) and (4) are probably the most achievable in the short-ish term. |
Thx @rowanc1 - for reference, it's for students/users (myself included) to be able to test their site builds "locally" when "locally" means in a cloud-hosted hub, before they push anything to Github. This page summarizes the process for doing it with JupyterBook/Sphinx. Meeting that need will be pretty critical for users to rely on the myst toolchain regularly when working on hosted hubs. |
Yes! (I should have just said that instead of rambling above :) |
If we made an in-jupyterlab preview (e.g. in a native jupyterlab tab, more similar to the markdown --> markdown preview experience), which allows you to navigate and preview the final rendered book, would that satisfy the use case? |
As you know, I'm hugely 👍 on your (4) above, as I think for many use cases that's a very important capability. But I've also been thinking about how we can ensure that in general, apps that rely on running a local web app work as seamlessly as possible on a hosted hub. Here's an example of setting that up for nbdime that I got running yesterday. I've been pondering, together with @yuvipanda and @ryanlovett, how we might do this more generically for all such apps. There may be a good convention we could start honoring about recognizing some environment variable that indicates the web app will be proxied, with enough info for the app to adjust its various base URL settings to work on a hosted hub. Input welcome, this is definitely above my JS/web pay grade. I just want it to work :) |
Yes, I think that would go a very long way, and if it's actually reliable it might be enough. I do worry about CSS clashes with Lab itself, and that it may be tricky to get the whole thing to render correctly. But there may be enough iframe tricks that can be played there for it to all work. As you know, my knowledge in this space is near zero, so I trust you! |
@fperez I think that this might work now with #188 complete. You should be able to set the export BASE_URL=${JUPYTERHUB_SERVICE_PREFIX}/proxy/absolute/8000
myst build --html
cd _build/html
python -m http.server Right now, the live server is not setup to do this as there are a few other things that make it less possible, but with static export, this unblocks the use case of at least being able to see the built html pages (in static form). If this works, we can start to streamline it with some of your other suggestions..! |
I'd like to pick this up as a needed feature to be able have full featured jupyterlab based experience for myst document authoring. Having a feature like
that would allow rendered web version for encouraging users to author myst documents entirely within a JupyterLab environment. Bonus feature request: create a JupyterLab extension that wraps the |
@jmunroe That would be great, thanks! Running a static server as described above showed the html content, but the CSS was missing. I also tried the non-absolute variant. Ideally, there could be a jupyter-myst-proxy extension which knew how to launch myst in the right way, so that all users have to do is click on a jupyterlab launcher. jupyter-shiny-proxy is a comparable example. However shiny-server can also render directories for which there is no app configured. It just displays a file listing. The user can navigate through the filesystem until shiny-server sees a shiny app, then it does the right thing. I don't think myst can do that. To your bonus feature request, in jupyter-server-proxy, if new_browser_tab=True is specified, the proxied app will show up in a jupyterlab tab (in workspace) rather than a new browser tab. |
Hi friends, any update on this? |
Hi @cboettig, not quite yet. Right now, a big focus is on releasing JB2 on top of MyST, so that's where most of my cycles are going. I will take another look shortly, though; it may be a fresh pair of eyes is useful! |
ok no worries. when building directly with
I've found I can just run
and open |
Jupyter book 1 and mystmd are entirely different tools, joined by a common (mostly) language (MyST flavoured markdown). Jupyter book 2 will be built on MyST, and we intend to make it easy and convenient to preview a full myst site from a hub. At the same time, we intend to improve the jupyterlab preview experience of myst. |
that would feet our use case which is not related w/ jupyter at all. |
workaround to get a live server with a base url:
export BASE_URL=foobar
nohup watchmedo shell-command -v \
--patterns='*.md;*.ipynb' \
--recursive \
--command='myst build --html && pkill node' \
--ignore-patterns='./_build/html/build/*;nohup.out' \
--drop \
. &
cd _build/html
printf y|npx http-server --port 8000 --cors |
Thanks for figuring out that workaround and sharing, @parisni! Ultimately we'll want a cleaner solution to be a default, but I'm perfectly OK using this for now if needed, it definitely isn't trivial to figure out so your help is much appreciated! |
Which area is this feature request for?
Command Line Tools
Describe the feature you'd like to request
While it's not super convenient, it is possible to build jupyter-books to be viewed in a hosted JuptyerHub instance thanks to the URL proxy it uses. In that case, one has to invoke sphinx manually in order to force a special
html_baseurl
, via:But once this is done, one can simply run in the
_build/html
directory the command:and access the URL
https://your-jupyterhub.org/user-redirect/proxy/8000/index.html
.When I try to follow the equivalent process with
myst
, by running the myst server and trying to access.../proxy/3000/index.html
, I get redirected to a page that looks like this:Describe the solution you'd like
Ideally, if the environment variable
${JUPYTERHUB_SERVICE_PREFIX}
is set, then the myst server would respond with the proper handling equivalent to the sphinx config example above. And in a future setting where static HTML builds (à la sphix/jbook) are possible, then it would also recognize this.If doing it automatically isn't desirable, then at least having the option to manually set the base URL like sphinx supports would work.
Describe alternatives you've considered
No response
The text was updated successfully, but these errors were encountered: