使用dockerhub的jupyterhub搭建jupyterhub服务器

前言

不是小白文,不是小白文,不是小白文!!!!
需要一定基础。
这个只算是本人踩坑记,不是每一步很详细。但是关键点很细。

我们为什么使用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,所以我们需要自己生成目录
    mkdir /home/user1
    
    即便如此还是不行,因为linux有个权限机制,你可以不用管,直接输出下面代码
    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
如果访问不了,请按照以下步骤检查:

  1. linux的防火墙关了没
  2. 云服务的服务商的网络是否允许2082端口(其实上面2082端口可以更换,只是本人习惯用这个端口)
  3. 其他问题留言,因为我没遇到过。

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;
    }
}

1
2
3
4

上一篇:(2)将本地构建好的docker镜像发布到dockerhub


下一篇:使用docker发布微服务