Перейти к содержанию

Обзор развертывания 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 внутри специального виртуального окружения. Процесс включает следующие шаги:

  1. Установка системных зависимостей, включая python3, python3-pip, jupyter и python3-virtualenv.

  2. Создание системного пользователя и группы с именем jupyter с UID и GID 2841.

  3. Инициализация виртуального окружения Python в каталоге /opt/data/jupyter.

  4. Установка следующих пакетов Python внутри виртуального окружения:

  5. notebook

  6. voila

  7. virtualenv

  8. jupyter-server

  9. Генерация файла конфигурации Jupyter по умолчанию.

  10. Настройка сервера для разрешения доступа из любого источника (origin).

  11. Установление пароля для интерфейса 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 на внутренний порт Jupyter 8888.

Настройки прав доступа

Права доступа к файлам и каталогам настроены следующим образом:

  • /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. Для управления службой используйте следующие команды:

  • Запуск службы:

    systemctl start jupyter-notebook
    

  • Остановка службы:

    systemctl stop jupyter-notebook
    

  • Перезапуск службы:

    systemctl restart jupyter-notebook
    

  • Включение автоматического запуска при загрузке:

    systemctl enable jupyter-notebook
    

  • Перезагрузка конфигурации демона:

    systemctl daemon-reload
    

Для обновления конфигурации прокси-сервера Docker перейдите в каталог /root/nginx и выполните:

docker compose up -d

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×