数据挖掘(五) -----JupyterHub 使用gitlab的账号体系进行认证

JupyterHub 使用 GitLab 账号体系进行认证的配置指南

本文档介绍了如何配置 JupyterHub 使用 GitLab OAuth 进行用户认证,实现统一的账号管理体系。

1. 核心配置

1.1 JupyterHub 配置文件 (jupyterhub_config.py)

关键配置如下:

python 复制代码
# 使用 GitLab OAuthenticator
from oauthenticator.gitlab import LocalGitLabOAuthenticator
c.JupyterHub.authenticator_class = LocalGitLabOAuthenticator

# GitLab OAuth 配置(通过环境变量设置)
# 环境变量已在 hail_env 文件中配置

# 管理员用户设置
c.Authenticator.admin_users = set("admin123")

# 允许创建系统用户
c.LocalAuthenticator.create_system_users = True

# 用户登录后的环境变量配置
c.Spawner.environment = {
    "JAVA_HOME": "/usr/lib/jvm/java-8-openjdk-amd64",
    "AWS_ACCESS_KEY_ID": "AKXXXXXXX",
    "AWS_SECRET_ACCESS_KEY": "WkxxxxxXXXXXXX",
    "AWS_DEFAULT_REGION": "cn-northwest-1",
    "HADOOP_CONF_DIR": "/home/ubuntu/admin123/conf",
    # ... 其他环境变量
}

1.2 环境变量配置 (hail_env)

bash 复制代码
# GitLab OAuth 配置
export GITLAB_HOST=git.xxxxxx.com
export OAUTH_CALLBACK_URL=http://121.xxx.x.xxx:9888/hub/oauth_callback
export OAUTH_CLIENT_ID=ffxxxx
export OAUTH_CLIENT_SECRET=544xxxx

# Hadoop/Spark 相关环境变量
export HADOOP_USER_NAME=ubuntu
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export SPARK_HOME=/home/ubuntu/admin123/spark-2.4.0-bin-without-hadoop
# ... 其他环境变量

2. 认证流程

2.1 GitLab OAuth 应用配置

  1. 在 GitLab 中创建 OAuth 应用:
    • 回调地址:http://121.xxx.x.xxx:9888/hub/oauth_callback
    • 权限:根据需求设置(如 read_user, api 等)
    • 获取 Client ID 和 Client Secret

2.2 JupyterHub 与 GitLab 集成

  1. 用户认证流程:

    • 用户访问 JupyterHub 登录页面
    • 点击 "Sign in with GitLab" 按钮
    • 重定向到 GitLab 授权页面
    • 用户授权后,GitLab 返回授权码
    • JupyterHub 使用授权码获取访问令牌
    • 验证用户身份并创建会话
  2. 系统用户管理:

    python 复制代码
    c.LocalAuthenticator.create_system_users = True

    此配置允许 JupyterHub 为 GitLab 用户自动创建对应的本地系统用户。

3. 用户环境初始化

3.1 预处理钩子 (pre_spawn_hook)

python 复制代码
from subprocess import call, check_call
import os

def my_hook(spawner):
    username = spawner.user.name
    
    # 复制 Jupyter 配置
    if not os.path.exists("/home/"+username+"/.jupyter"):
        check_call('cp -Rv /home/xx/.jupyter /home/'+username+'/', shell=True)
    
    # 在 HDFS 上创建用户目录
    call('hdfs dfs -mkdir /user/'+username, shell=True)
    check_call('hdfs dfs -chown '+username+':'+username+' /user/'+username, shell=True)

c.Spawner.pre_spawn_hook = my_hook

3.2 用户环境变量

通过 c.Spawner.environment 为每个用户会话设置必要的环境变量,包括:

  • Java 和 Hadoop 配置
  • AWS 凭证和区域
  • Spark 和 Hail 相关路径
  • Python 和 PySpark 配置

4. 自定义登录页面

4.1 登录页面模板 (login.html)

html 复制代码
<div class="service-login">
  <div style="font-size:20px;background-color:white">
    欢迎使用zzq数据挖掘平台<br/><br/>
  </div>
  <div>
    请使用公司GitLab账号登陆<br/>
    若还没有GitLab账号,请找运维开账号<br/><br/><br/>
  </div>
  <a role="button" class='btn btn-jupyter btn-lg' href='{{authenticator_login_url}}'>
    Sign in with {{login_service}}
  </a>
</div>

4.2 特性

  • 公司品牌标识(zzq数据挖掘平台)
  • 明确的使用指引
  • 水印保护(safemark.js)
  • 美观的登录按钮

5. 依赖安装

安装必要的 Python 包:

bash 复制代码
pip install oauthenticator

或者如果使用 conda:

bash 复制代码
conda install -c conda-forge oauthenticator

6. 启动 JupyterHub

6.1 加载环境变量

bash 复制代码
source hail_env

6.2 启动服务

bash 复制代码
jupyterhub -f jupyterhub_config.py

7. 安全注意事项

  1. 敏感信息保护:

    • AWS 凭证、OAuth 密钥等敏感信息应使用环境变量管理
    • 考虑使用密钥管理服务(如 AWS Secrets Manager)
  2. 访问控制:

    • 通过 c.Authenticator.admin_users 设置管理员
    • 可使用白名单/黑名单限制访问
  3. 网络安全:

    • 建议在生产环境使用 HTTPS
    • 配置防火墙规则,限制访问来源

8. 故障排除

  1. 认证失败:

    • 检查 GitLab OAuth 应用配置
    • 验证回调地址是否正确
    • 检查网络连通性(JupyterHub ↔ GitLab)
  2. 用户创建失败:

    • 确保 JupyterHub 有创建系统用户的权限
    • 检查用户目录权限设置
  3. 环境变量问题:

    • 确认所有路径和配置正确
    • 检查用户家目录的读写权限

通过以上配置,JupyterHub 可以无缝集成 GitLab 的账号体系,为用户提供统一认证的大数据平台访问体验。

相关推荐
杨凯凡几秒前
Spring AI RAG 实战:向量检索、租户过滤、引用溯源与防幻觉边界
java·人工智能·spring
#六脉神剑2 小时前
myBuilder 11 月新版本:AI辅助设计
ide·人工智能·低代码·ai·mybuilder
SJZR2 小时前
图解循环神经网络(RNN)
人工智能·rnn·神经网络
QXWZ_IA2 小时前
测绘单位采购RTK:设备价格、账号年费、售后,用时间轴分权重
网络·人工智能·安全
kaixin_啊啊3 小时前
【零基础学AI】第 29 章——第一次调用大模型 API
人工智能
甲维斯3 小时前
Qwen4 被嘲笑了!国模被啥锁死了?
人工智能
夕阳_醉了3 小时前
Codex 客户端从装好到跑通:第三方 API 接入与配置避坑指南
人工智能·gpt·openai·codex·ai 编程
熟的生菜3 小时前
从零造一个腱绳驱动灵巧手——仿真器篇5:姿势串与手势工程——从文本协议到握拳、OK 与多姿势插值
人工智能
武子康4 小时前
攻击动作做对了,游戏规则就对了吗?H3-World 与三条控制路线的分工
大数据·人工智能·agent
IT大白鼠4 小时前
GitLab 未认证 RCE 应急实战CVE-2026-97229(CVSS 10.0)
网络·安全·gitlab