Обзор развертывания Jupyter Notebook на сервере¶
Предварительные требования¶
Для корректной работы приложения требуются следующие параметры и условия:
-
Операционная система: Ubuntu.
-
Права доступа: Требуется доступ с правами суперпользователя (root) для установки системных пакетов и настройки сервисов.
-
Порты:
-
Внутренний порт приложения:
8888. -
Внешний порт (через прокси):
443(HTTPS).
FDQN итоговой панели на домене hostkey.in¶
Для доступа к приложению используется следующий шаблон доменного имени:
| Параметр | Значение |
|---|---|
| Префикс | notebook |
| Домен | hostkey.in |
| Полный шаблон | notebook{Server_ID}.hostkey.in |
Структура файлов и каталогов¶
В системе создаются следующие директории для хранения данных и конфигураций:
-
/opt/data— основное хранилище данных пользователяjupyter. -
/opt/data/jupyter— директория виртуального окружения Python. -
/root/nginx— рабочая директория контейнера Nginx с файломcompose.yml. -
/data/nginx/user_conf.d— пользовательские конфигурации Nginx. -
/data/nginx/nginx-certbot.env— файл переменных окружения для SSL.
Процесс установки приложения¶
Установка выполняется в несколько этапов:
-
Подготовка системы: Создается системный пользователь и группа
jupyter(UID/GID2841). -
Установка зависимостей: С помощью пакетного менеджера
aptустанавливаютсяpython3,python3-pip,jupyter, иpython3-virtualenv. -
Настройка окружения Python:
-
Создается виртуальное окружение в
/opt/data/jupyter. -
Внутри виртуального окружения устанавливаются пакеты:
notebook,voila,virtualenvиjupyter-server. -
Конфигурация Jupyter:
-
Генерируется стандартный файл конфигурации.
-
В настройки вносится изменение для разрешения внешних подключений (
c.ServerApp.allow_origin = '*'). -
Устанавливается пароль доступа для пользователя.
-
Настройка сервиса: Создается системный юнит
jupyter-notebook.serviceдля автоматического запуска приложения при загрузке системы. -
Развертывание прокси-сервера: Настраивается контейнер Nginx с поддержкой SSL через Certbot.
Права доступа и безопасность¶
-
Для работы с данными используется выделенный системный пользователь
jupyter. -
Директория
/opt/dataимеет права0777, что обеспечивает доступ для процесса Jupyter. -
Конфигурационные файлы Nginx в директории
/root/nginxимеют права доступа0644.
Базы данных¶
В данной конфигурации внешняя база данных не используется; данные приложения хранятся локально в файловой системе сервера.
Контейнеры Docker и их запуск¶
Для обеспечения безопасного доступа по HTTPS используется один основной контейнер:
Nginx с поддержкой SSL (Certbot)
-
Образ:
jonasal/nginx-certbot:latest -
Порты: Используется режим
hostдля прямого управления сетевым стеком. -
Тома (volumes):
-
nginx_secrets:/etc/letsencrypt— хранение SSL-сертификатов. -
/data/nginx/user_conf.d:/etc/nginx/user_conf.d— пользовательские настройки проксирования. -
/home:/home— монтирование домашних директорий пользователей. -
Переменные окружения:
CERTBOT_EMAIL=hkadm@hostkey.com. -
Политика перезапуска:
unless-stopped.
Кастомные скрипты и дополнительные настройки¶
В процессе развертывания выполняются следующие действия:
-
Генерация пароля для Jupyter Notebook через интерактивный запрос (автоматизированно).
-
Настройка системного сервиса
systemdдля управления процессом Jupyter. -
Создание конфигурационного файла
/root/.jupyter/jupyter_server_config.json.
Инструкция по обновлению приложения¶
Для обновления основного приложения необходимо:
-
Обновить пакеты через менеджер пакетов:
apt update && apt upgrade jupyter notebook. -
Перезапустить сервис Jupyter:
systemctl restart jupyter-notebook. -
Если вносятся изменения в конфигурацию прокси, обновите контейнер Nginx:
cd /root/nginx && docker compose up -d --force-recreate.
Расположение конфигурационных файлов и данных¶
| Тип файла | Путь к файлу |
|---|---|
| Конфигурация Jupyter | /root/.jupyter/jupyter_server_config.json |
| Данные приложения | /opt/data/jupyter/share/jupyter |
| Файл конфигурации Nginx | /data/nginx/user_conf.d/ |
Доступные порты для подключения¶
-
443(HTTPS) — основной порт для доступа через браузер. -
8888(HTTP) — внутренний порт приложения (доступен внутри сервера).