Обзор развертывания Jupyter Notebook на сервере¶
Предварительные требования и основные условия¶
Для работы экземпляра Jupyter Notebook необходимы следующие компоненты и привилегии:
-
Операционная система: Ubuntu
-
Привилегии: Для начальной настройки и управления службой требуются права root.
-
Домен: Служба работает в зоне
hostkey.in. -
Порты:
-
Внутренний порт приложения:
8888 -
Внешний порт HTTPS:
443
FQDN конечной панели¶
Приложение доступно по следующему полному доменному имени (FQDN):
notebook<Server ID>.hostkey.in:443
Структура файлов и каталогов¶
Развертывание использует следующую структуру каталогов для конфигурации, данных и журналов:
-
/opt/data: Главный каталог для данных Jupyter и файлов пользователей. -
/opt/data/jupyter: Каталог, содержащий виртуальное окружение Python и установку Jupyter. -
/root/.jupyter: Каталог, содержащий файлы конфигурации Jupyter. -
/root/nginx: Каталог, содержащий файл Docker Compose для обратного прокси-сервера. -
/etc/systemd/system: Расположение файла службы Jupyter Notebook (ссылка на/usr/lib).
Процесс установки приложения¶
Приложение устанавливается с использованием инструментов управления пакетами Python внутри специального виртуального окружения. Процесс включает следующие шаги:
-
Установка системных зависимостей, включая
python3,python3-pip,jupyterиpython3-virtualenv. -
Создание системного пользователя и группы с именем
jupyterс UID и GID2841. -
Инициализация виртуального окружения Python в каталоге
/opt/data/jupyter. -
Установка следующих пакетов Python внутри виртуального окружения:
-
notebook -
voila -
virtualenv -
jupyter-server -
Генерация файла конфигурации Jupyter по умолчанию.
-
Настройка сервера для разрешения доступа из любого источника (origin).
-
Установление пароля для интерфейса Jupyter.
Права доступа и безопасность¶
Контроли безопасности реализованы следующим образом:
-
Межсетевой экран (Firewall): Внешний доступ ограничен портом
443через обратный прокси-сервер Nginx. -
Изоляция пользователей: Создается отдельный системный пользователь
jupyterдля управления процессом приложения и правами владения данными. -
Выполнение службы: Служба Jupyter работает с привилегиями root для обработки привязки к сети, хотя рабочий каталог принадлежит пользователю
jupyter. -
Ограничения по источнику: Конфигурация Jupyter явно разрешает все источники (
c.ServerApp.allow_origin = '*').
Базы данных¶
Текущая реализация не использует внешние реляционные или NoSQL базы данных. Персистентность данных управляется через локальную файловую систему в каталоге /opt/data.
Контейнеры Docker и их развертывание¶
Для управления завершением SSL (SSL termination) и маршрутизацией доменов развертывается контейнер обратного прокси-сервера:
-
Образ:
jonasal/nginx-certbot:latest -
Метод развертывания: Docker Compose
-
Имя контейнера:
nginx(определено в файле compose) -
Политика перезапуска:
unless-stopped -
Режим сети: Host
-
Привязанные тома:
-
nginx_secrets(отображен в/etc/letsencryptдля SSL-сертификатов) -
/data/nginx/user_conf.d(отображен в/etc/nginx/user_conf.dдля пользовательских конфигураций) -
/home(отображен в/home)
Прокси-серверы¶
Трафик к Jupyter Notebook передается через Nginx с интеграцией Let's Encrypt для шифрования SSL/TLS:
-
ПО: Nginx с Certbot
-
Расположение конфигурации:
/root/nginx/compose.yml -
Переменные окружения:
-
CERTBOT_EMAIL:hkadm@hostkey.com -
Внешний путь:
/ -
Внутренняя маршрутизация: Прокси направляет трафик с порта
443на внутренний порт Jupyter8888.
Настройки прав доступа¶
Права доступа к файлам и каталогам настроены следующим образом:
-
/opt/data: Владелецjupyter, Группаjupyter, Режим0777. -
/opt/data/jupyter: Владелецjupyter, Группаjupyter, Режим0755. -
/root/nginx: Владелецroot, Группаroot, Режим0644. -
/root/.jupyter: Владелецroot(создается во время генерации конфигурации).
Расположение файлов конфигурации и данных¶
Основные файлы конфигурации и данных находятся по следующим путям:
-
Единица службы (Service Unit):
/usr/lib/systemd/system/jupyter-notebook.service -
Конфигурация Jupyter:
/root/.jupyter/jupyter_server_config.json(используется в службе) и/root/.jupyter/jupyter_notebook_config.py. -
Docker Compose:
/root/nginx/compose.yml -
Данные Notebook:
/opt/data/jupyter/share/jupyter
Доступные порты для подключения¶
-
443: HTTPS (Внешний доступ через прокси Nginx).
-
8888: Внутренний порт Jupyter Notebook (не открыт напрямую в публичный интернет).
Запуск, остановка и обновление¶
Приложение Jupyter Notebook управляется как нативная служба systemd. Для управления службой используйте следующие команды:
-
Запуск службы:
-
Остановка службы:
-
Перезапуск службы:
-
Включение автоматического запуска при загрузке:
-
Перезагрузка конфигурации демона:
Для обновления конфигурации прокси-сервера Docker перейдите в каталог /root/nginx и выполните: