与用户共享数据#
有几种与用户共享数据的方法,此页面介绍了一些有用的模式。
选项 1:使用nbgitpuller
分发数据#
对于小型数据集,与用户共享数据的最简单方法是通过nbgitpuller
链接。在这种情况下,用户点击您的链接,链接目标存储库中包含的数据集将下载到用户的 home 目录。请注意,每个用户都会创建数据集的副本。
有关创建和共享nbgitpuller
链接的信息,请参阅使用 nbgitpuller 分发材料给用户。
选项 2:为数据创建一个只读共享文件夹#
如果您的数据很大,或者您不希望数据存在副本,您可以创建一个用户可以访问的只读共享文件夹。为此,请按照以下步骤操作
登录到您的 JupyterHub 作为管理员用户。
创建终端会话与您的 JupyterHub 界面。
创建一个文件夹,您的数据将存储在此文件夹中。我们建议将共享数据放在
/srv
中。以下命令创建两个文件夹(/srv/data
和/srv/data/my_shared_data_folder
)。sudo mkdir -p /srv/data/my_shared_data_folder
将数据下载到此文件夹。有关如何执行此操作的详细信息,请参阅将数据添加到 JupyterHub。
现在所有用户都可以读取此文件夹中的数据。
在用户 home 目录中添加指向共享文件夹的链接#
或者,您也可以在每个新用户的 home 目录中创建一个指向您上面创建的共享数据文件夹的符号链接。
为此,您可以使用服务器的用户骨架目录(/etc/skel
)。放置在此目录中的任何内容也会显示在新用户的 home 目录中。
要在用户骨架目录中创建指向共享文件夹的链接,请按照以下步骤操作
cd
进入骨架目录cd /etc/skel
创建一个指向数据文件夹的符号链接
sudo ln -s /srv/data/my_shared_data_folder my_shared_data_folder
确认操作成功,方法是使用新用户登录。您可以通过打开一个新的“隐身”浏览器窗口并访问您的 JupyterHub 来完成此操作。使用新用户登录后,该文件夹应该会出现在您的新用户主目录中。
从现在开始,每当创建新用户帐户时,其主目录中将包含此符号链接(以及 /etc/skel
中的任何其他文件)。这不会影响现有用户的目录。
选项 3:为用户创建共享笔记本和其他文件的目录#
您可能希望有一个地方让用户彼此共享文件,而不是只让管理员与用户共享文件(选项 2)。在此配置中,任何用户都可以将文件放入 /srv/scratch
,其他用户可以读取这些文件。但是,只有创建文件的用户才能编辑该文件。
用户在 JupyterHub 环境中共享或“发布”笔记本的一种方法是创建共享目录。任何用户都可以在此目录中创建文件,但只有创建者才能在之后编辑该文件。
例如,在一个拥有三个用户的 Hub 中,用户 A 在其 /home
目录中开发了一个笔记本。当准备共享时,用户 A 将其复制到 shared
目录。此时,用户 B 和用户 C 可以看到用户 A 的笔记本并自行运行(或在仪表板布局中查看,例如 voila
或 panel
,如果它在 Hub 中运行),但用户 B 和用户 C 无法编辑笔记本。只有用户 A 可以进行更改。
登录到您的 JupyterHub 作为管理员用户。
创建终端会话与您的 JupyterHub 界面。
创建一个文件夹,用于存放您的数据。我们建议将共享数据放在
/srv
中。以下命令创建一个目录/srv/scratch
sudo mkdir -p /srv/scratch
更改新文件夹的组所有权
sudo chown root:jupyterhub-users /srv/scratch
更改默认权限以使用组。新子目录的默认权限使用全局 umask (
drwxr-sr-x
),chmod g+s
指示新文件使用组jupyterhub-users
的默认权限 (rw-r--r--
)sudo chmod 777 /srv/scratch sudo chmod g+s /srv/scratch
在用户主目录中创建指向 scratch 文件夹的符号链接
sudo ln -s /srv/scratch /etc/skel/scratch
注意
kafonek/tljh-shared-directory 中的 TLJH 插件安装了 voila
并按上述方式设置了目录。在您的部署启动脚本中包含 --plugin git+https://github.com/kafonek/tljh-shared-directory
以安装它。