大家都知道,对于从事数据科学或者机器学习的人来说,用jupyter做实验简直就是一个神器,但是往往许多算法和模型我们都希望利用远程的linux服务器进行实现和测试
这里介绍一种能用本地的浏览器访问服务器上架设的jupyter的方案,使得我们可以通过本地浏览器使用服务器的计算资源、访问服务器上的文件系统
- 官网下载anaconda,或者用pyenv下载都行,安装到服务器,个人用户的东西安装不要用sudo权限。(anaconda是一个很方面的python管理和集成包,里面包含一个python版本和对应的一些工具,其中就包括jupyter)
- 接下来,我们需要在当前用户的根目录创建一个名为nbserver的配置文件。
$ ipython profile create nbserver
- 这将创建一个文件夹,其中包含一些原始的配置文件。我们跳转到这个文件夹进行一些配置
$ cd ~/.ipython/profile_nbserver/
- 由于ipython Notebook要求https连接,因此我们需要创建一个ssl证书。
$ openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mycert.pem -out mycert.pem
- 启动ipython:(ipython其实就是jupyter的底层shell界面,所以我们装的anaconda里面会自带jupyter,同时也有了ipython)
$ ipython
创建远程连接密码:
In [1]: from notebook.auth import passwd; In [2]: passwd()
运行之后进入一个创建密码hash值的小程序,根据提示输入你想用的安全口令(这是之后在本地浏览器,登陆服务器所需要的密码):
Enterpassword: Verifypassword:
然后会输出(下面是我的密码的hash值,后段被删除,你的密码得到的结果应该不同,这个hash值要记住,之后要写入配置文件):
Out [2]: sha1:b86e933199ad:a02e9592e59723da722..
- 然后退出ipython,开始编辑配置文件,通过vi编辑文件的命令如下:
vim ipython_notebook_config.py
这个文件可能不存在,那么这条命令会自动创建一个,配置文件的内容如下:
c=get_config() # 所有matplotlib的图像都通过iline的方式显示 c.IPKernelApp.pylab='inline' # 这一行指向我们刚刚创建的ssl证书,这里的路径要给绝对路径(反正我给相对路径报错) c.NotebookApp.certfile=u'/home/XXX/.ipython/profile_nbserver/mycert.pem' # 给出刚刚创建的密码的哈希值 c.NotebookApp.password=u'sha1:b86e933199ad:a02e9592e59723da722..' c.NotebookApp.ip='*' # 给出运行的端口,ipython默认为8888 c.NotebookApp.port=8888 # 禁止在运行ipython的同时弹出浏览器 c.NotebookApp.open_browser=False
复制粘贴进去之后,摁esc,然后 ‘:wq’ 保存退出。
7. 配置完毕以后就可以运行ipython notebook或者jupyter lab的服务端了:
$ jupyter notebook --config=~/.ipython/profile_nbserver/ipython_notebook_config.py #给出你刚才创建的nbserver路径 $ jupyter lab --config=~/.ipython/profile_nbserver/ipython_notebook_config.py #给出你刚才创建的nbserver路径
- 在你的本地浏览器地址栏输入:
https://192.168.xxx.X:8888(这里就输入你服务器的IP地址,加上配置的端口号8888,注意前面的https不能省,省了会报错,例如:SSL Error on 13(‘192.168.1.110’, 9349): [SSL: WRONG_VERSION_NUMBER] wrong version number (_ssl.c:645))
注意:最好用chrome 浏览器
最后浏览器打开的根路径是之前在服务器上启动jupyter notebook时所在的服务器路径,所以你最好在服务器的用户根目录下启动你配置好的jupyter,然后就和我们使用本地的jupyter一样了。
注意有时候服务器启动jupyter的时候可能报类似下面的这种错误:
PermissionError: [Errno 13] Permission denied: '/Users/JDMac/Library/Jupyter/runtime'
可以通过在服务器配置文件中加下面这条语句解决:
$ export XDG_RUNTIME_DIR="" then start the jupyter $jupyter notebook