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 应用配置
- 在 GitLab 中创建 OAuth 应用:
- 回调地址:
http://121.xxx.x.xxx:9888/hub/oauth_callback - 权限:根据需求设置(如
read_user,api等) - 获取
Client ID和Client Secret
- 回调地址:
2.2 JupyterHub 与 GitLab 集成
-
用户认证流程:
- 用户访问 JupyterHub 登录页面
- 点击 "Sign in with GitLab" 按钮
- 重定向到 GitLab 授权页面
- 用户授权后,GitLab 返回授权码
- JupyterHub 使用授权码获取访问令牌
- 验证用户身份并创建会话
-
系统用户管理:
pythonc.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. 安全注意事项
-
敏感信息保护:
- AWS 凭证、OAuth 密钥等敏感信息应使用环境变量管理
- 考虑使用密钥管理服务(如 AWS Secrets Manager)
-
访问控制:
- 通过
c.Authenticator.admin_users设置管理员 - 可使用白名单/黑名单限制访问
- 通过
-
网络安全:
- 建议在生产环境使用 HTTPS
- 配置防火墙规则,限制访问来源
8. 故障排除
-
认证失败:
- 检查 GitLab OAuth 应用配置
- 验证回调地址是否正确
- 检查网络连通性(JupyterHub ↔ GitLab)
-
用户创建失败:
- 确保 JupyterHub 有创建系统用户的权限
- 检查用户目录权限设置
-
环境变量问题:
- 确认所有路径和配置正确
- 检查用户家目录的读写权限
通过以上配置,JupyterHub 可以无缝集成 GitLab 的账号体系,为用户提供统一认证的大数据平台访问体验。