VS Code в браузере и маршрут прохождения курса #5

Open
ddmitry wants to merge 4 commits from t3/browser-vscode-setup into main
pull from: t3/browser-vscode-setup
Owner

Summary

Студент открывает VS Code на http://localhost:8889, выбирает готовый Python внутри контейнера и выполняет ноутбуки курса. Python, venv и расширения на хосте устанавливать не нужно. MinIO скачивается готовым. Документация ведет от проверки окружения до результата первого вычисления, а затем объясняет, как продолжать занятия и сохранять результаты.

Браузер → code-server → Jupyter kernel → Spark-кластер → Iceberg / MinIO
                                                        ↑
                                                      Trino
  • Добавлен ide с закреплёнными версиями code-server, расширений Python/Jupyter и готовой рабочей областью. Ноутбуки сохраняются на хосте; документация и src/ доступны для чтения. Порт опубликован на loopback.
  • Compose явно связывает сборку spark-master → jupyter → ide. JupyterLab остаётся запасным интерфейсом на localhost:8888.
  • MinIO использует coollabsio/minio:RELEASE.2025-04-22T22-12-26Z, закреплённый по digest индекса AMD64/ARM64. В образ включён mc; один образ используется сервером и init-контейнером. Повторное создание бакета допустимо, остальные ошибки mc mb больше не скрываются.
  • Основной registry MinIO — GHCR. Резерв того же автора с тем же digest — Docker Hub, выбирается MINIO_REGISTRY=docker.io в .env. В .env.example приведены настройки, в docs/network_access.md — диагностика registry, зависимостей сборки и прокси для пользователей из сетей с ограничениями, включая РФ.
  • В START_HERE добавлены предварительные проверки, постоянная настройка UID/GID через .env, ожидаемые статусы контейнеров и точный результат первого ноутбука. Датасет и необязательный DBeaver готовятся перед нужными модулями.
  • Программа начинается с маршрута по восьми ноутбукам: предусловия и проверяемый результат каждого. docs/study_workflow.md объясняет продолжение и завершение занятия, работу ядра, сохранение файлов и таблиц, диагностику. Полный сброс данных вынесен из обычной остановки в отдельный раздел.
  • Требования разделены: 16 ГБ RAM компьютера, не менее 4 CPU, ориентир 8 ГБ памяти для Docker (10 ГБ с запасом), от 20 ГБ свободного места перед сборкой (30 ГБ с запасом). Это рекомендуемый бюджет, а не измеренный минимум; общий жесткий лимит 8 ГБ пока не проверялся. Обоснование и измерения записаны в техническом справочнике.
  • Согласованы README, первый ноутбук и заметки ментора; восстановлен актуальный ориентир времени Модуля 3 из программы. Учебный код и learning outcomes не меняются.
  • Trino ограничен 2 ГиБ RAM без swap, Java heap — от 512 МиБ до 1 ГиБ. Новый trino/jvm.config подключен только для чтения и сохраняет остальные настройки образа 478; размер регионов G1 подбирает JVM для небольшого heap.
  • Добавлен браузерный smoke-тест bash tests/browser_ide.sh; COMPOSE_FILE и IDE_URL позволяют направить его на отдельный стенд.

