Jupyter Notebook и Anaconda для удаленной разработки на отдельном Ubuntu Server, нужны для облегчения себе жизни. А так же чтобы не таскать с места на место свои проектики или не работать с jupyter notebook через удалённый рабочий стол. Еще распространена ситуация, когда у вас дома, в офисе, на даче или в датацентре стоит мощная вычислительная нода, многопроцессорная, с профильными для машинного обучения картами. Доступ к ней напрямую по HTTPS всегда удобнее чем через какой-либо каскад графических удаленных рабочих столов.
Можно конечно всё поставить на масдай, но 1) нестабильно, 2) в случае работы в виртуальной среде еще и нарушает лицензию использования масдая. Ведь 99.9% желающих захотят запилить в виртуальную среду какую-нибудь обычную прошку да? А она даже с лицензионным валидным ключем — будет нарушать еулу. Собственно зачем жертвовать стабильностью работы, и нарушать лицензию, если этого можно избежать?
В данной статье не рассматриваются вопросы относительно проброса трафика из интернета до вашей ноды. Подразумевается что этот вопрос у вас уже решен и ваш трафик из интернета спокойно доходит до вашей ноды, хотя бы по одному TCP порту.
- Что мы имеем?
Некий сервер, внутри нашей локальной сети, куда мы хотим запилить Ubuntu Server, на неё установить Anaconda и использовать идущей в комплекте Jupyter Notebook. Почему не голый Jupyter Notebook? Потому что у анаконды в комплекте куча еще всяких прочих плюшек. - Что нам надо?
Собственно только сервер (В моём случае виртуальная машина внутри бесплатного гипервизора ESXi). Чем мощнее тем лучшее, но всё зависит от того чем именно вы занимаетесь в Jupyter Notebook.
Я буду использовать виртмашину где:- 4 vCPU от процессора Intel
- 8Gb Ram
- 16Gb Hdd
- IP 192.168.220.135
Вы свои параметры должны определить для себя самостоятельно
С чего стоит начать:
Что может пригодиться:
-
Обновляем сервер для Jupyter Notebook
sudo apt update && sudo apt dist-upgrade -y
-
Скачиваем дистрибутив с официального сайта
wget https://repo.anaconda.com/archive/Anaconda3-2019.07-Linux-x86_64.sh
-
Проверяем хеш скачанного файла
Открываем страницу с хешами, выбираем тип дистрибутива который качали, и там смотрим конкретную версию файла
В моём случае я скачивал в корень своей папки, поэтому у меня команда будет выглядеть так:
md5sum ~/Anaconda3-2019.07-Linux-x86_64.sh
-
Устанавливаем Anaconda
Вводим команду
bash ~/Anaconda3-2019.07-Linux-x86_64.sh
, принимаем лицензионное соглашение введяyes
и ожидаем окончания установки
В конце инсталлятор спроситВводим
yes
и вуаля! С установкой Anaconda мы закончили.
Для того чтобы изменения вступили в силу, необходимо перелогиниться завершив сессию с помощьюexit
или просто перезагрузить сервер с помощьюsudo reboot -h now
-
Настраиваем Jupyter Notebook
-
Генерируем конфиг файл
jupyter notebook --generate-config
Эта команда сгенерирует конфиг файл, в моём случае по следующему пути:
/home/belfigor/.jupyter/jupyter_notebook_config.py
-
Генерируем ssl сертификат
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout mykey.key -out mycert.pem
Данная команда сгенерирует файлы сертификата в той же папке, которая была открыта в момент запуска. В моём случае это домашняя моя домашняя папка
~/
, полный путь выглядит как/home/belfigor
-
Изменяем конфигурацию Jupyter Notebook
Открываем на редактирование наш конфиг и ищим указанные ниже параметры
nano /home/belfigor/.jupyter/jupyter_notebook_config.py
Искать параметры в nano можно с помощью комбинации клавишь Ctrl+W. Сохранить изменения с помощью Ctrl+O, а завершить редактирование с помощью Ctrl+X.
- Находим следующие строки и прописываем там путь до файлов сертификатов
c.NotebookApp.keyfile = '/home/belfigor/mykey.key' c.NotebookApp.certfile = '/home/belfigor/mycert.pem'
- Прописываем интерфейс на котором Jupyter Notebook будет принимать подключения
c.NotebookApp.ip = '192.168.220.135'
Я указываю ip интерфейса, которым сервер смотрит в локальную сеть, откуда из интернета прокинут порт 35344, для доступа из вне.
Если у сервера больше одного интерфейса и мы хотим чтобы Jupyter обрабатывал входящие подключения со всех, можно указать «*» - Задаем порт на котором будут обрабатываться подключения
c.NotebookApp.port = 35344
- Отключаем автозапуск браузера
Так как у нас Ubuntu Server, обладающий лишь текстовой консолью, нам нет необходимости, чтобы он каждый раз пытался запустить браузер.c.NotebookApp.open_browser = False
- Дополнительные настройки
Так же внутри конфиг файла есть огромная куча настроек, ненужных для личного использования, но которые могут оказаться полезными при более глубоком изучении инфраструктуры Jupyter и построении какой-то «своей особенной не такой как у других» инфраструктуры 🙂
- Находим следующие строки и прописываем там путь до файлов сертификатов
-
Задаем пароль от веб интерфейса
jupyter notebook password
Этой же командой его можно сбросить если он забыт.
-
Запускаем Jupyter Notebook
Т.к. в пункте 5.2 мы сгенерировали файла сертификата, а в пункте 5.3 указали путь к ним, чтобы запустить Jupyter Notebook с подключением по https, нам достаточно воспользоваться командой
jupyter notebook
Так же, запустить сервер с использованием сертификатов можно без пункта 2, но тогда нам нужно будет прямо в ней указать расположение файлов сертификата
jupyter notebook --certfile=mycert.pem --keyfile=mykey.key
-
Подключаемся к Jupyter Notebook
После запуска, в консоли мы увидим на каком ip и порту стартовал сервер:
(base) belfigor@adminguide-ru:~$ jupyter notebook [I 10:19:50.263 NotebookApp] JupyterLab extension loaded from /home/belfigor/anaconda3/lib/python3.7/site-packages/jupyterlab [I 10:19:50.263 NotebookApp] JupyterLab application directory is /home/belfigor/anaconda3/share/jupyter/lab [I 10:19:50.265 NotebookApp] Serving notebooks from local directory: /home/belfigor [I 10:19:50.265 NotebookApp] The Jupyter Notebook is running at: [I 10:19:50.265 NotebookApp] https://192.168.220.135:35344/ [I 10:19:50.266 NotebookApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).
Нам осталось только открыть браузер и подключиться по указанным реквизитам
https://192.168.220.135:35344/
с другой машины внутри локальной сети и ввести пароль заданный в пункте 5.4 и уже можно приступать к работе.Собственно если не терпится начать что-то запиливать, то можно всё бросать и набигать на jupyter notebook. Но если же есть еще лишние 5 минут, предлагаю сделать свою жизнь чуть лучше установив менеджер расширений для jupyter.
-
-
Устанавливаем Nbextensions
Если Jupyter Notebook сервер работает, завершаем его работу с помощью Ctrl+C => y и последовательно вводим команды:
conda install -c conda-forge jupyter_contrib_nbextensions conda install -c conda-forge jupyter_nbextensions_configurator jupyter contrib nbextension install --user
Когда запрашивает подтверждение, вводим [y]
По окончании установки, зайдя в Jupyter Notebook мы увидим следующее:Скорее всего галочка disable configuration for… у вас стоит, снимаем её.
Теперь мы можем ставить представленные в списке расширения. Моё самое любимое — Table of Contents (2). Оно формирует из Markdown ячеек содержание, которе удобно использовать для быстрой навигации по проекту, когда счёт ячеек идёт на сотни.
Vkontakte Comments
Default Comments