云端服务器搭建 jupyter lab(jupyter notebook)已经有很多现成的教程了,下面只是简单讲一下步骤:
1、下载安装 anaconda3
前往清华大学开源软件镜像站(https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/)或者其他任意正规站点下载合适的版本
输入如下代码安装:
bash Anaconda3-XXX-Linux-x86_64.sh
然后一路enter,没有什么特别的事项
2、将 anaconda 加入环境变量
打开配置文件:
sudo vi /etc/profile
编辑配置文件,文件末尾加入如下代码:
#Anacanda
export PATH="/root/anaconda3/bin:$PATH"
保存后重新加载配置文件:
source /etc/profile
3、生成 jupyter lab(jupyter notebook)配置文件和访问密码
生成配置文件:
jupyter notebook --generate-config
下面会显示:
Writing default config to: /root/.jupyter/jupyter_notebook_config.py
这就是配置文件的名字和路径。
创建访问密码:
jupyter notebook password
进入 Ipython生成访问密码的hash密码:
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: XXXX
In [3]: exit
按照以上步骤生成 hash 密码(Out[2])并保存。
4、修改配置文件
终端窗口、宝塔面板后台或者 sftp 软件打开编辑均可
vim /root/.jupyter/jupyter_notebook_config.py
c.NotebookApp.password = XXX
#就是刚才需要记下的哈希密码
c.NotebookApp.port = 8888
#指定jupyter lab(jupyter notebook)运行端口,写一个不冲突的端口即可
c.NotebookApp.allow_remote_access = True
# 允许远程访问
c.NotebookApp.ip='*'
# 就是设置所有ip皆可访问
c.NotebookApp.open_browser = False
# 禁止自动打开浏览器
访问端口需要在腾讯云等服务器的安全组规则或类似模块设置放行,使用宝塔面板的需同时在后台防火墙放行
5、服务端开启 jupyter lab(jupyter notebook)并访问
后台保持jupyter notebook开启的命令:
nohup jupyter notebook --allow-root > jupyter.log 2>&1 &
后台保持jupyter lab开启的命令:
nohup jupyter lab --allow-root > jupyter.log 2>&1 &
这时你已经可以通过http://ip:8888(或你设置的端口)进行访问了,并且关闭终端后仍可后台运行。
到目前为止,jupyter已经完成搭建并访问,但是ip访问不易记忆且需要输入端口不够简洁,那么如何设置域名访问
本人使用宝塔面板,下面操作均基于宝塔面板可视化操作,通过终端命令行设置反向代理同理,只要相关代码录入即可。
正常设置反向代理
相关域名需提前在相关NS服务商做好解析
这时候,你已经可以通过域名访问了。
我原本以为这样就结束了,但是这里却有一个大坑
现在你已经可以正常打开 jupyter 并且新建笔记本、打开终端等一系列操作,但是你敲入代码是不会运行的,就像这样:
然后我查了资料,有说 python 版本问题的、有说 anaconda 版本不对的、有说 tornado 版本过高的等等的,我都试了一遍甚至重新安装了 anaconda 均无效。
因为自己不是专业的,我就去淘宝上找人处理这个问题,谁知道也是个坑货,花了30元钱也没解决啥问题,因为当时不知道域名访问使用 ip 访问可以使用,以为是整个 jupyter 坏掉了,所以得知ip访问能正常运行代码以后就还是把钱付了。
那么问题到底出在哪?最后还是只能靠自己,继续 google、google、google
终于让我给找到了原因和解决办法
原因就是一句话:jupyter 使用了 websocket 协议,所以需要配置支持 websocket。
解决办法就是在反向代理配置文件中加入以下代码(Nginx环境下):
# WebSocket support
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
这时候再运行代码就已经可以显示输出结果了,内核显示空闲,不再是未连接的状态:
为什么说这是一个大坑,因为网上搜到的99%的教程里面关于jupyter域名访问、方向代理设置里面均未提到 websocket 协议及设置的事情,这些文章作者除了天下文章一大抄连一点实操都没有,否则不可能不发现这样的问题。
Comments | NOTHING