卢鹏博
发布于 2025-06-07 / 9 阅读
0
0

使用docker构建『 云 』Jupyter Notebook

由于我的服务器只构建个人博客,对服务器的占用并不高。最近看到有人在服务器上部署了云Jupyter Notebook,可惜原文教程链接进不去,于是我自己摸索,最后成功构建成功了。但是这期间也踩了许多坑,都一并分享一下。

推荐使用1panel+docker(+OpenResty)构建,方便且更加安全。

!下面以Unbuntu系统为例,其余系统类似(可按照步骤自行询问AI)

方式一:直接构建Jupyter Notebook环境(不推荐)

这种方式可能有一点问题,安全性和稳定性也比较低,仅适用于测试或低配置的服务器构建。

STEP 1:创建普通用户(可跳过,但使用默认root用户安全性低)

在终端执行下面代码:

sudo adduser jupyter_user  # 创建一个新用户

赋予root权限(要安装Python):

sudo usermod -aG sudo jupyter_user

换到普通用户:

su - jupyter_user  # 切换到新用户
cd ~  # 进入用户主目录

STEP 2:配置Python环境

1.安装 Python 和 pip

sudo apt update
sudo apt install python3-pip python3-venv -y

2.创建虚拟环境(可不需要,但推荐)

python3 -m venv ~/jupyter_venv  # 创建虚拟环境
source ~/jupyter_venv/bin/activate  # 激活环境

激活后,终端提示符会显示 (jupyter_venv)

3.安装 Jupyter Notebook

pip install notebook

STEP 3:配置 Jupyter Notebook

(1)生成配置文件

jupyter notebook --generate-config

配置文件路径:~/.jupyter/jupyter_notebook_config.py

(2)修改默认设置

nano ~/.jupyter/jupyter_notebook_config.py

找到并修改以下行(取消注释并调整,或者直接复制到文件里面):

c.NotebookApp.ip = '0.0.0.0'       # 允许外部访问
c.NotebookApp.port = 8888          # 指定端口
c.NotebookApp.open_browser = False # 禁用自动打开浏览器
c.NotebookApp.notebook_dir = '/home/jupyter_user/workspace'  # 设置默认目录

保存并退出(Ctrl+XYEnter)。

(3)创建默认目录

mkdir ~/workspace  # 确保目录存在

STEP 4:启动 Jupyter Notebook

直接运行(需要一直挂ssh):

jupyter notebook

或后台运行(可断开ssh):

nohup jupyter notebook > ~/jupyter.log 2>&1 &

这样就配置好了。

在浏览器输入:

http://<服务器IP>:8888

如果设置了密码,输入密码;否则使用日志中的 token。

STEP 5:其它设置

-->设置密码(可选)

生成密码并避免使用 token:

jupyter notebook password

输入并确认密码后,下次登录可直接使用密码。

-->配置防火墙

开放 Jupyter 端口(如 8888):

sudo ufw allow 8888/tcp

-->恢复 root 权限

如果后续需要 root 权限操作:

exit  # 退出普通用户,返回 root

方式二:使用docker+Nginx构建(较推荐)

1. 安装Docker

如果尚未安装Docker,先执行:

# 卸载旧版本(如有)
sudo apt-get remove docker docker-engine docker.io containerd runc

# 安装依赖
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release

# 添加Docker官方GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# 添加Docker仓库
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 安装Docker引擎
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io

# 验证安装
sudo docker --version

2. 拉取Jupyter Notebook镜像

使用官方Jupyter镜像(包含Python环境):

sudo docker pull jupyter/base-notebook

3. 运行Jupyter Notebook容器

基础命令(无持久化存储)

sudo docker run -d \
  --name jupyter \
  -p 8888:8888 \
  -e JUPYTER_ENABLE_LAB=yes \  # 使用JupyterLab界面
  jupyter/base-notebook

推荐命令(带持久化存储和密码保护)

# 创建数据目录
mkdir -p ~/jupyter_data

