与用户共享数据#
有几种与用户共享数据的选项,本页介绍了一些有用的模式。
选项 1:使用 nbgitpuller
分发数据#
对于小型数据集,与用户共享数据的最简单方法是通过 nbgitpuller
链接。在这种情况下,用户单击您的链接,链接目标存储库中包含的数据集将下载到用户的家目录。请注意,每个用户都会复制一份数据集。
有关创建和共享 nbgitpuller
链接的信息,请参阅使用 nbgitpuller 向用户分发材料。
选项 2:为数据创建一个只读共享文件夹#
如果您的数据很大或者您不想有多个副本,您可以创建一个用户可以访问的只读共享文件夹。为此,请按照以下步骤操作:
以管理员用户身份登录到您的 JupyterHub。
使用 JupyterHub 界面创建终端会话。
创建一个文件夹,您的数据将存储在此文件夹中。我们建议将共享数据放置在
/srv
中。以下命令创建两个文件夹(/srv/data
和/srv/data/my_shared_data_folder
)。sudo mkdir -p /srv/data/my_shared_data_folder
将数据下载到此文件夹中。有关如何执行此操作的详细信息,请参阅将数据添加到 JupyterHub。
现在所有用户都对该文件夹中的数据具有读取权限。
在用户家目录中添加指向共享文件夹的链接#
或者,您还可以为每个新用户的家目录创建一个指向您上面创建的共享数据文件夹的符号链接。
为此,您可以使用服务器的用户骨架目录 (/etc/skel
)。放置在此目录中的任何内容也将显示在新用户的家目录中。
要在用户骨架目录中创建指向共享文件夹的链接,请按照以下步骤操作:
cd
进入骨架目录cd /etc/skel
创建数据文件夹的符号链接
sudo ln -s /srv/data/my_shared_data_folder my_shared_data_folder
通过以新用户身份登录来确认此操作是否成功。您可以通过打开新的“隐身”浏览器窗口并访问您的 JupyterHub 来执行此操作。以新用户身份登录后,该文件夹应出现在您的新用户家目录中。
从现在开始,当创建新的用户帐户时,他们的家目录中将包含此符号链接(以及 /etc/skel
中的任何其他文件)。这将对现有用户的目录没有影响。
选项 3:创建目录供用户共享 Notebook 和其他文件#
您可能希望有一个地方供用户彼此共享文件,而不仅仅是管理员与用户共享文件(选项 2)。在这种配置中,任何用户都可以将文件放入 /srv/scratch
,其他用户可以读取这些文件。但是,只有创建文件的用户才能编辑该文件。
用户在 JupyterHub 环境中共享或“发布” Notebook 的一种方法是创建共享目录。任何用户都可以在该目录中创建文件,但只有创建者之后才能编辑该文件。
例如,在一个有三个用户的 Hub 中,用户 A 在他们的 /home
目录中开发一个 Notebook。当准备好共享时,用户 A 将其复制到 shared
目录。此时,用户 B 和用户 C 可以看到用户 A 的 Notebook 并自行运行(或者在像 voila
或 panel
这样的仪表板布局中查看,如果它正在 Hub 中运行),但用户 B 和用户 C 无法编辑 Notebook。只有用户 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
以安装它。