一、为什么需要一个远程Jupyter服务 熟悉Python的同学应该都知道JupyterNotebook这一数据分析神器,它能帮助我们有效地组织输入输出,将我们探索数据的过程记录下来,后续稍加整理便可以生成一篇报告或者博客。JupyterNotebook支持Markdown,也支持Python、R甚至Julia等语言,完全可以支持一个数据工作者的大多数分析需求。 然而有一个问题可能困扰了很多人,那就是本地的JupyterNotebook无法轻易地带来带去,性能也不一定有保障。考虑以下场景:小明在公司使用JupyterNotebook做了一些分析,但是下班回家后还要继续工作。家里的电脑跟公司的电脑环境不完全一致,同时公司的电脑是台式机无法带回家(或者懒得背笔记本回家);小明的笔记本是超极本,性能较弱,无法支持大数据分析的需求;小明在公司机器上使用JupyterNotebook跑出了一份结果,但是他回家后需要查阅; 当你也面临这些场景时,你就有必要考虑搭建一个可以远程访问的JupyterNotebook或者JupyterLab服务了。JupyterLab与JupyterNotebook师出同源,可以凭个人爱好进行选择。此次我们拿JupyterLab来进行演示,下边就是老Q的成品展示。 二、快速搭建JupyterLab服务 首先,我们需要一台服务器,或者一台家庭电脑。如果是家庭电脑的话,我们还需要提前搞定公网IP和动态解析,感兴趣的可以翻一下前两个星期的历史文章。老Q的主机是deepin系统,不过根据老Q的经验,Ubuntu、CentOS等也没什么本质区别。 接我们需要保证我们已经安装了PythonPython3,同时已经安装了对应版本的JupyterLabJupyterNotebook,使用pip安装Jupyter系列非常方便。pip3installjupyterjupyterlab 安装完成之后,我们进入ipython中,来为我们的Jupyter服务配置密码:In〔1〕:fromjupyterserver。authimportpasswdIn〔2〕:passwd()Enterpassword:Verifypassword:Out〔2〕:argon2:xxxxxxx:xxxxxxxx 上边的输出中,‘argon2:’开头的这一串我们需要复制下来,一会儿配置的时候需要使用。而我们输入的密码就是我们在浏览器中登录Jupyter时需要输入的。 接下来我们生成Jupyter配置文件并使用vim打开(这里注意把路径替换为你的配置文件的路径):jupyterlabgenerateconfigWritingdefaultconfigto:homeoldq。jupyterjupyternotebookconfig。vimhomeoldq。jupyterjupyternotebookconfig。py 我们看到了一大串的配置选项,一入眼就有点懵了。不要慌,我们只需要修改其中的四行即可。我们使用vim的快捷键来搜索以下几项,将他们之前的注释去掉,并按照如下配置修改。将ip设置为,意味允许任何IP访问c。ServerApp。ip这里的密码就是上边我们生成的那一串c。ServerApp。passwordargon2:xxxxxxx:xxxxxxxx服务器上并没有浏览器可以供Jupyter打开c。ServerApp。openbrowserFalse监听端口设置为8888或其他自己喜欢的端口c。ServerApp。port8888我们可以修改jupyter的工作目录,也可以保持原样不变,如果修改的话,要保证这一目录已存在c。ServerApp。rootdirhomeoldqJupyter允许远程访问c。ServerApp。allowremoteaccessTrue 好了,保存输入:wq退出vim。 接下来输入jupyterlab启动jupyter服务即可:jupyterlaballowroot〔W20:23:23。497LabApp〕WARNING:ThenotebookserverislisteningonallIPaddressesandnotusingencryption。Thisisnotrecommended。〔I20:23:23。498LabApp〕Theport8888isalreadyinuse,tryinganotherport。〔I20:23:23。510LabApp〕JupyterLabextensionloadedfromusrlocallibpython3。6sitepackagesjupyterlab。。。 接下来我们打开浏览器测试以下,在地址栏中输入服务器的地址,并访问其8888端口(或自己设置的jupyter监听端口),如:127。0。0。1:8888: 可以看到,浏览器自动跳转打开了我们搭建的JupyterLab服务。在这个过程里,需要输入密码,也就是我们自己设置并确认的密码。 接下来,我们导入matplotlib画一个图测试一下,完美。二、配置后台运行 到了这里问题还没有结束,因为我们和服务器的连接会断开,或者我们会关闭运行jupyter的这个窗口,这样的话就相当于杀死了Jupyter服务,我们在别的地方就无法通过浏览器远程访问了。有没有什么好办法能解决这个麻烦呢?有,那就是使用强大的screen或者tmux。1。screen screen命令可以让我们开启大量的窗口,并灵活控制每个窗口的开启关闭、前台后台状态。那么接下来,我们使用screen命令将Jupyter服务放置在后台运行,这样的话,及时我们本地的电脑关闭了或者断开了与服务器的连接,我们搭建的Jupyter服务依然会正常运行。 我们使用screen命令新开一个窗口,并命名为jupyter(或其他你喜欢的名字):screenSjupyter 接下来,我们在新开的窗口中打开JupyterLab:jupyterlab 程序运行起来之后,我们使用CtrlAD的快捷键将这一窗口放入后台,并回到开启screen窗口之前的状态:screenSjupyter〔detachedfrom29957。jupyter〕 我们也可以查看目前都有哪些窗口在后台运行:screenlsThereisascreenon:48155。jupyter(Detached)1SocketinvarrunscreenSroot。 想要返回我们刚才使用的screen窗口,可以这样:screenr其后可以通过指定窗口名打开特定窗口,默认打开上一个使用的窗口2。tmux tmux的用法也是类似的。我们可以先通过如下命令创建一个会话。tmuxnewsjupyter 然后启动JupyterLab。jupyterlab 然后我们按住快捷键Ctrlb,松开,再按一下d。我们就把这个会话放到了后台。 如果我们想要返回刚才的会话,可以输入:tmuxattachtjupyter三、配置守护进程以实现开机自启 上述两种方法虽然好,但是有一个缺陷,那就是每次电脑重启后,进程不会自动重启,我们需要手动再开启一遍。那么这个问题如何解决呢? 答案就是配置守护进程。配置守护进程最简单的方法就是利用宝塔面板,没听说过的可以搜索一下,免费安装到电脑。然后在宝塔面板中,搜索安装进程守护管理器。 接下来,我们在某个目录写一个脚本文件,如usrlocalbinautojupyter。sh,内容如下:!usrbinzshhomedatalabanaconda3binjupyterlab 我们在宝塔面板中,找到进程守护管理器并进入。点击添加守护进程,填写名称、启动用户、启动目录、启动命令等即可。 好了,这样我们就可以随时随地访问并愉快地使用我们的JupyterLab服务了,大家有问题可以留言在下方,随时交流。