118 lines
4.8 KiB
Markdown
118 lines
4.8 KiB
Markdown
# 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(`/`)"
|
||
```
|
||
|
||
|
||
|
||
Смена администратора
|
||
|
||
* Создать нового пользователя, к примеру `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()
|
||
"
|
||
```
|
||
|