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

Обзор развертывания 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 (через том Docker nginx_secrets) и конфигурации пользователей в /etc/nginx/user_conf.d.

  • Домашняя директория системы: Директория /home монтируется в контейнер Nginx.

Процесс установки приложения

Приложение JupyterLab устанавливается непосредственно на хост Ubuntu с использованием менеджеров пакетов и виртуального окружения Python:

  1. Системные пакеты: Основные зависимости, включая python3, python3-pip, jupyter и python3-virtualenv, устанавливаются через менеджер пакетов apt.

  2. Создание пользователя: Для контекста выполнения создается специальный системный пользователь jupyter (UID 2841) и группа jupyter (GID 2841).

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

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

    • jupyterlab

    • jupyter-core

    • voila

    • jupyter-server

  5. Генерация конфигурации:

    • Конфигурационный файл Jupyter Lab генерируется с помощью команды /opt/data/jupyter/bin/jupyter lab --generate-config.

    • Пароль для доступа генерируется с помощью команды /opt/data/jupyter/bin/jupyter lab password.

  6. Настройка сервиса: Файл сервиса 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 Команда управления:

docker compose up -d

Детали контейнера:

  • Образ: 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.

Запуск сервиса:

systemctl start jupyterlab

Остановка сервиса:

systemctl stop jupyterlab

Перезапуск сервиса:

systemctl restart jupyterlab

Включение при загрузке:

systemctl enable jupyterlab

Проверка состояния:

systemctl status jupyterlab

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

systemctl daemon-reload

Для обновления конфигурации прокси Nginx измените файл по адресу /root/nginx/compose.yml и выполните команду docker compose up -d в директории /root/nginx.

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