jupyter服务器创建账户加映射对外账户地址
文章目录
- 一、创建test1-test10用户(跳过已存在的test3)
- 二、检查必要组件是否安装
- 三、启动多用户映射的脚本(整合Code-Server启动与JupyterLab代理配置)
- 说明
以下是根据需求生成的命令、检查脚本及启动脚本,按步骤执行即可:
一、创建test1-test10用户(跳过已存在的test3)
# 循环创建用户,若用户已存在则跳过
for U in test1 test2 test3 test4 test5 test6 test7 test8 test9 test10; doif ! id "$U" &>/dev/null; then# 用户不存在时创建,家目录自动生成,默认shell为bashuseradd -m -s /bin/bash "$U"# 为新用户设置密码(可根据需要修改密码)echo "$U:StrongPassword123" | chpasswdecho "用户 $U 创建完成"elseecho "用户 $U 已存在,跳过创建"fi
done
二、检查必要组件是否安装
创建检查脚本 check_dependencies.sh
,用于验证 code-server
、jupyterlab
、jupyter-server-proxy
是否安装:
#!/bin/bash# 检查code-server是否安装
if command -v code-server &>/dev/null; thenecho "✅ code-server 已安装,版本:$(code-server --version | head -n1)"
elseecho "❌ code-server 未安装,请先执行安装命令:curl -fsSL https://code-server.dev/install.sh | sh"
fi# 检查jupyterlab是否安装
if command -v jupyter &>/dev/null && jupyter lab --version &>/dev/null; thenecho "✅ JupyterLab 已安装,版本:$(jupyter lab --version)"
elseecho "❌ JupyterLab 未安装,请先执行安装命令:pip install jupyterlab"
fi# 检查jupyter-server-proxy是否安装
if pip show jupyter-server-proxy &>/dev/null; thenecho "✅ jupyter-server-proxy 已安装,版本:$(pip show jupyter-server-proxy | grep Version | awk '{print $2}')"
elseecho "❌ jupyter-server-proxy 未安装,请先执行安装命令:pip install jupyter-server-proxy"
fi# 检查jupyter-server-proxy扩展是否启用
if jupyter server extension list 2>/dev/null | grep -q "jupyter_server_proxy.*enabled"; thenecho "✅ jupyter-server-proxy 扩展已启用"
elseecho "❌ jupyter-server-proxy 扩展未启用,请执行:jupyter server extension enable --sys-prefix jupyter_server_proxy"
fi
执行检查脚本:
chmod +x check_dependencies.sh
./check_dependencies.sh
根据输出提示,安装缺失的组件(若有)。
三、启动多用户映射的脚本(整合Code-Server启动与JupyterLab代理配置)
创建启动脚本 start_multi_user_ide.sh
,实现自动配置端口代理、启动各用户Code-Server及JupyterLab:
#!/bin/bash# 配置参数
USERS=(test1 test2 test3 test4 test5 test6 test7 test8 test9 test10) # 用户列表
BASE_PORT=8881 # 起始端口(test1→8881,test2→8882,...,test10→8890)
JUPYTER_PORT=8900 # JupyterLab端口(与Code-Server不冲突)
JUPYTER_CONFIG_DIR="/opt/conda/etc/jupyter/jupyter_server_config.d" # Jupyter配置目录# 步骤1:配置Jupyter允许代理的端口
echo "🔧 配置Jupyter代理允许的端口(8881-8890)..."
mkdir -p "$JUPYTER_CONFIG_DIR"
cat > "$JUPYTER_CONFIG_DIR/proxy-allowed-ports.json" << 'EOF'
{"ServerProxy": {"allowed_ports": [8881,8882,8883,8884,8885,8886,8887,8888,8889,8890]}
}
EOF# 步骤2:启动各用户的Code-Server
echo -e "\n🚀 启动各用户的Code-Server..."
for idx in "${!USERS[@]}"; doUSER="${USERS[$idx]}"PORT=$((BASE_PORT + idx)) # 计算当前用户的端口HOME_DIR="/home/${USER}"DATA_DIR="${HOME_DIR}/.local/share/code-server" # 存储用户配置EXT_DIR="${HOME_DIR}/.local/share/code-server/extensions" # 扩展目录LOG_FILE="${HOME_DIR}/code-server.log" # 日志文件# 创建必要目录并授权mkdir -p "${DATA_DIR}" "${EXT_DIR}"chown -R "${USER}:${USER}" "${HOME_DIR}/.local/share"# 停止该端口已有的Code-Server进程if ss -ltn | grep -q ":${PORT} "; thenecho "⚠️ 端口 ${PORT} 已被占用,正在关闭旧进程..."pkill -f "code-server.*:${PORT}"sleep 2 # 等待进程退出fi# 以用户身份启动Code-Server(后台运行,日志写入文件)echo "▶️ 启动用户 ${USER} 的Code-Server(端口:${PORT})"su - "$USER" -c "\nohup code-server \--auth password \ # 如需免密,改为--auth none--bind-addr 127.0.0.1:${PORT} \--user-data-dir \"${DATA_DIR}\" \--extensions-dir \"${EXT_DIR}\" \\"${HOME_DIR}\" \> \"${LOG_FILE}\" 2>&1 &\"
done# 步骤3:启动JupyterLab(作为反向代理入口)
echo -e "\n🌐 启动JupyterLab(端口:${JUPYTER_PORT})..."
# 停止已有的JupyterLab进程
if ss -ltn | grep -q ":${JUPYTER_PORT} "; thenecho "⚠️ JupyterLab端口 ${JUPYTER_PORT} 已被占用,正在关闭旧进程..."pkill -f "jupyter-lab.*:${JUPYTER_PORT}"sleep 2
fi# 启动JupyterLab(后台运行,日志写入/var/log/jupyterlab.log)
nohup jupyter lab \--ip=0.0.0.0 \--port="${JUPYTER_PORT}" \--allow-root \
> /var/log/jupyterlab.log 2>&1 &# 等待3秒后检查服务状态
sleep 3
echo -e "\n✅ 启动完成,状态检查:"
echo "Code-Server端口监听情况:"
ss -ltnp | grep "888[1-9]\|8890" | awk '{print $4, $7}'
echo -e "\nJupyterLab监听情况:"
ss -ltnp | grep "${JUPYTER_PORT}" | awk '{print $4, $7}'# 输出访问地址示例
echo -e "\n📌 访问地址示例:"
echo "JupyterLab主页:http://<宿主机IP>:<宿主机映射端口>/lab?token=<日志中的token>"
echo "test1的Code-Server:http://<宿主机IP>:<宿主机映射端口>/proxy/8881/"
echo "test10的Code-Server:http://<宿主机IP>:<宿主机映射端口>/proxy/8890/"
执行启动脚本:
chmod +x start_multi_user_ide.sh
./start_multi_user_ide.sh
说明
- 用户创建:仅创建不存在的用户,test3若已存在会自动跳过。
- 依赖检查:通过脚本快速定位缺失的组件,确保环境就绪。
- 启动脚本:
- 自动配置Jupyter代理允许的端口(8881-8890)。
- 为每个用户启动独立的Code-Server,绑定专属端口,日志存储在用户家目录。
- 启动JupyterLab作为统一入口,后台运行并生成访问日志。
- 访问方式:通过宿主机映射的JupyterLab端口,访问
/proxy/<用户端口>/
即可进入对应用户的Code-Server(初始需输入用户的Linux密码,如需免密可修改脚本中--auth
参数)。
本回答由AI生成,仅供参考,请仔细甄别,如有需求请咨询专业人士。