Evidence

  • Before: сборка Jupyter пыталась скачать локальный de-spark-iceberg:3.5.1 и завершалась pull access denied; загрузка закреплённого MinIO из Quay возвращала 401 UNAUTHORIZED.
    After: Compose собирает окружение в нужном порядке. Готовый MinIO скачан из GHCR; команда скачивания через резервный Docker Hub также прошла. Оба registry возвращают один digest: sha256:a4938f37f1be1841b8e7b627ad0207b265345fd0d063e42d7410c78af0e63e68.
  • На отдельном стенде с пустыми volumes: MinIO и PostgreSQL инициализированы; повторный запуск minio-init успешен. Spark записал и прочитал lakehouse.default.spark_trino_smoke, Trino прочитал ту же строку 1 / from_spark.
  • Chromium: все 5 кодовых ячеек Модуля 1 выполнены; result_sum=499999500000 отображён в webview; сохранение и повторное открытие прошли. В MinIO Console проверены вход, бакет lakehouse и созданный Spark каталог warehouse.
  • Основной локальный стенд: перед заменой сохранены архив MinIO volume и дамп PostgreSQL. После замены существующая Iceberg-таблица читается через Trino; minio-init завершился с кодом 0, IDE остаётся healthy.
  • Пройдены docker compose config --quiet, сборка окружения и синтаксис smoke-теста. После правок документации повторный браузерный smoke завершился успешно: все 5 кодовых ячеек, webview, сохранение и повторное открытие.
  • Проверены локальные ссылки и якоря (с учетом двух прежних ссылок на строки в планах), синтаксис shell-блоков документации, неизменность кодовых ячеек/выводов/метаданных ноутбука и git diff --check. Проверена запись временного файла через оба пути ноутбуков в IDE.
  • Измерены размеры текущих Linux x86_64 образов: Spark 3,37 ГБ → Jupyter 3,72 ГБ → IDE 4,90 ГБ; общие слои подтверждены. Дополнение IDE — 1,18 ГБ, оценка готовых образов стенда без повторного счета этой цепочки — около 8,1 ГБ. Кэш и данные требуют дополнительного места.

Trino с ограниченной памятью: Docker подтвердил memory.max=2147483648, memory.swap.max=0; jcmd — MaxHeapSize=1073741824. На трех месяцах Taxi подготовлены временные bronze (9 554 778 строк), silver (9 418 184) и справочник (265 зон) кодом модулей 4–5. Прошли 11 запросов Модуля 6, два дополнительных JOIN всей bronze со справочником и чтение прежней smoke-таблицы — всего 14 запросов. Агрегаты и JOIN сверены со Spark. Пик Trino — 1,25 ГиБ по cgroup; OOM и перезапусков нет. Суммарный наблюдавшийся пик восьми контейнеров без неактивного файлового кэша — 5,44 ГиБ, с ним — 5,89 ГиБ. Временные таблицы, схема, объекты и пустые маркеры каталогов удалены; прежние данные сохранены. Методика — plans/trino-memory-validation.md.

Исторический коммит 1bf8a16 касается XSRF при подключении VS Code к Jupyter. Точную причину прежнего браузерного сбоя восстановить не удалось. В новой сборке notebook webview работает по HTTP на localhost без сертификатов; ядро запускается внутри IDE.

Проверено на Linux x86_64 с Docker Engine (6 CPU, около 11,1 ГиБ RAM, видимых Docker). Docker Desktop, ARM64 и полный последовательный проход восьми модулей не проверялись. Общий жесткий лимит 8 ГБ не устанавливался; замер суммы контейнеров не учитывает Docker daemon, ядро и другие процессы Linux/WSL2. Пиковое потребление полного курса и минимальный объем памяти не измерены; остановка/сброс в памятке сверены с Compose и документацией Docker без повторного сброса основного стенда. Доступность из сетей российских провайдеров не проверялась: резервный registry относится только к MinIO, у остальных образов и зависимостей остаются собственные источники. Браузерный smoke использует Linux host networking.

Merge Danger

Door: two-way для конфигурации; откат версии MinIO с существующими данными требует отдельно учитывать состояние volume и сохранённый backup.

Blast Radius: стенд.

Меняются основной интерфейс курса, сборка окружения, поставщик/версия образа MinIO и бюджет памяти Trino. Ограничение Trino проверено на основном наборе Taxi при одном учащемся; большие или параллельные запросы могут потребовать другого бюджета. При обновлении существующего стенда нужно сохранить MinIO volume и каталог PostgreSQL. Для нового запуска нужны Docker Compose 2.17+ с BuildKit, интернет для первой сборки и от 20 ГБ свободного места перед сборкой (30 ГБ с запасом). Конфигурация рассчитана на локальный стенд одного пользователя.

