Files
jupyterhub/README.md
2026-02-20 04:59:46 +00:00

5.0 KiB
Raw Permalink Blame History

jupyterhub

настройки для stellars-jupyterhub-ds

https://gitea.manturovo-it.ru/nchebrov/stellars-jupyterhub-ds

https://github.com/stellarshenson/stellars-jupyterhub-ds

https://github.com/ERIOS-project/vscode-jupyterhub/tree/main

Создать Dockerfile


# Используем официальный образ за основу
FROM jupyter/scipy-notebook:latest

# Устанавливаем code-server (VS Code в браузере) и прокси-расширения
USER root

# 1. Устанавливаем code-server через официальный скрипт
RUN curl -fsSL https://code-server.dev/install.sh | sh

# 2. Устанавливаем Python-пакеты для прокси (используем pip, т.к. это стандартный менеджер в образе)
#    Они позволят Jupyter автоматически обнаружить и запустить code-server.
RUN pip install --no-cache-dir \
    jupyter-server-proxy \
    jupyter-vscode-proxy
RUN pip install --upgrade jupyterlab

# Создаем директорию для конфигурации code-server с правильными правами
RUN mkdir -p /home/jovyan/.local/share/code-server \
    && chown -R jovyan:users /home/jovyan/.local

# Переключаемся на пользователя jovyan для установки расширений
USER jovyan
WORKDIR /home/jovyan

# Устанавливаем переменную окружения для указания директории данных code-server
ENV XDG_DATA_HOME=/home/jovyan/.local/share

# Устанавливаем расширения с явным указанием директории и дополнительными флагами
RUN code-server --install-extension ms-python.python --force \
    && code-server --install-extension ms-toolsai.jupyter --force \
    && code-server --install-extension oderwat.indent-rainbow --force \
    && code-server --install-extension vscode-icons-team.vscode-icons --force \
    && code-server --install-extension donjayamanne.python-extension-pack --force \
    && code-server --install-extension MS-CEINTL.vscode-language-pack-ru --force \
    && code-server --install-extension sguerri.simple-hide-files --force \
    && code-server --install-extension lyuwenhan.zipper --force

# Проверяем установленные расширения
RUN code-server --list-extensions

# Возвращаем пользователя jovyan
USER jovyan

docker build . -t vsc:latest --no-cache

Внести исправления в файлы:
config/jupyterhub_config.py

#JUPYTERHUB_NOTEBOOK_IMAGE = os.environ.get("JUPYTERHUB_NOTEBOOK_IMAGE", "stellars/stellars-jupyterlab-ds:latest")  # JupyterLab image to spawn
JUPYTERHUB_NOTEBOOK_IMAGE = os.environ.get("JUPYTERHUB_NOTEBOOK_IMAGE", "vsc:latest")  # JupyterLab image to spawn

#c.NativeAuthenticator.open_signup = False                            # require admin authorization for new users
c.NativeAuthenticator.open_signup = True                          # require admin authorization for new users

compose.yml

 #- JUPYTERHUB_BASE_URL=/jupyterhub # default URL prefix
 - JUPYTERHUB_BASE_URL=/ # default URL prefix

 #- JUPYTERHUB_NOTEBOOK_IMAGE=stellars/stellars-jupyterlab-ds:latest # user container image
 - JUPYTERHUB_NOTEBOOK_IMAGE=vsc:latest # user container image

# - JUPYTERHUB_IDLE_CULLER_ENABLED=0 # 0=disabled, 1=enabled
# - JUPYTERHUB_IDLE_CULLER_TIMEOUT=86400 # seconds of inactivity before culling (default 24h)
- JUPYTERHUB_IDLE_CULLER_ENABLED=1 # 0=disabled, 1=enabled
- JUPYTERHUB_IDLE_CULLER_TIMEOUT=3600 # seconds of inactivity before culling ( 1 hour)

#  - "traefik.http.routers.jupyterhub-rtr.rule=Path(`/jupyterhub`) || PathPrefix(`/jupyterhub/`)"
  - "traefik.http.routers.jupyterhub-rtr.rule=Path(`/`) || PathPrefix(`/`)"

docker compose up -d

Смена администратора

  • Создать нового пользователя, к примеру super. Обязательно сделать хотя бы один логин в систему.

  • Назначить его админом с помощью следующих команд

docker exec -it stellars-jupyterhub-ds-jupyterhub python3 -c "
import sqlite3
conn = sqlite3.connect('/data/jupyterhub.sqlite')
cursor = conn.cursor()
cursor.execute('SELECT name, admin FROM users')
for row in cursor.fetchall():
    print(f'User: {row[0]}, Admin: {row[1]}')
conn.close()
"
docker exec -it stellars-jupyterhub-ds-jupyterhub python3 -c "
import sqlite3
conn = sqlite3.connect('/data/jupyterhub.sqlite')
conn.execute(\"UPDATE users SET admin=1 WHERE name='super'\")
conn.commit()
print('Готово')
for row in conn.execute('SELECT name, admin FROM users'):
    print(f'User: {row[0]}, Admin: {row[1]}')
conn.close()
"

После этого зайти по логином super и сменить пароль пользователя admin. После этого можно работать под логином admin.