# 运行容器(带密码和持久化)
sudo docker run -d \
  --name jupyter \
  -p 8888:8888 \
  -v ~/jupyter_data:/home/jovyan/work \  # 挂载本地目录
  -e JUPYTER_TOKEN=yourpassword123 \     # 设置访问令牌
  jupyter/base-notebook

4. 访问Jupyter Notebook

获取访问URL

sudo docker logs jupyter 2>&1 | grep "http://127.0.0.1:8888"

输出类似:

http://127.0.0.1:8888/?token=abcdef123456...

通过浏览器访问

  • 本地访问:http://服务器IP:8888

  • 输入日志中的token(或你设置的JUPYTER_TOKEN


5. 高级配置

自定义Python环境

使用jupyter/scipy-notebook镜像(包含科学计算库):

sudo docker pull jupyter/scipy-notebook

限制资源使用

sudo docker run -d \
  --name jupyter \
  -p 8888:8888 \
  --memory=4g \          # 限制内存
  --cpus=2 \            # 限制CPU核心
  -v ~/jupyter_data:/home/jovyan/work \
  jupyter/base-notebook

使用Nginx反向代理(HTTPS)

安装Nginx并配置:

server {
    listen 80;
    server_name yourdomain.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name yourdomain.com;

    ssl_certificate /path/to/cert.pem;
    ssl_certificate_key /path/to/key.pem;

    location / {
        proxy_pass http://localhost:8888;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

重启Nginx:

sudo systemctl restart nginx

6. 管理容器

停止/启动

sudo docker stop jupyter
sudo docker start jupyter

删除容器

sudo docker rm -f jupyter

更新镜像

sudo docker pull jupyter/base-notebook
sudo docker stop jupyter
sudo docker rm jupyter
# 重新运行run命令

常见问题解决

端口冲突
如果8888端口被占用,修改-p参数,例如-p 8899:8888

权限问题
如果挂载目录无权限,添加--user root参数:

sudo docker run -d --user root -v ~/jupyter_data:/home/jovyan/work ...

方式三:使用1panel+docker+Openresty构建(推荐)

Step 1:安装1panel和Openresty

首先下载安装『 1panel 』和『 Openresty 』,可以参考这篇文章:

https://blog.math-enthusiast.top/archives/1748582820358

安装好后,会自带docker容器。

Step 2:拉取镜像

按照下述步骤:在镜像名输入

jupyter/base-notebook

注:仓库大约1GB,可能需要等待一会,在此期间请勿重复拉取镜像。

Step 3:配置docker

按照下述步骤进入配置界面:

按照下面示例进行配置:

command中可以输入下面示例(--NotebookApp.token就是等会的登陆凭证):

start-notebook.sh --NotebookApp.token='yourpassword'

标签和环境变量可以不输,系统会自动生成。

确认之后就配置好了,可尝试ip访问:

http://服务器IP:8888

配置反向代理,以便外部访问

如果你想使用域名访问你的notebook,你可以参考下述链接:

https://blog.math-enthusiast.top/archives/1748582820358

pip设置国内镜像

如果服务器部署在国内,通常通过pip下载会很慢,这时候可以选择设置国内镜像源。

1. 临时使用国内镜像源

pip install 时直接指定镜像源:

pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple

2. 永久配置全局镜像源

方法一:修改 pip 配置文件(推荐)

创建/修改配置文件

mkdir -p ~/.pip
echo "[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn" > ~/.pip/pip.conf

验证配置

pip config list

应输出:

global.index-url='https://pypi.tuna.tsinghua.edu.cn/simple'

方法二:通过命令配置

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn

3. 常用国内镜像源列表

镜像源名称

URL

适用场景

清华大学

https://pypi.tuna.tsinghua.edu.cn/simple

学术用户首选,更新快

阿里云

https://mirrors.aliyun.com/pypi/simple/

企业级稳定源

豆瓣

http://pypi.douban.com/simple/

简单轻量

华为云

https://repo.huaweicloud.com/repository/pypi/simple/

企业级支持

腾讯云

https://mirrors.cloud.tencent.com/pypi/simple/

云服务器用户优化


4. 恢复默认官方源

pip config unset global.index-url

使用示例


评论