配置服务器Jupyter notebook

配置+访问服务器Juptyer notebook

Posted by Ccloud on 2023-04-28
Estimated Reading Time 4 Minutes
Words 1k In Total
Viewed Times

本文详细介绍了如何在服务器上配置Jupyter服务,并且完美访问

配合conda

在炼丹or数据分析过程中,我们往往需要在特定的conda环境中运行jupyter notebook,此时需要在当前conda环境下安装jupyter kernel

1
2
3
$ conda install ipykernel
$ conda install nb_conda
$ pip -m ipykernel install --name <env name>

这样操作后,jupyter notebook运行时才能找到虚拟环境中的包

配置文件

Jupyter的配置方式有点类似于Nginx,都是通过一份配置文件来维护服务器的工作模式,可以通过运行如下命令直接生成配置文件

1
$ jupyter notebook --generate-config

如果是root用户执行,需要用以下配置文件

1
$ jupyter notebook --generate-config --allow-config

执行成功后记住配置文件存储位置

生成密码

notebook 5.3 版本开始,当第一次通过令牌(token)登录的时候,notebook服务器会让用户有机会在用户界面设置一个密码,这将通过一个表单来询问当前的令牌以及新的密码,输入并点击 Login and setup new password

下次登录时候就可以直接选择输入密码而不需要令牌。如果没有设置密码,也可以按照下面的操作通过命令行设置密码。此外,可以在配置文件中设置 --NotebookApp.allow_password_change=False 来禁止第一次登录时候修改密码。

notebook 5.0 版本开始,可以通过一个命令 jupyter notebook password设置密码并保存到文件 jupyter_notebook_config.json,如下所示:

1
2
3
4
$ jupyter notebook password
Enter password: ****
Verify password: ****
[NotebookPasswordApp] Wrote hashed password to /Users/you/.jupyter/jupyter_notebook_config.json

加密通信

采用密码的时候,配合带有网站证书的 SSL 是一个好办法,可以避免哈希的密码被非加密的形式发送给浏览器。

可以通过设置参数 certfile 来开启 notebook 服务器,进行一次安全协议模式的通信,其中 mycert.perm 是自签(self-signed)证书。

1
$ jupyter notebook --certfile=mycert.pem --keyfile mykey.key

自签证书可以通过 openssl 生成,如下所示,生成一个有效期为 365 天,将 key 和 证书数据都保存在同个文件中:

1
$ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem

当打开浏览器连接服务器的时候,浏览器会提示你的自签证书是不安全或者无法识别的,如果你希望获取不会产生警告的自签证书,可以根据教程^6所说来操作。此外,也可以通过采用 Let's Encrypt ^7来得到免费的 SSL 证书,然后根据教程[8]来配置服务器。

运行notebook 服务器

上述步骤介绍了如何进行配置,接下来就是开始运行服务器,然后远程访问。这里首先还是需要进行如下操作,也就是修改配置文件 jupyter_notebook_config.py,找到下面几个信息修改并去掉注释:

1
2
3
4
5
6
7
8
9
10
# 证书的信息
c.NotebookApp.certfile = u'/absolute/path/to/your/certificate/mycert.pem'
c.NotebookApp.keyfile = u'/absolute/path/to/your/certificate/mykey.key'
# ip 设置为 *
c.NotebookApp.ip = '*'
c.NotebookApp.password = u'sha1:bcd259ccf...<your hashed password here>'
c.NotebookApp.open_browser = False

# 设置一个固定的接口
c.NotebookApp.port = 80

接着运行命令,如果是 root 用户,需要再加上 --allow-root

1
$ jupyter notebook

然后本地浏览器输入 服务器IP:80,接着就是输入刚刚设置的密码,即可访问 Jupyter notebook,然后就和在本地电脑操作 Jupyter notebook 一样,创建文件,运行。

需要注意的是不能在隐藏目录 (以 . 开头的目录)下启动 Jupyter notebook, 否则无法正常访问文件。

如果访问失败了,则有可能是服务器防火墙设置的问题,此时最简单的方法是在本地建立一个 ssh 通道:
在本地终端中输入

1
$ ssh username@address_of_remote -L 127.0.0.1:1234:127.0.0.1:8888

以下转载一篇关于ssh隧道的blog:

Dataspell连接

dataspell

可以使用sftp维护本地和服务器上代码的一致性

sftp


如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !