Настройка среды JupyterLab в Ubuntu 18.04

JupyterLab – это многофункциональный пользовательский интерфейс, который упрощает выполнение задач, особенно в областях науки о данных и искусственного интеллекта. Среда JupyterLab – это редизайн Jupyter Notebook, ориентированный на производительность. Он предлагает такие инструменты, как встроенное средство просмотра HTML и CSV, а также функции, объединяющие несколько отдельных функций Jupyter Notebooks на одном экране.

В этом мануале вы узнаете, как установить и настроить JupyterLab на сервере Ubuntu 18.04. Мы также покажем, как настроить сервер так, чтобы он мог подключаться к JupyterLab удаленно, по домену с помощью любого веб-браузера.

Требования

  • Сервер Ubuntu 18.04 с пользователем sudo, настроенный согласно этому мануалу.
  • Установка Python Anaconda (читайте мануал Установка Anaconda в Ubuntu 18.04).
  • Зарегистрированный домен или субдомен, чьи DNS-записи вы можете редактировать. В этом руководстве мы будем использовать условное обозначение your_domain.
  • DNS-записи A для your_domain и www.your_domain, направленные на внешний IP-адрес вашего сервера.

1: Установка пароля

Давайте установим пароль для среды JupyterLab. Это важно, потому что экземпляр JupyterLab будет доступен в сети.

Для начала убедитесь, что ваша среда Anaconda активирована. Согласно руководству по установке Anaconda среда называется base.

Чтобы активировать среду, используйте следующую команду:

conda activate base

Командная строка изменится, чтобы показать, что вы находитесь в среде Anaconda:

8host@your_server:~$

Все дальнейшие команды в этом мануале будут выполняться в среде base.

Активировав среду Anaconda, вы можете установить пароль для JupyterLab.

Давайте сначала сгенерируем конфигурационный файл для Jupyter:

jupyter notebook --generate-config

Вы получите такой вывод:

Writing default config to: /home/8host/.jupyter/jupyter_notebook_config.py

JupyterLab и Jupyter Notebook используют один и тот же конфигурационный файл.

Теперь используйте следующую команду, чтобы установить пароль для удаленного доступа к экземпляру JupyterLab:

jupyter notebook password

Jupyter предложит выбрать и ввести пароль:

Enter password:
Verify password:
[NotebookPasswordApp] Wrote hashed password to /home/8host/.jupyter/jupyter_notebook_config.json

Jupyter сохранит пароль в хешированном формате в файле /home/8host/.jupyter/jupyter_notebook_config.json. Это хешированное значение понадобится вам в будущем.

Затем используйте команду cat, чтобы просмотреть хешированный пароль в только что созданном файле:

cat /home/8host/.jupyter/jupyter_notebook_config.json

Вы получите следующий результат:

{
"NotebookApp": {
"password": "sha1:your_hashed_password"
}
}

Скопируйте значение ключа password и временно сохраните его.

Читайте также: Использование JSON в JavaScript

Итак, вы защитили среду JupyterLab паролем. На следующем этапе мы создадим сертификат Let’s Encrypt для сервера.

2: Настройка Let’s Encrypt

Давайте создадим сертификат Let’s Encrypt для своего домена. Это защитит данные при доступе к среде JupyterLab из браузера.

Сначала установите клиент Certbot. Добавьте его репозиторий в исходники apt:

sudo add-apt-repository ppa:certbot/certbot

При выполнении команды вам будет предложено нажать Enter, чтобы завершить добавление PPA:

This is the PPA for packages prepared by Debian Let's Encrypt Team and backported for Ubuntu.
Note: Packages are only provided for currently supported Ubuntu releases.
More info: https://launchpad.net/~certbot/+archive/ubuntu/certbot
Press [ENTER] to continue or Ctrl-c to cancel adding it.

Нажмите Enter, чтобы продолжить.

После выполнения команды обновите исходники apt:

sudo apt update

Затем установите Certbot:

sudo apt install certbot

Прежде чем вы сможете запустить Certbot для создания сертификатов, вы должны открыть трафик, поступающий через порты 80 и 443: Certbot будет использовать эти порты для проверки вашего домена. Порт 80 позволяет проверить HTTP-запросы к серверу, а порт 443 – HTTPS-запросы. Certbot сначала сделает http-запрос, а затем – после получения сертификатов для вашего сервера – он сделает https-запрос, который будет проксирован через порт 443 процессу, прослушивающему порт 80. Это подтвердит успешность установки вашего сертификата.

Сначала откройте доступ к порту 80:

