Added: NbGrader as external service
This commit is contained in:
@@ -86,11 +86,14 @@ c.JupyterHub.template_paths = ["/etc/jupyterhub/templates"]
|
||||
c.JupyterHub.spawner_class = DockerSpawner
|
||||
|
||||
# Spawn Containers from this Image
|
||||
c.DockerSpawner.image = os.environ.get("NOTEBOOK_IMAGE", "jupyter/base-notebook:latest")
|
||||
c.DockerSpawner.image = os.environ.get(
|
||||
"NOTEBOOK_IMAGE", "jupyter/datascience-notebook:latest"
|
||||
)
|
||||
|
||||
# Connect Containers to this network
|
||||
network_name = os.environ.get("DOCKER_NETWORK_NAME", "stack_default")
|
||||
c.DockerSpawner.use_internal_ip = True # Let docker manage network communications
|
||||
# Let docker manage network communications
|
||||
c.DockerSpawner.use_internal_ip = True
|
||||
c.DockerSpawner.network_name = network_name
|
||||
|
||||
# Explicitly set notebook directory because we'll mounting a volume to it.
|
||||
@@ -128,6 +131,10 @@ c.Spawner.args = [
|
||||
"--NotebookApp.allow_credentials=True",
|
||||
"--NotebookApp.disable_check_xsrf=True",
|
||||
'--ServerApp.tornado_settings={"headers": {"Access-Control-Allow-Origin": "*"}}',
|
||||
# NBgrader extensions
|
||||
"--NotebookApp.nbserver_extensions={'nbgrader.server_extensions.formgrader':True}",
|
||||
"--NotebookApp.nbserver_extensions={'nbgrader.server_extensions.assignment_list':True}",
|
||||
"--NotebookApp.nbserver_extensions={'nbgrader.server_extensions.course_list':True}",
|
||||
]
|
||||
|
||||
# Security settings
|
||||
@@ -148,3 +155,56 @@ c.JupyterHub.concurrent_spawn_limit = 10
|
||||
# Allow named servers
|
||||
c.JupyterHub.allow_named_servers = True
|
||||
c.JupyterHub.named_server_limit_per_user = 3
|
||||
|
||||
|
||||
# NBgrader
|
||||
c.JupyterHub.services = [
|
||||
{
|
||||
"name": "nbgrader-formgrader",
|
||||
"url": "http://127.0.0.1:9999",
|
||||
"command": [
|
||||
"python",
|
||||
"-m",
|
||||
"nbgrader.apps.formgraderapp",
|
||||
"--FormgradeApp.authenticator_plugin_class=nbgrader.auth.JupyterHubAuthPlugin",
|
||||
"--FormgradeApp.ip=0.0.0.0",
|
||||
"--FormgradeApp.port=9999",
|
||||
f"--FormgradeApp.base_url={base_url}services/nbgrader-formgrader/",
|
||||
],
|
||||
"cwd": "/srv/nbgrader/exchange",
|
||||
"environment": {
|
||||
"JUPYTERHUB_API_TOKEN": "", # Will be set automatically
|
||||
"JUPYTERHUB_API_URL": f"http://jupyterhub:{port}{base_url}hub/api",
|
||||
"JUPYTERHUB_SERVICE_PREFIX": "/services/nbgrader-formgrader/",
|
||||
"POSTGRES_USER": p_user,
|
||||
"POSTGRES_PASSWORD": p_pass,
|
||||
"POSTGRES_HOST": p_host,
|
||||
"POSTGRES_DB": p_db,
|
||||
},
|
||||
}
|
||||
]
|
||||
|
||||
nbgrader_exchange_dir = "/srv/nbgrader/exchange"
|
||||
|
||||
c.DockerSpawner.environment = {
|
||||
"JUPYTERHUB_API_TOKEN": "", # Will be populated automatically
|
||||
"JUPYTERHUB_API_URL": f"http://jupyterhub:{port}{base_url}hub/api",
|
||||
"NBGRADER_EXCHANGE_DIRECTORY": nbgrader_exchange_dir,
|
||||
"NBGRADER_CACHE_DIRECTORY": "/home/jovyan/.cache/nbgrader",
|
||||
"NBGRADER_CONFIG_FILE": "/home/jovyan/.jupyter/nbgrader_config.py",
|
||||
}
|
||||
|
||||
# Configure NBgrader to use the same PostgreSQL database
|
||||
c.NbGrader.db_url = f"postgresql://{p_user}:{p_pass}@{p_host}:5432/{p_db}"
|
||||
|
||||
# NBgrader course configuration
|
||||
c.CourseDirectory.root = "/srv/nbgrader"
|
||||
c.CourseDirectory.course_id = os.environ.get("NBGRADER_COURSE_ID", "default_course")
|
||||
|
||||
# Exchange configuration
|
||||
c.Exchange.root = nbgrader_exchange_dir
|
||||
c.Exchange.course_id = os.environ.get("NBGRADER_COURSE_ID", "default_course")
|
||||
|
||||
# Formgrader configuration
|
||||
c.FormgradeApp.authenticator_plugin_class = "nbgrader.auth.JupyterHubAuthPlugin"
|
||||
c.FormgradeApp.base_url = f"{base_url}services/nbgrader-formgrader/"
|
||||
|
Reference in New Issue
Block a user