Обзор развертывания JupyterLab на сервере¶
Предварительные требования и базовые настройки¶
Развертывание JupyterLab на хост-сервере требует следующих системных предпосылок и конфигураций:
-
Операционная система: Ubuntu Linux.
-
Привилегии: Для управления сервисами и внесения изменений в конфигурацию требуются права root (суперпользователя).
-
Домен: Развертывание настроено для домена
hostkey.in. -
Сетевые порты:
-
Порт
443(HTTPS) для внешнего безопасного доступа через обратный прокси. -
Порт
8888(TCP) для внутреннего сервиса приложения JupyterLab.
-
FQDN конечной панели¶
Конечная точка доступа к приложению разрешается через домен Hostkey с использованием конкретного префикса и идентификатора сервера: labServer ID'.hostkey.in:443 (Примечание: Замените "Server ID" на фактический идентификатор вашего экземпляра для формирования полного FQDN, например, lab123.hostkey.in.)
Структура файлов и директорий¶
Приложение и поддерживающие его сервисы используют следующую структуру директорий на хост-системе:
-
Директория данных:
/opt/dataслужит основным местом хранения для ноутбуков JupyterLab и виртуальных окружений.-
Виртуальное окружение:
/opt/data/jupyter -
Общая директория Jupyter:
/opt/data/jupyter/share/jupyter
-
-
Конфигурация Nginx:
/root/nginxсодержит конфигурацию Docker Compose для обратного прокси. -
Сервис Systemd:
/usr/lib/systemd/system/jupyterlab.serviceопределяет единицу управления сервисом. -
Сертификаты и секреты: Nginx монтирует сертификаты в
/etc/letsencrypt(через том Dockernginx_secrets) и конфигурации пользователей в/etc/nginx/user_conf.d. -
Домашняя директория системы: Директория
/homeмонтируется в контейнер Nginx.
Процесс установки приложения¶
Приложение JupyterLab устанавливается непосредственно на хост Ubuntu с использованием менеджеров пакетов и виртуального окружения Python:
-
Системные пакеты: Основные зависимости, включая
python3,python3-pip,jupyterиpython3-virtualenv, устанавливаются через менеджер пакетовapt. -
Создание пользователя: Для контекста выполнения создается специальный системный пользователь
jupyter(UID 2841) и группаjupyter(GID 2841). -
Виртуальное окружение: Виртуальное окружение Python инициализируется в
/opt/data/jupyter. -
Установка пакетов: Следующие пакеты Python устанавливаются внутри виртуального окружения:
-
jupyterlab -
jupyter-core -
voila -
jupyter-server
-
-
Генерация конфигурации:
-
Конфигурационный файл Jupyter Lab генерируется с помощью команды
/opt/data/jupyter/bin/jupyter lab --generate-config. -
Пароль для доступа генерируется с помощью команды
/opt/data/jupyter/bin/jupyter lab password.
-
-
Настройка сервиса: Файл сервиса
systemdразвернут для управления жизненным циклом приложения.
Права доступа и безопасность¶
Безопасность и контроль доступа реализованы через следующие механизмы:
-
Межсетевой экран (Firewall): Доступ ограничен портом
443(HTTPS) для внешнего трафика. Внутренний трафик использует порт8888. -
Контекст пользователя: Сервис JupyterLab работает от имени пользователя и группы
root, как определено в файле сервисаjupyterlab.service(User=root,Group=root). -
Сетевая изоляция: Обратный прокси Nginx работает в режиме сети
host(network_mode: host), непосредственно используя стек сети хоста. -
SSL/TLS: Безопасные соединения обрабатываются контейнером
nginx-certbot, который управляет SSL-сертификатами через Let's Encrypt.
Контейнеры Docker и их развертывание¶
Контейнер обратного прокси развернут с использованием Docker Compose для обработки завершения SSL-сессий (SSL termination) и маршрутизации трафика.
Место развертывания: /root/nginx Команда управления:
Детали контейнера:
-
Образ:
jonasal/nginx-certbot:latest -
Политика перезапуска:
unless-stopped -
Томы (Volumes):
-
nginx_secrets(внешний) отображен на/etc/letsencrypt. -
Путь хоста
/data/nginx/user_conf.dотображен на/etc/nginx/user_conf.d. -
Путь хоста
/homeотображен на/homeвнутри контейнера.
-
-
Окружение (Environment):
-
CERTBOT_EMAIL: Установлено вhkadm@hostkey.com. -
Конфигурация загружена из
/data/nginx/nginx-certbot.env.
-
Прокси-серверы¶
Трафик маршрутизируется через контейнер обратного прокси Nginx, который обеспечивает завершение SSL-сессий и поддержку пользовательских доменов:
-
ПО: Nginx с интеграцией Certbot.
-
Источник образа:
jonasal/nginx-certbot. -
Конфигурация: Конфигурация прокси генерируется и хранится в
/root/nginx/compose.yml. -
Управление SSL: Автоматическая генерация и обновление сертификатов обрабатываются встроенным функционалом Certbot контейнера.
-
Маршрутизация: Прокси пересылает запросы с порта
443на внутренний сервис JupyterLab на порту8888.
Настройки прав доступа¶
Права доступа к файлам и директориям настроены следующим образом:
-
/opt/data: Владелецjupyter:jupyter, режим0777(чтение, запись, выполнение для всех). -
/opt/data/jupyter: Владелецjupyter:jupyter, режим0755(чтение, выполнение для других). -
/root/nginx: Владелецroot:root, режим0644. -
Конфигурационные файлы: Файлы
jupyterlab.serviceиcompose.ymlпринадлежат пользователюroot.
Расположение конфигурационных файлов и данных¶
-
Конфигурация JupyterLab:
/root/.jupyter/jupyter_lab_config.pyи/root/.jupyter/jupyter_server_config.json. -
Docker Compose для Nginx:
/root/nginx/compose.yml. -
Окружение Nginx:
/data/nginx/nginx-certbot.env. -
Определение сервиса:
/usr/lib/systemd/system/jupyterlab.service. -
Данные ноутбуков:
/opt/data/jupyter/share/jupyter.
Доступные порты для подключения¶
Система открывает следующие порты для сетевого взаимодействия:
-
Порт 443: HTTPS (Внешний доступ через прокси Nginx).
-
Порт 8888: TCP (Внутренний сервис JupyterLab, не напрямую доступен из общедоступного интернета).
Запуск, остановка и обновление¶
Приложение JupyterLab управляется через менеджер сервисов systemd.
Запуск сервиса:
Остановка сервиса:
Перезапуск сервиса:
Включение при загрузке:
Проверка состояния:
Перезагрузка конфигурации демона:
Для обновления конфигурации прокси Nginx измените файл по адресу /root/nginx/compose.yml и выполните команду docker compose up -d в директории /root/nginx.