Mrli
别装作很努力,
因为结局不会陪你演戏。
Contacts:
QQ博客园

JupyterHub搭建

2020/11/20 环境配置
Word count: 1,654 | Reading time: 7min

之前搭建的JupyterLab逐渐被使用起来了, 单用户的模式还是不太方便, 因此准备用JupyterHub来做下用户隔离

1. 安装nodejs和npm

按照JupyterLab官方教程, 先是安装最新的nodejs和npm, 但是由于16.04的apt源安装的nodejs版本比较久, 因此在后面的安装中会有坑, 这边根据网上的教程手动安装最新的nodejs

1
2
$ curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
$ sudo apt-get install -y nodejs

安装成功后输入node --version看到有版本返回输出证明安装成功, 同时这种方式会同时安装npm, 同样npm --version测试npm安装成功

2. 安装

2.1 安装虚拟环境

由于我个人喜欢自己配置虚拟环境, 因此, 我先安装虚拟环境。但阿里云上的virtualenv太久不用,版本太老了, 出现了使用virtualenv创建虚拟环境报错 error code 2现象,因此通过

1
2
3
4
sudo pip install setuptools #安装setuptools
sudo pip install --upgrade setuptools #更新setuptools到最新版本
sudo pip install virtualenv #安装virtualenv
sudo pip install --upgrade virtualenv #更新virtualenv到最新版本

来更新setuptools和virtualenv到最新的版本

1
$ virtualenv mlEnv

2.2 安装jupyterhub

根据官方教程,有两种方式安装:pip 安装 ; conda安装

1
2
3
4
5
6
7
# pip安装
$ python3 -m pip install jupyterhub
$ sudo npm install -g configurable-http-proxy
$ python3 -m pip install notebook # needed if running the notebook servers locally
# conda安装
$ conda install -c conda-forge jupyterhub # installs jupyterhub and proxy
$ conda install notebook # needed if running the notebook servers locally

2.2.1 问题1_虚拟环境

但在安装过程中出现了以下报错

1
2
ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/home/mrli/MLproject/mlEnv/lib/python3.5/site-packages/idna'
Consider using the `--user` option or check the permissions.

通过which pip可以看到我使用的pip正是虚拟环境下的pip, 同时提示中的site-packages文件夹也是存在的。便按照提示加上了–user, 但是出现了如下新报错ERROR: Can not perform a '--user' install. User site-packages are not visible in this virtualenv. (注意, 不用加sudo来保证权限, 应为加上sudo pip吧库安装到的路径是在root下的)

经过查询发现, 是因为整个虚拟环境下的权限不够, 因此需要加权sudo chmod 777 -R mlEnv=>遂问题解决

永久更改pip源和创建虚拟环境

2.2.2 问题2_npm安装报错

执行sudo npm install -g configurable-http-proxy时有如下报错Error: EACCES: permission denied, access '/usr/lib/node_modules'已经加上了sudo也无济于事。

==> 通过node的npm无法安装(无法过墙),也可以用阿里的自己的cnpm进行安装sudo npm install -g cnpm --registry=https://registry.npm.taobao.org,然后再输入sudo cnpm install -g configurable-http-proxy–>解决!

3. 测试安装成功

  1. jupyterhub -hconfigurable-http-proxy -h查看是否有输出,
  2. jupyterhub然后在https://localhost:8000中查看

4. 配置

生成配置文件

1
2
$ jupyterhub --generate-config -f /etc/jupyterhub/jupyterhub_config.py
$ jupyterhub --generate-config # 会在你的当前目录下生成一个jupyterhub_config.py文件, 我们在其中配置我们的网络和用户管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
c.JupyterHub.ip = '192.168.2.4'		# 本机局域网的ip,记得是局域网
c.JupyterHub.port = 12443 # 指定服务端口
c.Spawner.ip = '127.0.0.1'
c.PAMAuthenticator.encoding = 'utf8'
c.Authenticator.whitelist = {'root','admin', 'tv', 'aiker'} #默认不能使用root登录,需要修改配置. 这里面需要将linux的用户名添加进入,这样该用户就可以通过浏览器利用linux的用户名和密码登录自己的账户,jupyterhub采用和linux系统相同的认证方式,所以我们不需要另外建立用户,只需要登录linux的用户和密码即可 ==> 用户白名单的用户会自动添加,但无密. 需要修改密需要创建linux用户才能登录;
c.LocalAuthenticator.create_system_users = True
c.Authenticator.admin_users = {'root', 'admin'} # 指定admin用户
c.JupyterHub.authenticator_class = 'dummyauthenticator.DummyAuthenticator'
c.JupyterHub.statsd_prefix = 'jupyterhub
c.Spawner.notebook_dir = '/volume1/study/' #jupyterhub自定义目录
c.JupyterHub.statsd_prefix = 'jupyterhub'

