jupyter / nbgrader

A system for assigning and grading notebooks
https://nbgrader.readthedocs.io/
BSD 3-Clause "New" or "Revised" License
1.3k stars 317 forks source link

Remote hosting for Nbgrader? #1840

Open Adamtaranto opened 1 year ago

Adamtaranto commented 1 year ago

Does anyone know of a good (free) service to host an nbgrader JupyterHub server online?

Alternatively, Is it possible to host the gradebook.db database remotely so that multiple instructors and grade assignments locally?

perllaghu commented 1 year ago

I don't know of anyone who supplies a jupyter service with nbgrader installed in notebooks, for free - and the "remote" part then has a question about access. There are several organisations that will sell "notebooks as a service", which have nbgrader installed in that service.

We've done the multi-marker thing: shared filespace; set CourseDirectory.root; use a shared database.

There are a slew of issue you need to address, especially if the service is used by a lot of instructors [not least of which is potential conflicting assignment names]

Adamtaranto commented 1 year ago

To clarify, I'm not looking for "notebooks as a service", just hosting for a VM where I can run JupyterHub and have an exposed port for multiple people to access.

Has anyone got an example of doing this with AWS/Azure etc?

With the shared gradebook.db thing, I want to know if it is possible to specify a remotely hosted DB for multiple local instances of nbgrader to read/write to. And if so, how to set a remote db location? and if anyone has a good hosting option for very small databases?

Really just any example of anyone using the JupyterHub / Server functionality of Nbgrader where it is hosted somewhere and instructors / students are accessing it to submit/develop/grade assignments.

I'm just running it locally and manually handling assignment collection / upload / grading.

jeflem commented 1 year ago

Hi @Adamtaranto,

not really sure about what you are looking for. I think there are not too many people having JupyterHub+JupyterLab+Nbgrader running on a server. Such a setting is relatively complex (access control, role management aso.). I've been running a small server with Nbgrader at my university for three years now.

Because all the install and config tasks are quite involved to get things up and running in a stable and user friendly way, some collegues and me decided to put up a Jupyter Distribution for typical university use (at working group or department level, not large-scale). What we now have is the Ananke Jupyter Distribution (open source). Nbgrader is included and pre-configured. Access and role management works via LTI, that is, requires connection to some learning management system like Moodle or Canvas.

Even if this is not what you are looking for you may find all the configuration files and option you need to set up things. Ananke doc contains detailed information on OS (Linux) install and config, too.

Best regards,

Jens

Adamtaranto commented 5 months ago

Thanks Jens, that sounds useful. Do you have any instructions for linking nbgrader to Canvas via LTI?

Re my previous question, I just wanted to find an example of how to set up nbgrader so that multiple students / instructors can use it. I'm currently running nbgrader locally and manually adding student submissions so I can grade them.

I don't mind where the jupyter server is running (any cloud service is fine).

Alternatively, if just the gradebook.db database can be hosted remotely then I could have multiple instructors grading in their own local nbgrader instances. I do not know if it is possible to configure nbgrader to use a remote database.

jeflem commented 5 months ago

Thanks Jens, that sounds useful. Do you have any instructions for linking nbgrader to Canvas via LTI?

JHub has the ltiauthenticator for user authentication via LTI. But nbgrader has no LTI capabilities. You have to write some code which takes the LTI connection from ltiauthenticator, reads nbgrader scores and sends them to the LMS. Syncing nbgrader and LMS data requires a one-to-one mapping between LMS courses and nbgrader courses (including correct permissions for students and instructors). In Ananke the send to LMS part is done in kore.py#L198.

Re my previous question, I just wanted to find an example of how to set up nbgrader so that multiple students / instructors can use it. I'm currently running nbgrader locally and manually adding student submissions so I can grade them.

As I said, that's not trivial. Every setup will look different. The basics: for each course create a formgrader service in JHub and use JHub's access control to make those services accessible the correct group of students and instructors. The only ready-to-use implementation I know is Ananke. Run the Podman (=Docker) container and work through all the config files, created users, directory structure aso.

I don't mind where the jupyter server is running (any cloud service is fine).

Never have worked with cloud services, but I think you can take some Podman/Docker image and run it in the cloud.

Alternatively, if just the gradebook.db database can be hosted remotely then I could have multiple instructors grading in their own local nbgrader instances. I do not know if it is possible to configure nbgrader to use a remote database.

I don't think that nbgrader supports this. As far as I know nbgrader expects gradebook.db to be in the course's directory. Would require writing some code again.

I'm sorry there is no easy answer. Don't give up!

Jens