sudo ufw allow 80

Вы получите следующий вывод:

Rule added
Rule added (v6)

Затем разрешите доступ к порту 443:

sudo ufw allow 443
Rule added
Rule added (v6)

Наконец, запустите Certbot, чтобы сгенерировать сертификаты для вашего экземпляра. Для этого используйте следующую команду:

sudo certbot certonly --standalone

Флаг standalone запускает сервер на время процесса проверки.

Вам будет предложено ввести адрес электронной почты:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): your_email

Введите действительный адрес электронной почты и нажмите Enter.

Затем Certbot попросит вас прочитать и принять условия использования Let’s Encrypt. Просмотрите условия, введите A, если вы принимаете их, и нажмите Enter:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

Теперь Certbot предложит вам поделиться своей электронной почтой с Electronic Frontier Foundation. Введите свой ответ и нажмите Enter:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y/N

В конце вам нужно ввести свой домен. Укажите домен без протоколов:

Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): your_domain
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/your_domain/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/your_domain/privkey.pem
Your cert will expire on 2020-09-28. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
Donating to EFF:                    https://eff.org/donate-le

Certbot выполнит проверку домена, сгенерирует для него сертификаты и ключи и сохранит их в /etc/letsencrypt/live/your_domain.

Теперь, когда вы получили сертификат Let’s Encrypt, обновите конфигурации JupyterLab.

3: Настройка JupyterLab

Теперь пора отредактировать конфигурацию JupyterLab, чтобы добавить в нее созданный только что сертификат Let’s Encrypt. Сейчас вам также понадобится пароль, который вы установили в разделе 1.

Откройте конфигурационный файл JupyterLab, /home/8host/.jupyter/jupyter_notebook_config.py:

nano /home/8host/.jupyter/jupyter_notebook_config.py

Теперь найдите строку c.NotebookApp.certfile и обновите ее следующим образом:

...
## The full path to an SSL/TLS certificate file.
c.NotebookApp.certfile = '/etc/letsencrypt/live/your_domain/fullchain.pem'
...

Затем найдите переменную c.NotebookApp.keyfile и отредактируйте ее так:

...
## The full path to a private key file for usage with SSL/TLS.
c.NotebookApp.keyfile = '/etc/letsencrypt/live/your_domain/privkey.pem'
...

Строки c.NotebookApp.certfile и c.NotebookApp.keyfile относятся к SSL-сертификату, который будет использоваться при попытке удаленного доступа к серверу по протоколу https.

Затем перейдите к строке c.NotebookApp.ip и обновите ее следующим образом:

...
## The IP address the notebook server will listen on.
c.NotebookApp.ip = '*'
...

c.NotebookApp.ip определяет IP-адреса, которые могут получить доступ к JupyterLab на вашем сервере. Установите здесь подстановочный знак *, чтобы разрешить доступ к среде с любого компьютера.

Затем найдите конфигурацию c.NotebookApp.open_browser и обновите ее следующим образом:

...
## Whether to open in a browser after starting. The specific browser used is
#  platform dependent and determined by the python standard library `webbrowser`
#  module, unless it is overridden using the --browser (NotebookApp.browser)
#  configuration option.
c.NotebookApp.open_browser = False
...

По умолчанию JupyterLab пытается автоматически запустить сеанс браузера при запуске. Поскольку на удаленном сервере браузера нет, необходимо отключить эту настройку, чтобы избежать ошибок.

Затем перейдите к переменной c.NotebookApp.password и измените ее таким образом:

...
## Hashed password to use for web authentication.
#
#  To generate, type in a python/IPython shell:
#
#    from notebook.auth import passwd; passwd()
#
#  The string should be of the form type:salt:hashed-password.
c.NotebookApp.password = 'your_hashed_password'
...

JupyterLab будет использовать хешированное значение для проверки пароля, который вы вводите в своем браузере во время аутентификации.

Затем обновите запись c.NotebookApp.port:

...
## The port the notebook server will listen on.
c.NotebookApp.port = 9000
...

c.NotebookApp.port устанавливает фиксированный порт для доступа к среде выполнения JupyterLab. Так вы можете разрешить доступ только через один порт в брандмауэре ufw.

Когда вы закончите, сохраните изменения и выйдите из файла.

Теперь откройте трафик на порт 9000:

sudo ufw allow 9000

Вы получите следующий результат:

Rule added
Rule added (v6)

Теперь можно запустить JupyterLab.

4: Запуск JupyterLab

На этом этапе мы выполним тестовый запуск JupyterLab.

