JupyterHub 搭建及多用户支持 、自定义docker环境、插件安装

走远了吗. 提交于 2020-03-14 21:33:59

本文解决内容如下:

1.jupyterhub 的安装

2.独立用户支持 

3.docker容器化

4.java插件安装

软件获取

首先要获取anaconda3安装包,通过此包进行安装

下载 wget https://repo.continuum.io/archive/Anaconda3-2019.03-Linux-x86_64.sh

安装

对执行脚本赋权

chmod 755 *.sh

执行安装脚本

./Anaconda3-2019.03-Linux-x86_64.sh
1.此处需要同意安装协议 输入 yes

2.选择安装路径 此处一定要注意不要按装在root用户下,建议/opt/anaconda3 目录

漫长的等待,不出意久均会安装成功.

配置环境变量

切换到根目录

cd ~

vi .bashrc

增加如下内容:

export PATH=/opt/anaconda3/bin:$PATH

 

安装 jupyterhub

执行

conda install -c conda-forge jupyterhub

耐心等待即可,此时会下载很多依赖的包,需要输入yes 以完成完装。不出意外此时会安装成功。

执行

jupyterhub --generate-config

生成jupyterhub 配置文件,

启动

jupyterhub --no-ssl -f配置文件路径

此时就会看到jupyterhub 登录页面.使用系统的用户始可登录.

多用户管理    

修改配置文件如下: (可以将原配置文件中内容删除),以下内容用于测试环境,生产环境请修改.此方法可与自己系统业务相配合,如可修改成传入的用户名从redis验证、数据库验证等。可修改其登录页面自定义登录内容

# coding:utf-8

from tornado import gen
from jupyterhub.auth import Authenticator
import pwd, os

class MyAuthenticator(Authenticator):

   
def system_user_exists(self, username):
       
"""Check if the user exists on the system"""
       
try:
            pwd.getpwnam(username)
       
except KeyError:
           
return False
        else
:
           
return True

    def
add_system_user(self, username, password):
       
"""Create a new local UNIX user on the system.
        Tested to work on FreeBSD and Linux, at least.
        """
       
res = os.system('useradd  %(name1)s -s /bin/nologin -d /data/file/%(name2)s' % {'name1': username,'name2':username})
       
if res:
            
self.log.warn('user %s create failure' % username)
           
return False

       
res = os.system('echo %(pass)s |passwd --stdin %(name1)s' % {'name1': username, 'pass': password})
       
if res:
           
self.log.warn('user %s password create failure' % username)
           
return False
        return True

   
@gen.coroutine
   
def authenticate(self, handler, data):
        username = data[
'username']
        password = data[
'password']
       
self.log.warn('user %s create failure' % username)
       
if username is not None:
           
if not self.system_user_exists(username):
                res =
self.add_system_user(username, password)
               
if not res:
                   
return None
                else
:
                   
return username
           
else:
              
return username
       
else:
           
return None
       
#user = handler.request.headers.get("User_info")
        #if user is not None:
        #    user = json.loads(user)
        #    username = user.get("username")
        #    return username


c.JupyterHub.authenticator_class = MyAuthenticator

c.PAMAuthenticator.encoding =
'utf8'
#创建用户时已经开指定的目录,这里就不需要在指定工作目了
#c.Spawner.notebook_dir = '/data/file'

#
开启管理员用户
#c.JupyterHub.admin_access = True
#c.JupyterHub.admin_users = {"admin"}

# Jupyterhub service setting
#c.JupyterHub.spawner_class = 'sudospawner.SudoSpawner'

此文件内容为:

自定义验证登录,只要输入用户名即可以登录,输入的用户名如果系统中存在此用户则返回此用户,不存在此用户则先创建这个系统用户。与现在web系统集成时可修改验证方式为从head中获取用户基本信息,在通过此信息与数据库中的用户信息验证.验证能过则返回,不通过则返回Note

与系统集成

修改 authenticate 方法业务逻辑可满足与不同系统集成的要求,通过修改/opt/anaconda3/pkgs/jupyterhub-base-1.1.0-py37_2/share/jupyterhub/templates/login.html 源文件达成不需要用户输入用户名和密码目地。

思路如下:

在html页面获取head中的信息,调用jupyterhub认证接口,自动提交。将用户信息传入,等待验证结果返回。

支持 java

下载ijava

下载地址:

https://github.com/SpencerPark/IJava/releases/download/v1.3.0/ijava-1.3.0.zip

  1. 解压并执行

unzip ijava

python install.py

  1. 安装jdk1.9

注:必须1.9以上才可以.自行下载安装,并设置好环境变量

  1. 重启jupyterhub 服务

支持R(没有物理显示运行不了,不知道是不是我的问题)

安装R

下载R

https://mirrors.tuna.tsinghua.edu.cn/CRAN/src/base/R-3/R-3.6.3.tar.gz

