本文解决内容如下:
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
- 解压并执行
unzip ijava
python install.py
- 安装jdk1.9
注:必须1.9以上才可以.自行下载安装,并设置好环境变量
- 重启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
- 首先安装nodejs 和 npm
- npm install -g ijavascript
- ijsinstall
- 重启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
其他说明
- docker需要将本地/data/file 目录挂载到外部,与物理机共享此目录
- docker主机需为中文简体,如果不是中文简体所启动的服务为英文,无法汉化。查看方法:
#查看系统所拥用的语言包
locale -a
是否存在 zh_CN.UTF-8,如不存在请安装
yum install kde-l10n-Chinese
- 修改配置文件
vi /etc/locale.conf
#加下面内容到第一行,设置中文
LANG=zh_CN.UTF8
- 修改时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
docer支持
- 下载centos7 镜像
- docker pull centos:7
- 下载完成后运行并进入该容器
- docker run -id 容器ID bash
- 在容器命令行安装上术内容,完装完成打将容器导出
- docker commit -m="基础功能" -a="suncf" 容器ID 镜像名称
- 编写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"]
- 如需挂载共享主机目录,需要将配置文件复制到共享目录中
- 打包 docker build -t 镜器名称:v1.0 .
- 打包成功后即可运行
- docker run -p 8001:8000 -d -v /jupyterwork:/data 镜像名称
- 以上命令是将主机8001 端口与容器8000 端口做映射,同时共享/jupyterwork 目录以替换容器 /data 目录
- 浏览器访问 http://主机ip地址:8001 即可访问
注意事项
- 编写Dockerfile 时注意镜器的环境变量,可通过: docker inspect 父级镜像
此时可以发现父级容并没有将anaconda3 、java的 环境变量加入,可会导致新的容器与其相关的命令均无法执行。需要加入 :
ENV PATH /opt/jdk-9/bin:/opt/anaconda3/bin:/opt/anaconda3/condabin:$PATH
预以解决。
来源:oschina
链接:https://my.oschina.net/suncf/blog/3194887