c.JupyterHub.ssl_cert = '/usr/syno/etc/certificate/_archive/xYa1nX/fullchain.pem'
c.JupyterHub.ssl_key = '/usr/syno/etc/certificate/_archive/xYa1nX/privkey.pem'

默认情况下,要真正的实现分配用户账号,需要满足以下两点要求:

  1. c.Authenticator.whitelist 指定了用户名
  2. 在系统中创建了该用户(adduser / useradd)

tips: 默认情况下,密码为系统中该用户对应的密码

用户管理
用户白名单的用户会自动添加,但无密码,需要修改密码才能登录;
新添加用户:useradd crxis -d /home/user/crxis -m
用户添加组:adduser crxis group1
修改用户密码:echo crxis:crxis|chpasswd

1
2
3
4
5
6
c.JupyterHub.admin_users = {'root', 'admin'}
c.JupyterHub.bind_url = 'http://127.0.0.1:22223'
c.JupyterHub.hub_bind_url = 'http://127.0.0.1:22224'
c.JupyterHub.hub_port = 22225
c.Authenticator.whitelist = {'root', 'mrli'}
c.JupyterHub.hub_port = 22226

5. 运行

在存放jupyterhub_config.py的文件夹下执行jupyterhub启动服务

配置查看: https://blog.51cto.com/m51cto/2370679——GPU坑, 配置github登入

附录:

修改pip默认源:

1
$ vim ~/.pip/pip.conf # 如果当前用户没有.pip文件夹, 则创建一个

添加下列内容

1
2
3
4
5
6
[global]
index-url = http://pypi.douban.com/simple
[install]
use-mirrors =true
mirrors =http://pypi.douban.com/simple/
trusted-host =pypi.douban.com

Linux上安装最新版的Python

  1. 查看 Python 的版本号:python2 -V, python3 -V

  2. 下载3.x新版本

    可以访问python的官方网站查看最新的python版本以及下载链接:https://www.python.org/downloads/,将鼠标移到想要官网上想要下载的版本号上就可以看到下载地址,例如我需要在Linux下安装,可以使用这个链接:https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz(如果想要下载其他版本,直接修改版本号即可)。找到下载地址后,在命令行输入:wget https://www.python.org/ftp/python/3.8.5/Python-3.8.5.tgz

  3. 下载完成后解压缩tar -zxvf Python-3.8.5.tgz

  4. 下载完成后解压缩cd Python-3.8.5/; ./configure,

由于使用3.8出现了virtualenv无法使用的情况, 因此需要对配置文件进行修改: 修改Python-3.8.5/Modules路径的Setup文件: sudo vim Setup:

  1. 编译sudo make; sudo make install

但是发现修改后报错缺少xxssl.h的头文件,

  • wget https://www.openssl.org/source/openssl-1.0.2h.tar.gz
  • tar zxf openssl-1.0.2h.tar.gz; cd openssl-1.0.2h
  • ./config shared zlib; make depend
  • sudo make; sudo make install
  • 检测是否安装成功: openssl version -a

▲.再次到python中make install, 报错: subprocess.CalledProcessError: Command ‘(‘lsb_release’, ‘-a’)’ returned non-zero exit status 1.

解决方法
find /usr/bin -name lsb_release
sudo rm -rf /usr/bin/lsb_release

此时再到Python/中make install即可

Author: Mrli

Link: https://nymrli.top/2020/11/15/JupyterHub搭建/

Copyright: All articles in this blog are licensed under CC BY-NC-SA 3.0 unless stating additionally.

< PreviousPost
李宏毅机器学习_摘要
NextPost >
GithubActions
CATALOG
  1. 1. 1. 安装nodejs和npm
  2. 2. 2. 安装
    1. 2.1. 2.1 安装虚拟环境
    2. 2.2. 2.2 安装jupyterhub
      1. 2.2.1. 2.2.1 问题1_虚拟环境
      2. 2.2.2. 2.2.2 问题2_npm安装报错
  3. 3. 3. 测试安装成功
  4. 4. 4. 配置
    1. 4.0.1. 生成配置文件
  • 5. 5. 运行
  • 6. 附录:
    1. 6.1. 修改pip默认源:
    2. 6.2. Linux上安装最新版的Python