一世贪欢的私域

一世贪欢的私域

部署jupyter服务

2025-10-21
部署jupyter服务

部署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 问题一

问题描述

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

解决方案

关闭CloudflareRocket Loader 功能。

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

4.2 问题二

问题描述

没有权限创建新文件。

解决方案

修改映射的 data 目录

chown -R 1000.1000 data

五、封面图

封面图