除了先前提到的使用nbgitpuller分发文件和手动上传文件的方式之外,JupyterHub还提供了一种更为方便的数据分享方法,即通过在服务器上设置文件夹,为了分享数据可以设置一个包含原始数据和代码的只读文件夹,而为了收集汇总用户/学生的作业数据和代码可以设置一个只写文件夹。
在服务器中创建只读文件夹
当需要共享的数据量很大时,通过之前的两种方式分享数据是很耗时的,并且会导致数据版本不一致的问题,因此可以通过在服务器中直接创建一个可供所有用户访问的只读文件夹,用户即可自行从中下载数据。创建该共享文件夹的步骤为:
1、以管理员身份登录JupyterHub
2、打开一个命令行进程
3、在/srv路径下创建一个存放数据的文件夹
sudo mkdir -p /srv/data/my_shared_data_folder
4、向文件夹中添加数据,如添加 gapminder 数据集
sudo wget https://swcarpentry.github.io/python-novice-gapminder/files/python-novice-gapminder-data.zip /srv/data/my_shared_data_foldersudo unzip python-novice-gapminder-data.zip
5、向用户的根目录中添加该文件夹
这一步主要是通过在用户目录下创建一个文件夹,并将其动态链接到系统中的/srv/data/my_shared_data_folder文件夹。在JupyterHub中,用户的主目录位于/etc/skel路径下,放置在此目录中的任何内容也将显示在新用户的主目录中。具体的方法为:
1. 先进入/etc/skel目录
cd /etc/skel
2. 创建两个文件夹之间的动态链接
sudo ln -s /srv/data/my_shared_data_folder my_shared_data_folder
3. 通过以新用户身份登录确认是否有效,你以新用户身份登录后,该文件夹出现在新用户主目录中
此后,当一个新的用户账户被创建时,他们的主目录中会带有有这个文件夹(以及/etc/skel中的其他文件),当服务器文件夹中的内容发生变化时,用户目录中的内容也会同时变化。需要注意的是,这个操作不会对现有用户的目录产生影响,即新的共享文件夹不会被写入旧用户的主目录中。
在服务器中创建只写文件夹
当希望有一个地方让用户互相共享文件,而不是只让管理员与用户共享文件时,可以在服务器中创建一个只写文件夹,任何用户都可以将文件放到该文件夹中,其他用户可以读取。但是,只有创建文件的用户可以编辑该文件。
例如,在一个有三个用户的Hub中,用户A在他的/home目录下创建了了一个Notebook,当用户A准备共享时,他将其复制到共享目录中。这时,用户B和用户C可以看到用户A的Notebook,并自己运行它,但用户B和用户C不能编辑用户A的Notebook,只有用户A可以进行修改。
实现该配置的步骤为:
1、 以管理员身份登录JupyterHub
2、 打开一个命令行进程
3、 创建/srv/scratch文件夹
sudo mkdir -p /srv/scratch
4、 为该文件夹设置用户组
sudo chown root:jupyterhub-users /srv/scratch
5、 更改该文件夹的权限设置
sudo chmod 777 /srv/scratchsudo chmod g+s /srv/scratch
新建文件夹的默认权限使用全局umask(drwxr-sr-x),chmod g+s表示文件使用jupyterhub-users组的默认权限(rw-r--r--)
6、 在用户目录/etc/skel/路径下创建该文件夹的链接
sudo ln -s /srv/scratch /etc/skel/scratch
至此,当新用户进入JupyterHub后,他们的主目录中会带有有这个文件夹。同样,该配置只针对于新用户的目录有效。
下一节介绍如何在JupyterHub中为用户安装依赖库:)
参考链接:
https://tljh.jupyter.org/en/latest/howto/content/share-data.html
文件夹权限设置的方法:
https://blog.csdn.net/mzy202/article/details/7178586