Сначала перейдите из текущего рабочего каталога в домашний каталог пользователя:

cd ~

Теперь измените права доступа к файлам сертификатов, чтобы позволить JupyterLab использовать их. Измените права доступа к папке /etc/letsencrypt:

sudo chmod 750 -R /etc/letsencrypt
sudo chown 8host:8host -R /etc/letsencrypt

Затем запустите экземпляр JupyterLab:

jupyter lab

Эта команда принимает несколько параметров. Однако мы уже внесли эти значения в конфигурации, нам не нужно указывать их в команде. Вы можете предоставить их в качестве аргументов команды, если хотите переопределить какие-то значения в конфигурационном файле.

Теперь вы можете перейти по адресу https://your_domain:9000, чтобы открыть форму входа в JupyterLab.

Если вы войдете в систему с помощью пароля, который вы установили для JupyterLab в разделе 2, вы получите доступ к интерфейсу JupyterLab.

Дважды нажмите Ctrl+C, чтобы остановить сервер JupyterLab.

На следующем этапе мы настроим системный сервис, чтобы сервер JupyterLab мог непрерывно работать в фоновом режиме.

5: Создание сервиса systemd

Давайте настроим сервис systemd, чтобы среда JupyterLab могла работать, даже если окно терминала закрыто.

Читайте также: Основы Systemd: управление сервисами и журналирование

Сначала нам нужно создать файл .service:

sudo nano /etc/systemd/system/jupyterlab.service

Добавьте следующий код в этот файл:

[Unit] Description=Jupyter Lab Server
[Service] User=8host
Group=8host
Type=simple
WorkingDirectory=/home/8host/
ExecStart=/home/8host/anaconda3/bin/jupyter-lab --config=/home/8host/.jupyter/jupyter_notebook_config.py
StandardOutput=null
Restart=always
RestartSec=10
[Install] WantedBy=multi-user.target

Сохраните файл и выйдите из редактора, когда закончите.

Файл с расширением service автоматически регистрируется в системе как демон. Однако по умолчанию он не запускается.

Используйте команду systemctl, чтобы запустить сервис:

sudo systemctl start jupyterlab

Это запустит сервер JupyterLab в фоновом режиме. Вы можете проверить, запущен ли сервер, используя следующую команду:

sudo systemctl status jupyterlab

Вы получите следующий результат:

jupyterlab.service - Jupyter Lab Server
Loaded: loaded (/etc/systemd/system/jupyterlab.service; disabled; vendor preset: enabled)
Active: active (running) since Sun 2020-04-26 20:58:29 UTC; 5s ago
Main PID: 5654 (jupyter-lab)
Tasks: 1 (limit: 1152)
CGroup: /system.slice/jupyterlab.service
└─5654 /home/8host/anaconda3/bin/python3.7 /home/8host/anaconda3/bin/jupyter-lab --config=/home/

Теперь вы можете перейти по адресу https://your_domain:9000 в любом браузере, указать пароль и получить доступ к среде JupyterLab, запущенной на вашем сервере.

6: Автоматическое продление сертификата Let’s Encrypt

На этом этапе мы настроим автоматическое обновление SSL-сертификатов по истечении срока их действия (каждый сертификат действителен в течение 90 дней) и перезапуск сервера для загрузки новых сертификатов.

Хотя Certbot берет продление срока сертификатов на себя, он не перезагружает сервер автоматически. Чтобы настроить сервер для перезапуска с обновленными сертификатами, вам нужно добавить renew_hook в конфигурации Certbot вашего сервера.

Отредактируйте файл /etc/letsencrypt/renewal/your_domain.conf:

sudo nano /etc/letsencrypt/renewal/your_domain.conf

В конце файла поместите такую строку:

...
renew_hook = systemctl reload jupyterlab

Сохраните и закройте файл.

Запустите сухой прогон процесса обновления. Чтобы убедиться, что в файле нет ошибок и все работает.

sudo certbot renew --dry-run

Если команда не выдает ошибок, значит, процесс обновления Certbot успешно настроен и будет автоматически перезагружать сервер, когда срок действия сертификата приблизится к истечению.

Заключение

В этом мануале вы настроили среду JupyterLab на своем сервере и открыли удаленный доступ к ней. Среда JupyterLab обладает всеми преимуществами облачных серверов. Теперь вы можете работать над проектами, связанными с машинным обучением или наукой о данных, из любого браузера. При этом все операции по обмену данными будут защищены SSL-шифрованием.

Tags: , , , , ,

Добавить комментарий