Skip to main content

No project description provided

Project description

tljh-repo2docker

Github Actions Status

TLJH plugin providing a JupyterHub service to build and use Docker images as user environments. The Docker images are built using repo2docker.

Requirements

This plugin requires The Littlest JupyterHub 1.0 or later (running on JupyterHub 4+).

Installation

During the TLJH installation process, use the following post-installation script:

#!/bin/bash

# install Docker
sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository -y "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable"
sudo apt update && sudo apt install -y docker-ce

# pull the repo2docker image
sudo docker pull quay.io/jupyterhub/repo2docker:main

# install TLJH 1.0
curl https://tljh.jupyter.org/bootstrap.py
  | sudo python3 - \
    --version 1.0.0 \
    --admin test:test \
    --plugin tljh-repo2docker

Refer to The Littlest JupyterHub documentation for more info on installing TLJH plugins.

Configuration

This Python package is designed for deployment as a service managed by JupyterHub. The service runs its own Tornado server. Requests will be forwarded to it by the JupyterHub internal proxy from the standard URL https://{my-hub-url}/services/my-service/.

The available settings for this service are:

  • port: Port of the service; defaults to 6789
  • ip: Internal IP of the service; defaults to 127.0.0.1
  • default_memory_limit: Default memory limit of a user server; defaults to None
  • default_cpu_limit: Default CPU limit of a user server; defaults to None
  • machine_profiles: Instead of entering directly the CPU and Memory value, tljh-repo2docker can be configured with pre-defined machine profiles and users can only choose from the available option; defaults to []

This service requires the following scopes : read:users, admin:servers and read:roles:users. Here is an example of registering tljh_repo2docker's service with JupyterHub

# jupyterhub_config.py

from tljh_repo2docker import TLJH_R2D_ADMIN_SCOPE
import sys

c.JupyterHub.services.extend(
    [
        {
            "name": "tljh_repo2docker",
            "url": "http://127.0.0.1:6789", # URL must match the `ip` and `port` config
            "command": [
                sys.executable,
                "-m",
                "tljh_repo2docker",
                "--ip",
                "127.0.0.1",
                "--port",
                "6789"
            ],
            "oauth_no_confirm": True,
        }
    ]
)
# Set required scopes for the service and users
c.JupyterHub.load_roles = [
    {
        "description": "Role for tljh_repo2docker service",
        "name": "tljh-repo2docker-service",
        "scopes": ["read:users", "admin:servers", "read:roles:users"],
        "services": ["tljh_repo2docker"],
    },
    {
        "name": "user",
        "scopes": [
            "self",
            # access to the serve page
            "access:services!service=tljh_repo2docker",
        ],
    },
]

By default, only users with an admin role can access the environment builder page and APIs, by leveraging the RBAC system of JupyterHub, non-admin users can also be granted the access right.

Here is an example of the configuration

# jupyterhub_config.py

from tljh_repo2docker import TLJH_R2D_ADMIN_SCOPE
import sys

c.JupyterHub.services.extend(
    [
        {
            "name": "tljh_repo2docker",
            "url": "http://127.0.0.1:6789",
            "command": [
                sys.executable,
                "-m",
                "tljh_repo2docker",
                "--ip",
                "127.0.0.1",
                "--port",
                "6789"
            ],
            "oauth_no_confirm": True,
            "oauth_client_allowed_scopes": [
                TLJH_R2D_ADMIN_SCOPE, # Allows this service to check if users have its admin scope.
            ],
        }
    ]
)

c.JupyterHub.custom_scopes = {
    TLJH_R2D_ADMIN_SCOPE: {
        "description": "Admin access to tljh_repo2docker",
    },
}

c.JupyterHub.load_roles = [
    ... # Other role settings
    {
        "name": 'tljh-repo2docker-service-admin',
        "users": ["alice"],
        "scopes": [TLJH_R2D_ADMIN_SCOPE],
    },
]

Usage

List the environments

The Environments page shows the list of built environments, as well as the ones currently being built:

environments

Add a new environment

Just like on Binder, new environments can be added by clicking on the Add New button and providing a URL to the repository. Optional names, memory, and CPU limits can also be set for the environment:

add-new

Follow the build logs

Clicking on the Logs button will open a new dialog with the build logs:

logs

Select an environment

Once ready, the environments can be selected from the JupyterHub spawn page:

select-env

Private Repositories

tljh-repo2docker also supports building environments from private repositories.

It is possible to provide the username and password in the Credentials section of the form:

image

On GitHub and GitLab, a user might have to first create an access token with read access to use as the password:

image

Machine profiles

Instead of entering directly the CPU and Memory value, tljh-repo2docker can be configured with pre-defined machine profiles and users can only choose from the available options. The following configuration will add 3 machines with labels Small, Medium and Large to the profile list:

c.JupyterHub.services.extend(
    [
        {
            "name": "tljh_repo2docker",
            "url": "http://127.0.0.1:6789",
            "command": [
                sys.executable,
                "-m",
                "tljh_repo2docker",
                "--ip",
                "127.0.0.1",
                "--port",
                "6789",
                "--machine_profiles",
                '{"label": "Small", "cpu": 2, "memory": 2}',
                "--machine_profiles",
                '{"label": "Medium", "cpu": 4, "memory": 4}',
                "--machine_profiles",
                '{"label": "Large", "cpu": 8, "memory": 8}'

            ],
            "oauth_no_confirm": True,
        }
    ]
)

image

Extra documentation

tljh-repo2docker is currently developed as part of the Plasma project.

See the Plasma documentation on user environments for more info.

Building JupyterHub-ready images

See: https://repo2docker.readthedocs.io/en/latest/howto/jupyterhub_images.html

Run Locally

Check out the instructions in CONTRIBUTING.md to set up a local environment.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tljh_repo2docker-2.0.0a0.tar.gz (1.6 MB view details)

Uploaded Source

Built Distribution

tljh_repo2docker-2.0.0a0-py2.py3-none-any.whl (1.2 MB view details)

Uploaded Python 2 Python 3

File details

Details for the file tljh_repo2docker-2.0.0a0.tar.gz.

File metadata

  • Download URL: tljh_repo2docker-2.0.0a0.tar.gz
  • Upload date:
  • Size: 1.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.11.8

File hashes

Hashes for tljh_repo2docker-2.0.0a0.tar.gz
Algorithm Hash digest
SHA256 a350ae63ce4878eb95eb1f55c5aee13d1f5b470696c37c35fa97ad34623e25cd
MD5 e40a7200d02ae71396904b1a58a58326
BLAKE2b-256 76c62c4c7290208b9430b74ff8dd8826363887f94518130f9368c4983665baa5

See more details on using hashes here.

File details

Details for the file tljh_repo2docker-2.0.0a0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for tljh_repo2docker-2.0.0a0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 e438ba74e31f08c454eea48ce2e4050df86c305408087cc165e49814a8009cff
MD5 0804fa31e49be4521b7a3ec90ddc2f1b
BLAKE2b-256 12dfa04b685e14417e698e4f305c6bb948faf09e79ada3e4458014d38407aa5c

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page