Skip to main content

JupyterHub

JupyterHub deployment for Jupyter UI is currently under development and needs community contributions to complete the integration.

Current Status​

Jupyter UI components are compatible with JupyterHub's authentication system since @datalayer/jupyter-react is built as a Jupyter Server extension. Initial proof-of-concept deployments have been successful, but complete documentation and production-ready configurations are still in progress.

Known Working Approach​

Based on community experimentation (#191), the following approach has been validated:

1. Install Jupyter UI​

cd /path/to/jupyter-ui
pip install -e .

2. Configure JupyterHub​

Update your jupyterhub_config.py:

# Set the default landing page to Jupyter UI
c.Spawner.default_url = '/jupyter_react'

# Configure the single-user app (if needed)
c.Spawner.environment = {
'JUPYTERHUB_SINGLEUSER_APP': 'jupyter_react.serverextension'
}

3. Launch and Access​

The Jupyter UI application will be accessible at:

http://your-jupyterhub-domain/jupyter_react

Known Limitations​

  • Base URL Handling: Some JavaScript assets may not load correctly with custom base URLs. The index.html template needs updates to properly include JupyterHub's base_url.
  • Asset Paths: Static assets may require path adjustments in production configurations.
  • Incomplete Documentation: Setup steps need to be fully documented and tested across different JupyterHub configurations.

Integration Options​

Several approaches are being explored:

Option 1: JUPYTERHUB_SINGLEUSER_APP​

Use JupyterHub's environment variable to specify a custom application:

c.Spawner.environment = {
'JUPYTERHUB_SINGLEUSER_APP': 'your.custom.module'
}

Reference: JupyterHub User Environment Configuration

Option 2: Custom Spawner​

Create a custom spawner that launches Jupyter UI. See:

Option 3: Proxy Integration​

Use JupyterHub's configurable HTTP proxy to serve Jupyter UI alongside other services.

We Need Your Help! 🙋​

This deployment method needs community contributions to become production-ready. We're looking for help with:

🐛 Testing & Bug Reports​

  • Test Jupyter UI with different JupyterHub configurations (Docker, Kubernetes, bare metal)
  • Report issues with authentication, base URL handling, or asset loading
  • Validate the setup on different operating systems and environments

📝 Documentation​

  • Document step-by-step installation procedures
  • Create configuration examples for common setups
  • Write troubleshooting guides based on real deployment experiences

💻 Code Contributions​

  • Fix base URL handling in templates
  • Improve static asset path resolution
  • Add JupyterHub-specific configuration options
  • Create example Helm charts for Kubernetes deployments

🔧 Infrastructure​

  • Create Docker images with Jupyter UI + JupyterHub
  • Build example deployment configurations (docker-compose, k8s manifests)
  • Test with different authentication providers (OAuth, LDAP, etc.)

How to Contribute​

  1. Join the discussion on GitHub Issue #191
  2. Share your experience - Even partial setups or failed attempts help others
  3. Submit PRs for documentation improvements or bug fixes
  4. Test and report your deployment configuration

Resources​

Community Support​

If you're working on a JupyterHub deployment or have questions:

  • GitHub Discussions: Share configurations and ask questions
  • Issue Tracker: Report bugs or request features
  • Pull Requests: Submit improvements to documentation or code

Your contributions will help make Jupyter UI a robust solution for JupyterHub multi-user environments!