前言
不是小白文,不是小白文,不是小白文!!!!
需要一定基础。
这个只算是本人踩坑记,不是每一步很详细。但是关键点很细。
我们为什么使用jupyterhub?
1. 什么是jupyterhub?
jupyterhub是****,请自行百度。它实际上就是一个带登陆的jupyter。支持多人在线登录使用。
2. 什么是jupyter?
详细介绍也请百度。简单理解jupyter就是可视化的语言编辑器。一般来说是做数据分析,挖掘,机器学习等会。可视化的展现结果。
3. 什么是jupyterlab?
详细还请继续百度。
4. 总结
该百度请继续百度。总而言之,jupyterhub是我们需要安装的目标。
jupyerhub的搭建指北
使用docker安装jupyterhub
1.1 为啥使用docker?
怕你乱安装导致主服务器乱掉。到时候修都不会修。使用docker实在不行,删除docker容器重新搭建。
1.2 安装docker
网络一抓一大把,自己百度。
1.3 docker下载jupyterhub镜像
docker pull jupyterhub/jupyterhub
jupyterhub参考页面
这些都不是难点。具体情况在参考页面也有介绍。
1.4 运行容器
# 此处 -p 2082:8000 2082是主服务器端口,8000是容器服务器的端口,做了个端口映射
# 暴露2082端口给外面就可以根据 ip:2082 访问
docker run -id -p 2082:8000 --name jupyterhub jupyterhub/jupyterhub jupyterhub
这个样子跑起来是没啥问题。但是根本没法服务。
所以接下来我们来解决这些小问题。
1.5 进入容器添加jupyterhub用户
jupyterhub的默认多用户管理使用的是linux的用户管理。
所以我们可以现在容器里添加用户。
- 首先我们进去容器
docker exec -it jupyterhub /bin/bash
- 再次我们添加新的linux用户 – user1
useradd user1
- 接着我们给user1更改密码(默认没有密码,我也不清楚机制,就直接修改密码了)
接着出现的提示框输入密码,比如passwd user1
user1123
user1123 - 继续我们很关键的一步
linux用户的专属文件夹实在/home
目录下
比如我是user用户,那么我们默认登录路径就是/home/user1
,但是我们没有登录,docker容器默认登陆是root用户,所以/home
文件夹下不会生成/home/user1
,所以我们需要自己生成目录
即便如此还是不行,因为linux有个权限机制,你可以不用管,直接输出下面代码mkdir /home/user1
cd /home chown user1 user1 -R
- 依旧很关键的一步
因为jupyterhub默认是没有安装notebook的,所以在spaner时候会发生错误(我想不起来这个脑残的设定,安装jupyterhub结果没安装jupyter?)
解决办法是安装jupyter就好了。pip install jupyterlab -i https://pypi.douban.com/simple
这里我安装jupyterlab,他会默认安装jupyter。不了解就按照我的来。
到这里基本就结束了
如果你还有问题,不妨从容器中退出exit
然后重启jupyterhub容器。如果没有就不要折腾了,有问题,在主服务器输入以下命令
docker restart jupyterhub
docker exec -id jupyterhub jupyterhub
此时你就可以访问了
路径http://ip:2082
如果访问不了,请按照以下步骤检查:
- linux的防火墙关了没
- 云服务的服务商的网络是否允许2082端口(其实上面2082端口可以更换,只是本人习惯用这个端口)
- 其他问题留言,因为我没遇到过。
nginx反向代理jupyerhub服务
1.1 nginx是啥?
百度,以后补充(大概率不补)
1.2 nginx有啥好处?
自己百度,我做代理原因就是想走ssl,而且有域名更舒服。记端口啥的,费事~
1.3 反向代理的坑
主要就是nginx代理的时候需要考虑websocket问题,不然kernel会连接不上。但是直接访问端口可以。
1.4 nginx相关代码
http {
include mime.types;
default_type application/octet-stream;
# 此处是nginx对websocket处理
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl;
server_name www.baidu.com; # 这就是你的域名
ssl_certificate /etc/letsencrypt/live/baidu.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/baidu.com/privkey.pem;
access_log /home/nginx/log/drive.log; # access的log日志,本人调试时使用,可以删除
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_pass http://localhost:2082; # 因为docker容器映射2082,你改了这里也要改
}
}
# 跳转路由,至少5种方式80跳到443,这里随即展现一种
server {
listen 80;
server_name www.baidu.com;
rewrite ^(.*)$ https://www.baidu.com$1 permanent;
}
}