部署jupyter服务

部署jupyter服务

喜欢使用docker compose部署。部署时遇到了一点小波折。

一、环境介绍

docker compose 部署 jupyter 后,映射出一个端口,然后 nginx 反向代理后,直接通过域名访问。并且也套了 CloudFlare 的 CDN。

二、docker-compose配置

记得换自己的域名,换一个token。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: '3'

services:
jupyter:
image: jupyter/scipy-notebook:latest
container_name: jupyter-lab
restart: always
ports:
- "3086:8888" # 映射到主机 3086 端口
volumes:
- ./data:/home/jovyan/work
environment:
- NB_UID=1000
- NB_GID=100
- CHOWN_HOME=yes
- CHOWN_HOME_OPTS='-R'
- JUPYTER_ENABLE_LAB=yes
- JUPYTER_TOKEN=dhaslkdsahdjshadgashdaioazxhasdisad # 【重要】请修改为一个更安全的密码

# --- 【关键修复】 ---
# 覆盖默认命令,告诉 Jupyter 信任来自你的域名的请求
# 这对于防止 WebSocket 因 Origin 检查失败而导致的“白板”至关重要
command: >
start-notebook.sh
--NotebookApp.allow_origin='https://python.bravexist.cn'
--NotebookApp.allow_origin_pat='https://python\\.bravexist\\.cn'

三、nginx反向代理配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
location / {
# 代理到你在 docker-compose.yml 中设置的主机端口 3086
proxy_pass http://127.0.0.1:3086;

# ----------------------------------------------------
# --- 【核心】WebSocket 代理所需配置 ---
# ----------------------------------------------------
# 1. 声明使用 HTTP 1.1 (WebSocket 必须)
proxy_http_version 1.1;
# 2. 传递 Upgrade 请求头 (告诉后端“我想升级到WebSocket”)
proxy_set_header Upgrade $http_upgrade;
# 3. 传递 Connection 请求头 (告诉后端“升级连接”)
proxy_set_header Connection "upgrade";
# --- WebSocket 配置结束 ---


# --- 推荐的额外代理请求头 ---
# 告诉后端 Jupyter 真实的 Host
proxy_set_header Host $host;
# 传递客户端真实 IP
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 告诉后端 Jupyter 是通过 https 访问的
proxy_set_header X-Forwarded-Proto $scheme;

# 延长超时时间,防止内核长时间运行被 Nginx 断开
proxy_read_timeout 86400s;
proxy_send_timeout 86400s;
}

四、问题

4.1 问题一

问题描述

可以输入密码,正确的话就会进去,但是是白板,查看网络请求,发现有内容。

解决方案

关闭CloudflareRocket Loader 功能。

1
域名 ---> 速度 ---> 设置 ---> 内容优化 ---> Rocket Loader™(一定要关闭)

4.2 问题二

问题描述

没有权限创建新文件。

解决方案

修改映射的 data 目录

1
chown -R 1000.1000 data

五、封面图

封面图