部署jupyter服务
编辑
1
2025-10-21
部署jupyter服务
喜欢使用docker compose部署。部署时遇到了一点小波折。
一、环境介绍
docker compose 部署 jupyter 后,映射出一个端口,然后 nginx 反向代理后,直接通过域名访问。并且也套了 CloudFlare 的 CDN。
二、docker-compose配置
记得换自己的域名,换一个token。
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反向代理配置
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 问题一
问题描述
可以输入密码,正确的话就会进去,但是是白板,查看网络请求,发现有内容。
解决方案
关闭Cloudflare 的 Rocket Loader 功能。
域名 ---> 速度 ---> 设置 ---> 内容优化 ---> Rocket Loader™(一定要关闭)
4.2 问题二
问题描述
没有权限创建新文件。
解决方案
修改映射的 data 目录
chown -R 1000.1000 data
五、封面图

- 0
- 0
-
分享