解压

tar zxvf R-3.6.3.tar.gz

编译错误解决参考

https://www.chengzi520.com/?p=1912

安装依赖

yum install -y gcc

yum install -y gcc-gfortran

yum install -y gcc-c++

yum install -y glibc-headers

yum install -y libreadline6-dev gfortran 

yum install -y readline-devel

yum install -y wget libXt-devel

yum install -y fonts-chinese tcl tcl-devel tclx tk tk-devel

yum install -y mesa-libGLU mesa-libGLU-devel

yum install -y bzip2-devel 

yum install -y xz-devel.x86_64 

yum install -y pcre-devel

yum install -y libcurl

yum install -y libcurl-devel

yum install -y  texinfo.x86_64

yum install -y texlive-pdftex-doc.noarch

yum install -y texlive

yum install -y xz-devel

yum install -y gnutls-devel

yum install -y openssl-devel libcurl-devel postgresql-devel

安装完依赖之后 执行

./configure --enable-R-shlib=yes --with-tcltk --prefix=/opt/R

其中prefix 为安装目录,请注意

make && make install

配置环境变量

vi .bashrc

export PATH=/opt/R/bin:$PATH

export PATH=/opt/anaconda3/lib/:$PATH

 

让环境变量生效

source .bashrc

配置R支持

进入R命令行,执行R 如下:

执行

install.packages('devtools')

选择一个安装的源,选中国的就行 有一个中国兰州的,输入编号回车..等待完成,这步要 20分钟左右

下载

https://github.com/IRkernel/IRkernel/archive/1.1.tar.gz

在R中执行

devtools::install_local('/xxxxx/1.1.tar.gz')
这个目录就是刚才载的文件目录
 

IRkernel::installspec(user=FALSE)

install.packages('ggplot2')

重新启动jupyterhub

支持javascript

  1. 首先安装nodejs 和 npm
  2. npm install -g ijavascript
  3. ijsinstall
  4. 重启jupyterhub

其他扩展

 

pip install jupyter_contrib_nbextensions -i https://pypi.mirrors.ustc.edu.cn/simple

jupyter contrib nbextension install

pip install --user jupyter_nbextensions_configurator

jupyter nbextensions_configurator enable

其他说明

  1. docker需要将本地/data/file 目录挂载到外部,与物理机共享此目录
  2. docker主机需为中文简体,如果不是中文简体所启动的服务为英文,无法汉化。查看方法:

#查看系统所拥用的语言包

locale -a 

是否存在 zh_CN.UTF-8,如不存在请安装

yum install kde-l10n-Chinese

  1. 修改配置文件

vi /etc/locale.conf

#加下面内容到第一行,设置中文

LANG=zh_CN.UTF8

  1. 修改时区

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

docer支持

  1. 下载centos7 镜像
  2. docker pull centos:7
  3. 下载完成后运行并进入该容器
  4. docker run -id 容器ID bash
  5. 在容器命令行安装上术内容,完装完成打将容器导出
  6. docker commit -m="基础功能" -a="suncf" 容器ID 镜像名称
  7. 编写Dockerfile 以第6部的导出的镜像为父镜像,内容如下():

FROM 镜像名称

#重新设置环境变量 不设置正不生效啊
ENV PATH /opt/jdk-9/bin:/opt/anaconda3/bin:/opt/anaconda3/condabin:$PATH
#加上这个让环境变成中文的
ENV C_ALL=zh_CN.UTF-8
ENV LANG zh_CN.UTF-8
ENV LC_ALL zh_CN.UTF-8

USER root

###
#
这里可以增加一下对jupyter 本身的设置,如去掉登录的页面.直接点击登录.需要替换一下jupyterhub的登录文件
#
#
#
创建目录
RUN mkdir -p /data/work
COPY jupyterhub_config.py /data/work
#指定工作目录
WORKDIR /data/work
#对外爆露端口
EXPOSE 8000


CMD ["jupyterhub"]

  1. 如需挂载共享主机目录,需要将配置文件复制到共享目录中
  2. 打包  docker build -t 镜器名称:v1.0 .
  3. 打包成功后即可运行
  4. docker run -p 8001:8000 -d -v /jupyterwork:/data 镜像名称
  5. 以上命令是将主机8001 端口与容器8000 端口做映射,同时共享/jupyterwork 目录以替换容器 /data 目录
  6. 浏览器访问 http://主机ip地址:8001 即可访问

注意事项

  1. 编写Dockerfile 时注意镜器的环境变量,可通过: docker inspect 父级镜像

此时可以发现父级容并没有将anaconda3 、java的 环境变量加入,可会导致新的容器与其相关的命令均无法执行。需要加入 :

ENV PATH /opt/jdk-9/bin:/opt/anaconda3/bin:/opt/anaconda3/condabin:$PATH

预以解决。

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!