From 1bf8a16111e2b8285dd063d4a0c5cf7e7aae0331 Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Mon, 14 Sep 2026 11:02:49 -0400 Subject: [PATCH] =?UTF-8?q?fix(jupyter):=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BF=D0=BE=D0=B4=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=D0=B7=20VS=20Code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: VS Code через Remote-SSH не мог создать kernel из-за XSRF-проверки при отключённой аутентификации. - Что: Jupyter ограничен loopback-интерфейсом, а локальный режим без auth и XSRF задан в Docker Compose; документация синхронизирована. - Проверка: docker compose config; JupyterLab GET 200; kernel POST 201 и DELETE 204 без token/XSRF; порт слушает только 127.0.0.1. --- README.md | 2 ++ START_HERE.md | 3 +++ docker-compose.yml | 11 ++++++++++- docs/stack_reference.md | 3 +++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index eb72f6c..3fac1da 100755 --- a/README.md +++ b/README.md @@ -79,6 +79,8 @@ docker compose ps | Trino | `http://localhost:8090` | | MinIO Console | `http://localhost:9001` | +JupyterLab опубликован только на loopback-интерфейсе хоста и рассчитан на локальный одно-пользовательский стенд. Подключение через VS Code Remote-SSH описано в [START_HERE.md](./START_HERE.md#как-работать-в-jupyter). + ## Документы для прохождения - [START_HERE.md](./START_HERE.md) — первый маршрут: prerequisites, запуск, диагностика. diff --git a/START_HERE.md b/START_HERE.md index 07b3da5..af54a3b 100644 --- a/START_HERE.md +++ b/START_HERE.md @@ -99,6 +99,9 @@ notebooks/01_environment_and_smoke_test.ipynb ## Как работать в Jupyter +- JupyterLab доступен без логина только с хоста, на котором запущен стенд; +- при работе через VS Code Remote-SSH выбери `Existing Jupyter Server` и укажи `http://127.0.0.1:8888/`; +- token в адрес добавлять не нужно: аутентификация и XSRF-проверка отключены для локального одно-пользовательского сценария; - `./notebooks` смонтирован в контейнер как `/opt/work`; - `./src` смонтирован read-only как `/opt/src`; - `./data` смонтирован read-only как `/opt/data`; diff --git a/docker-compose.yml b/docker-compose.yml index 48596ab..4c56a71 100755 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -175,8 +175,17 @@ services: - AWS_ACCESS_KEY_ID=minioadmin - AWS_SECRET_ACCESS_KEY=minioadmin - PYTHONPATH=/opt/src + command: + - jupyter + - lab + - --ip=0.0.0.0 + - --port=8888 + - --no-browser + - --IdentityProvider.token= + - --PasswordIdentityProvider.hashed_password= + - --ServerApp.disable_check_xsrf=True ports: - - "8888:8888" + - "127.0.0.1:8888:8888" volumes: - ./spark/spark-defaults.conf:/opt/spark/conf/spark-defaults.conf:ro - ./notebooks:/opt/work diff --git a/docs/stack_reference.md b/docs/stack_reference.md index 75cf937..bc745ed 100644 --- a/docs/stack_reference.md +++ b/docs/stack_reference.md @@ -113,6 +113,9 @@ docker compose run --rm iceberg-catalog-init ### JupyterLab - адрес: `http://localhost:8888` +- порт опубликован только на `127.0.0.1` хоста; +- аутентификация и XSRF-проверка отключены для локального одно-пользовательского стенда; +- через VS Code Remote-SSH используй `Existing Jupyter Server` с адресом `http://127.0.0.1:8888/` без token; - `./notebooks` смонтирован как `/opt/work` - `./src` смонтирован read-only как `/opt/src` - `./data` смонтирован read-only как `/opt/data`