## Summary Студент открывает VS Code на `http://localhost:8889`, выбирает готовый Python внутри контейнера и выполняет ноутбуки курса. Python, venv и расширения на хосте устанавливать не нужно. MinIO скачивается готовым. Документация ведет от проверки окружения до результата первого вычисления, а затем объясняет, как продолжать занятия и сохранять результаты. ```text Браузер → code-server → Jupyter kernel → Spark-кластер → Iceberg / MinIO ↑ Trino ``` - Добавлен `ide` с закреплёнными версиями code-server, расширений Python/Jupyter и готовой рабочей областью. Ноутбуки сохраняются на хосте; документация и `src/` доступны для чтения. Порт опубликован на loopback. - Compose явно связывает сборку `spark-master → jupyter → ide`. JupyterLab остаётся запасным интерфейсом на `localhost:8888`. - MinIO использует `coollabsio/minio:RELEASE.2025-04-22T22-12-26Z`, закреплённый по digest индекса AMD64/ARM64. В образ включён `mc`; один образ используется сервером и init-контейнером. Повторное создание бакета допустимо, остальные ошибки `mc mb` больше не скрываются. - Основной registry MinIO — GHCR. Резерв того же автора с тем же digest — Docker Hub, выбирается `MINIO_REGISTRY=docker.io` в `.env`. В `.env.example` приведены настройки, в `docs/network_access.md` — диагностика registry, зависимостей сборки и прокси для пользователей из сетей с ограничениями, включая РФ. - В START_HERE добавлены предварительные проверки, постоянная настройка UID/GID через `.env`, ожидаемые статусы контейнеров и точный результат первого ноутбука. Датасет и необязательный DBeaver готовятся перед нужными модулями. - Программа начинается с маршрута по восьми ноутбукам: предусловия и проверяемый результат каждого. `docs/study_workflow.md` объясняет продолжение и завершение занятия, работу ядра, сохранение файлов и таблиц, диагностику. Полный сброс данных вынесен из обычной остановки в отдельный раздел. - Требования разделены: 16 ГБ RAM компьютера, не менее 4 CPU, ориентир 8 ГБ памяти для Docker (10 ГБ с запасом), от 20 ГБ свободного места перед сборкой (30 ГБ с запасом). Это рекомендуемый бюджет, а не измеренный минимум; общий жесткий лимит 8 ГБ пока не проверялся. Обоснование и измерения записаны в техническом справочнике. - Согласованы README, первый ноутбук и заметки ментора; восстановлен актуальный ориентир времени Модуля 3 из программы. Учебный код и learning outcomes не меняются. - Trino ограничен 2 ГиБ RAM без swap, Java heap — от 512 МиБ до 1 ГиБ. Новый `trino/jvm.config` подключен только для чтения и сохраняет остальные настройки образа 478; размер регионов G1 подбирает JVM для небольшого heap. - Добавлен браузерный smoke-тест `bash tests/browser_ide.sh`; `COMPOSE_FILE` и `IDE_URL` позволяют направить его на отдельный стенд. ## Evidence - **Before:** сборка Jupyter пыталась скачать локальный `de-spark-iceberg:3.5.1` и завершалась `pull access denied`; загрузка закреплённого MinIO из Quay возвращала `401 UNAUTHORIZED`. **After:** Compose собирает окружение в нужном порядке. Готовый MinIO скачан из GHCR; команда скачивания через резервный Docker Hub также прошла. Оба registry возвращают один digest: `sha256:a4938f37f1be1841b8e7b627ad0207b265345fd0d063e42d7410c78af0e63e68`. - **На отдельном стенде с пустыми volumes:** MinIO и PostgreSQL инициализированы; повторный запуск minio-init успешен. Spark записал и прочитал `lakehouse.default.spark_trino_smoke`, Trino прочитал ту же строку `1 / from_spark`. - **Chromium:** все 5 кодовых ячеек Модуля 1 выполнены; `result_sum=499999500000` отображён в webview; сохранение и повторное открытие прошли. В MinIO Console проверены вход, бакет `lakehouse` и созданный Spark каталог `warehouse`. - **Основной локальный стенд:** перед заменой сохранены архив MinIO volume и дамп PostgreSQL. После замены существующая Iceberg-таблица читается через Trino; `minio-init` завершился с кодом 0, IDE остаётся healthy. - Пройдены `docker compose config --quiet`, сборка окружения и синтаксис smoke-теста. После правок документации повторный браузерный smoke завершился успешно: все 5 кодовых ячеек, webview, сохранение и повторное открытие. - Проверены локальные ссылки и якоря (с учетом двух прежних ссылок на строки в планах), синтаксис shell-блоков документации, неизменность кодовых ячеек/выводов/метаданных ноутбука и `git diff --check`. Проверена запись временного файла через оба пути ноутбуков в IDE. - Измерены размеры текущих Linux x86_64 образов: Spark 3,37 ГБ → Jupyter 3,72 ГБ → IDE 4,90 ГБ; общие слои подтверждены. Дополнение IDE — 1,18 ГБ, оценка готовых образов стенда без повторного счета этой цепочки — около 8,1 ГБ. Кэш и данные требуют дополнительного места. **Trino с ограниченной памятью:** Docker подтвердил `memory.max=2147483648`, `memory.swap.max=0`; `jcmd` — `MaxHeapSize=1073741824`. На трех месяцах Taxi подготовлены временные bronze (9 554 778 строк), silver (9 418 184) и справочник (265 зон) кодом модулей 4–5. Прошли 11 запросов Модуля 6, два дополнительных JOIN всей bronze со справочником и чтение прежней smoke-таблицы — всего 14 запросов. Агрегаты и JOIN сверены со Spark. Пик Trino — 1,25 ГиБ по cgroup; OOM и перезапусков нет. Суммарный наблюдавшийся пик восьми контейнеров без неактивного файлового кэша — 5,44 ГиБ, с ним — 5,89 ГиБ. Временные таблицы, схема, объекты и пустые маркеры каталогов удалены; прежние данные сохранены. Методика — `plans/trino-memory-validation.md`. Исторический коммит `1bf8a16` касается XSRF при подключении VS Code к Jupyter. Точную причину прежнего браузерного сбоя восстановить не удалось. В новой сборке notebook webview работает по HTTP на localhost без сертификатов; ядро запускается внутри IDE. Проверено на Linux x86_64 с Docker Engine (6 CPU, около 11,1 ГиБ RAM, видимых Docker). Docker Desktop, ARM64 и полный последовательный проход восьми модулей не проверялись. Общий жесткий лимит 8 ГБ не устанавливался; замер суммы контейнеров не учитывает Docker daemon, ядро и другие процессы Linux/WSL2. Пиковое потребление полного курса и минимальный объем памяти не измерены; остановка/сброс в памятке сверены с Compose и документацией Docker без повторного сброса основного стенда. Доступность из сетей российских провайдеров не проверялась: резервный registry относится только к MinIO, у остальных образов и зависимостей остаются собственные источники. Браузерный smoke использует Linux host networking. ## Merge Danger **Door:** two-way для конфигурации; откат версии MinIO с существующими данными требует отдельно учитывать состояние volume и сохранённый backup. **Blast Radius:** стенд. Меняются основной интерфейс курса, сборка окружения, поставщик/версия образа MinIO и бюджет памяти Trino. Ограничение Trino проверено на основном наборе Taxi при одном учащемся; большие или параллельные запросы могут потребовать другого бюджета. При обновлении существующего стенда нужно сохранить MinIO volume и каталог PostgreSQL. Для нового запуска нужны Docker Compose 2.17+ с BuildKit, интернет для первой сборки и от 20 ГБ свободного места перед сборкой (30 ГБ с запасом). Конфигурация рассчитана на локальный стенд одного пользователя.
ddmitry added 1 commit 2026-10-18 23:40:10 +03:00
ddmitry added 1 commit 2026-10-19 10:26:23 +03:00
ddmitry changed title from VS Code в браузере: готовое окружение для ноутбуков курса to VS Code в браузере и запуск курса с готовым MinIO 2026-10-19 10:27:06 +03:00
ddmitry added 1 commit 2026-10-19 10:48:38 +03:00
ddmitry changed title from VS Code в браузере и запуск курса с готовым MinIO to VS Code в браузере и маршрут прохождения курса 2026-10-19 10:49:06 +03:00
ddmitry added 1 commit 2026-10-19 11:48:11 +03:00
You are not authorized to merge this pull request.
This pull request can be merged automatically.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin t3/browser-vscode-setup:t3/browser-vscode-setup
git checkout t3/browser-vscode-setup
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/mini-lakehouse-lab#5