文章目录
以前配过很多次,但是从来没有记录,这次终于有了自己稳定的云服务器,so记下来,哈哈哈。
- 官方链接:Running a notebook server,其实我就是翻译一下,实践一下。
- CSDN博客:在服务器上配置jupyter设置远程登录
1. 运行一个jupyter notebook服务
Jupyter notebook网页程序其实是基于服务器-客户端(SC)架构。notebook服务使用一个基于ZeroMQ的两阶段的核架构,就好像Tornado 用于处理HTTP请求一样。
默认情况下,notebook服务器只运行再本地的 127.0.0.1:8888且只能从本地访问,即 可以在本地通过浏览器使用http://127.0.0.1:8888.来访问notebook
这个文档主要介绍了如何安全的在一个公共界面(服务器上)运行一个notebook服务
注意:
这个并不能用于多用户服务,只是针对单个用户提供一个可以在本地通过浏览器访问服务器上的notebook的方式。
如果想要进行多用户服务,官方的解决方案是jupyterHub,要使用JupyterHub的话,需要一个Unix(/Linux)服务器
1.1 安全运行一个jupyter服务
这个主要是 针对 本地运行的,不是服务器配置的
1.1.1 安装jupyter
首先,需要先安装好jupyter notebook
https://jupyter.org/install
我把两个都按上,不确定这两个配置起来一样,稳一点,先配jupyter notebook,再同样流程给jupyterLab走一遍。
so如果你的anaconda版本很高的话,就直接使用conda
吧,不用什么source
1.1.2前提 一个配置文件
可以通过设置一个密码来保护自己的notebook服务。通过在 jupyter_notebook_config.py.
文件中手动配置NotebookApp.password
就可以设置自己的密码了
默认jupyter_notebook_config.py.
文件在以下位置,
- Windows:
C:\Users\USERNAME\.jupyter\jupyter_notebook_config.py
- OS X:
/Users/USERNAME/.jupyter/jupyter_notebook_config.py
- Linux:
/home/USERNAME/.jupyter/jupyter_notebook_config.py
如果没有,可以使用下面的命令产一个,然后就能在上面的文件夹中找到了
$ jupyter notebook --generate-config
1.1.3 自动设置密码
在notebook5.3版本之后,但你第一次使用token登录时,notebook服务会给你从用户界面设置密码的机会,你会看到有个表格 要求输入当前token
,以及新密码
,输入后点击登录就设置好了新密码。
下一次就可以使用新设置的密码登录而是一开始的那个登录token,不然就要跟随下面的程序指示来通过命令行设置密码。
可以通过设置 --NotebookApp.allow_password_change=False
来关闭首次登录时修改密码的这一功能
从notebook5.0开始,就可以使用命令来设置并存储notebook的密码了,notebook将提示您输入密码,并将哈希密码记录在jupyter_notebook_config.json中。
$ jupyter notebook password
Enter password: ****
Verify password: ****
[NotebookPasswordApp] Wrote hashed password to /Users/you/.jupyter/jupyter_notebook_config.json
1.2 在远程服务器上配置jupyter
其实有些步骤和本地配置是一样的,毕竟配置文件都是一样的,就是要多改几个选项而已。。。
所以当产密码的时候,还是可以直接使用上面的 直接使用代码来更新密码。
- 去 Linux:
/home/USERNAME/.jupyter/jupyter_notebook_config.py
看有没有配置文件,没有就运行jupyter notebook --generate-config
产一个
(base) root@hsh:~# jupyter notebook --generate-config
Writing default config to: /root/.jupyter/jupyter_notebook_config.py
- 生产密码
(base) root@hsh:~/.jupyter$ jupyter notebook password
Enter password:
Verify password:
[NotebookPasswordApp] Wrote hashed password to /root/.jupyter/jupyter_notebook_config.json
# 可以看到,这个写的配置文件路径 后缀不一样。。。但是没关系,直接打开这个json文件可以得到自己设置密码的hash值,稍微方便点。。。
- 打开jupyter_notebook_config.py进行以下设置:
# Set ip to '*' to bind on all interfaces (ips) for the public server
c.NotebookApp.ip = '*'
c.NotebookApp.password = u'sha1:bcd259ccf...<your hashed password here>'
c.NotebookApp.open_browser = False
# It is a good idea to set a known, fixed port for server access
c.NotebookApp.port = 9999
c.NotebookApp.allow_password_change = True #允许首次使用hash登录后修改密码
c.NotebookApp.allow_remote_access = True #允许远程访问
c.NotebookApp.ip = '*' # 就是设置所有ip皆可访问
c.NotebookApp.open_browser = False # 禁止自动打开浏览器
c.NotebookApp.password = u'sha1:XXXXX'
c.NotebookApp.port = 8888
- 有点小问题,就是我是root用户下配置的,所以启动jupyter的时候需要:
(base) root@hsh:~/.jupyter$ jupyter notebook
[W 08:28:53.435 NotebookApp] WARNING: The notebook server is listening on all IP addresses and not using encryption. This is not recommended.
[I 08:28:53.563 NotebookApp] JupyterLab extension loaded from /root/anaconda3/lib/python3.8/site-packages/jupyterlab
[I 08:28:53.563 NotebookApp] JupyterLab application directory is /root/anaconda3/share/jupyter/lab
[C 08:28:53.567 NotebookApp] Running as root is not recommended. Use --allow-root to bypass.
需要:
(base) root@hsh:~$ jupyter notebook --allow-root
[I 08:37:32.899 NotebookApp] JupyterLab extension loaded from /root/anaconda3/lib/python3.8/site-packages/jupyterlab
[I 08:37:32.899 NotebookApp] JupyterLab application directory is /root/anaconda3/share/jupyter/lab
[I 08:37:32.903 NotebookApp] Serving notebooks from local directory: /root
[I 08:37:32.903 NotebookApp] The Jupyter Notebook is running at:
[I 08:37:32.903 NotebookApp] http://ip:8080/ 然后就好了
1.3 关闭jupyter端口进程
- lsof -i:端口号
>lsof -i
>lsof -i:8080
>kill -9 XXX
如果以后想正常退出,释放8080端口,直接
ctrl+C 然后 y 就好了
- netstat -tunlp|grep 端口号
1.4 给jupyter notebook增加kernel
好不容易在服务器上配好了这个东西,但是实际开发环境中总会遇到多环境/版本的问题,所以需要添加kernel。
根据 官方文档opython-document_Installing the IPython kernel:
我conda默认的环境是py3.8,新安装了py37,py3.8和py37里都安装了jupyter notebook
但是正常一般都直接启动的是base py38里的
所以,添加核其实也比较简单,直接在我的py37环境里
要添加的核所对应的环境是 py37
conda activate py37
# 就在py37环境里安装ipykernel
pip install ipykernel
# 配置jupyter kernel 所有的环境都要安装ipykernel 只有base环境需要安装jupyter
//安装好之后 设置名称
# 就在py37环境里设置名称
python -m ipykernel install --user --name py37 --display-name "Python37"
然后回到conda默认的base环境里,启动jupyer notebook,就可以看到kernel那里出现了新的选项 Python37
或者直接看下面的操作:
- 切换到要添加的虚拟环境,确认是否安装 ipykernel
python -m ipykernel --version
如果没有安装,则安装:
python -m pip install ipykernel
- 为 Jupyter notebook 添加内核
python -m ipykernel install --user --name=kernelname --display-name 'py37'
- 查看 Jupyter notebook kernel
jupyter kernelspec list
- 删除 jupyter 内核
jupyter kernelspec remove kernelname
如果内核名字很奇怪,可以直接根据 jupyter kernelspec list中提供的 内核地址,在 访达中使用 前往 找到该内核的 kernel.json文件,查看,确定是否是要删除的那个,直接将文件夹删除。就好了
2. jupyter lab
后来觉得好像还是jupyter lab更方便。。想要把这个也配成远程的,但是参考配置jupyterlab远程访问发现,这两个配置过程是一样的,哈哈。
所以直接在服务器的终端输入
>jupyter lab
就好了,配置和jupyter notebook的保持一致。