Compare commits

..

10 Commits

Author SHA1 Message Date
85c14a1b33 Added 2025-11-06 20:58:45 +01:00
phil
fcf06ebe1a Removed: nbgrader 2025-09-16 16:10:08 +02:00
cf4291738e Finished: Now its a Personal Project 2025-09-16 16:03:19 +02:00
a425023b2e Changed: Ngshare as managed Service 2025-09-16 11:20:21 +02:00
1f65074684 Added: Ngshare as managed Service 2025-09-16 11:10:19 +02:00
158c8784b9 Changed: Name of pulled base images 2025-09-16 11:01:53 +02:00
d092d2e75c Fixed: Typo 2025-09-16 10:47:12 +02:00
fc38957b9a Fixed: Startup building time 2025-09-16 10:41:51 +02:00
6898ef9171 Disables: nbgrader 2025-09-16 10:00:20 +02:00
6c56fdc5da Fixed: Nbgrader deprecated options 2025-09-15 22:52:56 +02:00
8 changed files with 30 additions and 147 deletions

View File

@@ -6,10 +6,8 @@ services:
- POSTGRES_DB=${POSTGRES_DB} - POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_USER=${POSTGRES_USER} - POSTGRES_USER=${POSTGRES_USER}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
- JUPYTERHUB_CRYPT_KEY=${JUPYTERHUB_CRYPT_KEY} - JUPYTERHUB_CRYPT_KEY=${JUPYTERHUB_CRYPT_KEY}
- DOCKER_NETWORK_NAME=${DOCKER_NETWORK_NAME} - DOCKER_NETWORK_NAME=${DOCKER_NETWORK_NAME}
- NBGRADER_DB_URL=postgresql://${POSTGRES_USER}:${POSTGRES_PASSWORD}@postgres:5432/${NBGRADER_DB}
ports: ports:
- ${JUPYTERHUB_PORT:-8000}:8000 - ${JUPYTERHUB_PORT:-8000}:8000
volumes: volumes:
@@ -19,6 +17,11 @@ services:
depends_on: depends_on:
- postgres - postgres
base:
container_name: ${COMPOSE_PROJECT_NAME}-base-notebook
datasciene:
container_name: ${COMPOSE_PROJECT_NAME}-datasciene-notebook
postgres: postgres:
container_name: ${COMPOSE_PROJECT_NAME}-postgres container_name: ${COMPOSE_PROJECT_NAME}-postgres
ports: ports:
@@ -28,12 +31,12 @@ services:
networks: networks:
- jupyterhub-network - jupyterhub-network
nginx: # nginx:
container_name: ${COMPOSE_PROJECT_NAME}-nginx #container_name: ${COMPOSE_PROJECT_NAME}-nginx
ports: #ports:
- ${NGINX_HTTP_PORT:-80}:80 #- ${NGINX_HTTP_PORT:-80}:80
- ${NGINX_HTTPS_PORT:-443}:443 #- ${NGINX_HTTPS_PORT:-443}:443
networks: #networks:
- jupyterhub-network #- jupyterhub-network
depends_on: #depends_on:
- jupyterhub #- jupyterhub

View File

@@ -1,7 +1,7 @@
include: include:
- jupyterhub/compose.yml - jupyterhub/compose.yml
- postgres/compose.yml - postgres/compose.yml
- nginx/compose.yml # - nginx/compose.yml
networks: networks:
jupyterhub-network: jupyterhub-network:

View File

@@ -23,7 +23,6 @@ RUN pip install --no-cache-dir \
dockerspawner \ dockerspawner \
jupyterhub-nativeauthenticator \ jupyterhub-nativeauthenticator \
jupyterhub-dummyauthenticator \ jupyterhub-dummyauthenticator \
nbgrader \
psycopg2-binary psycopg2-binary
RUN mkdir -p /srv/nbgrader \ RUN mkdir -p /srv/nbgrader \

View File

@@ -11,7 +11,14 @@ services:
- /var/run/docker.sock:/var/run/docker.sock - /var/run/docker.sock:/var/run/docker.sock
- ./templates:/srv/jupyterhub/templates:ro - ./templates:/srv/jupyterhub/templates:ro
- ./jupyterhub_config.py:/srv/jupyterhub/jupyterhub_config.py - ./jupyterhub_config.py:/srv/jupyterhub/jupyterhub_config.py
- ./nbgrader_config.py:/srv/nbgrader/nbgrader_config.py:ro
- ../nbgrader/exchange:/srv/nbgrader/exchange
- ../nbgrader/courses:/srv/nbgrader/courses
# Just the Hacky way to pull images at startup
# It just pulls the image but they wont startup
# speeds up first spawn dramatically
base:
image: jupyter/base-notebook:latest
entrypoint: ['echo']
datasciene:
image: jupyter/datascience-notebook:latest
entrypoint: ['echo']

View File

@@ -86,9 +86,10 @@ c.JupyterHub.template_paths = ["/etc/jupyterhub/templates"]
c.JupyterHub.spawner_class = DockerSpawner c.JupyterHub.spawner_class = DockerSpawner
# Spawn Containers from this Image # Spawn Containers from this Image
c.DockerSpawner.image = os.environ.get( c.DockerSpawner.image = os.environ.get("NOTEBOOK_IMAGE", "jupyter/base-notebook:latest")
"NOTEBOOK_IMAGE", "jupyter/datascience-notebook:latest"
) # Spawn this "version" of the Notebook
c.DockerSpawner.default_url = os.environ.get("SPAWNER_DEFAULT_URL", "/lab")
# Connect Containers to this network # Connect Containers to this network
network_name = os.environ.get("DOCKER_NETWORK_NAME", "stack_default") network_name = os.environ.get("DOCKER_NETWORK_NAME", "stack_default")
@@ -155,56 +156,3 @@ c.JupyterHub.concurrent_spawn_limit = 10
# Allow named servers # Allow named servers
c.JupyterHub.allow_named_servers = True c.JupyterHub.allow_named_servers = True
c.JupyterHub.named_server_limit_per_user = 3 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/"

View File

@@ -1,30 +0,0 @@
# /srv/nbgrader/nbgrader_config.py
c = get_config()
# 1. Course Configuration
c.CourseDirectory.course_id = "intro-to-python" # Change to your course name
c.CourseDirectory.root = '/srv/nbgrader/courses'
# 2. Exchange Directory (for submitting/collecting assignments)
c.Exchange.root = '/srv/nbgrader/exchange'
c.Exchange.path_includes_course = True
# 3. JupyterHub Integration
#c.NbGrader.hub_url = 'http://jupyterhub:8081/hub/api'
#c.NbGrader.hubapi_token = 'your-hub-token' # Generate with: openssl rand -hex 32
# 4. Database Configuration
c.StudentAssignmentNotebook.database_url = 'sqlite:////srv/nbgrader/nbgrader.sqlite'
# 5. Assignment Policies
c.ExecutePreprocessor.timeout = 300 # 5 minutes timeout per cell
c.ClearSolutions.code_stub = "# YOUR CODE HERE"
c.ClearSolutions.text_stub = "YOUR ANSWER HERE"
# 6. Formgrader UI Settings
c.FormgradeApp.port = 9999
c.FormgradeApp.authenticator_class = 'nbgrader.auth.hubauth.HubAuth'
c.FormgradeApp.ip = '0.0.0.0'
# 7. Permissions
c.CourseDirectory.groupshared = True

View File

@@ -1,44 +0,0 @@
import os
c = get_config()
# Database configuration - use the same PostgreSQL as JupyterHub
p_user = os.environ.get("POSTGRES_USER", "")
p_pass = os.environ.get("POSTGRES_PASSWORD", "")
p_host = os.environ.get("POSTGRES_HOST", "postgres")
p_db = os.environ.get("POSTGRES_DB", "jupyterhub")
# NBgrader database URL
c.NbGrader.db_url = f"postgresql://{p_user}:{p_pass}@{p_host}:5432/{p_db}"
# Course configuration
course_id = os.environ.get("NBGRADER_COURSE_ID", "default_course")
c.CourseDirectory.course_id = course_id
c.CourseDirectory.root = "/srv/nbgrader"
# Exchange directory configuration
exchange_dir = os.environ.get("NBGRADER_EXCHANGE_DIRECTORY", "/srv/nbgrader/exchange")
c.Exchange.root = exchange_dir
c.Exchange.course_id = course_id
# Authentication
c.FormgradeApp.authenticator_plugin_class = "nbgrader.auth.JupyterHubAuthPlugin"
# Logging
c.Application.log_level = "INFO"
# Formgrader settings
c.FormgradeApp.ip = "0.0.0.0"
c.FormgradeApp.port = 9999
c.FormgradeApp.base_url = "/jupyter/services/nbgrader-formgrader/"
# Enable tornado debug mode for development
# c.FormgradeApp.tornado_settings = {'debug': True}
# Assignment settings
c.AssignmentListApp.assignment_dir = "/home/jovyan/assignments"
c.AssignmentListApp.exchange_directory = exchange_dir
# Grader settings
c.AutogradeApp.force = True
c.GenerateAssignmentApp.force = True

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 573 B