Как настроить виртуальную машину для веб-доступа к jupyter notebook на облачной платформе Google?

#python #linux #google-cloud-platform #jupyter-notebook

#python #linux #google-cloud-platform #jupyter-notebook

Вопрос:

Я пытаюсь создать среду обработки данных в облачной платформе Google с помощью Python, Miniconda и Jupyter. Но я сталкиваюсь с ошибкой при попытке получить доступ к jupyter с внешнего IP

Я выполнил эти шаги:

1 — Я получил доступ к странице управления ресурсами (https://console.cloud.google.com/cloud-resource-manager ). Создайте новый проект (test_01)

2 — Я открыл панель мониторинга (https://console.cloud.google.com/home/dashboard ). Я выбрал только что созданный проект (test_01)

3 — В верхнем левом меню выберите «Вычислительный движок» и нажмите «Экземпляры виртуальной машины. Нажмите на кнопку «Создать»

4 — Я заполнил: Назовите экземпляр (the-who), выберите регион (в моем случае — Северная Америка-северо-Восток 1-a), выберите память, хранилище и процессор, выберите загрузочный диск, удаленный доступ SSH, убедитесь, что вы можете получить доступ к виртуальной машине из Интернета, разрешив трафик Http и Https, и нажмите «Создать»

5 — Я открыл облачную оболочку Google. Я нажал кнопку >_

6 — При открытом терминале Ubuntu я ввел пароль для root: sudo passwd

7 — Введите команду для входа в SSH: gcloud compute ssh the-кто

8 — Всегда возникает вопрос о зоне: Вы имели в виду зону [us-east1-c], например: [the-who] (Y / n)? — Поскольку моя зона отличается (Северная Америка-северо-восток1-a), я нажимаю n

9 — Я начинаю устанавливать пакеты (bzip2 git libxml2-dev): «sudo apt-get update» и «sudo apt-get install bzip2 git libxml2-dev».

10 — Теперь установите miniconda, scikit-learn, pandas, jupyter и ipython: «wget https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh«, «bash Miniconda3-latest-Linux-x86_64.sh «, «rm Miniconda3-latest-Linux-x86_64.sh «, «source .bashrc» и «conda установит scikit-изучит pandas jupyter ipython»

11 — Я проверяю установку: «python —version» и «какой python»

12 — Теперь я хочу настроить свою виртуальную машину так, чтобы разрешить веб-доступ к моим записным книжкам Jupyter. Я вернулся на панель экземпляра и в верхнем левом меню выбрал «Сеть VPC> Правила брандмауэра». Я нажал на ссылку «СОЗДАТЬ ПРАВИЛО БРАНДМАУЭРА» и ввел следующие значения

13 — Имя: jupyter-rule * Исходные диапазоны IP: 0.0.0.0 / 0 * Указанные протоколы и порты: tcp: 8888 * Целевые теги: the-who * и оставьте все остальные переменные со значениями по умолчанию. В результате это правило брандмауэра позволяет всему входящему трафику (всех IP-адресов) достигать порта 8888.

14 — Я вернулся на страницу виртуальной машины (верхнее левое меню> Вычислительный движок> Экземпляры виртуальной машины) и щелкнул по имени виртуальной машины. Я записал внешний IP-адрес виртуальной машины

15 — Возвращаясь к терминалу, я настраиваю jupyter. Я набираю «jupyter notebook —generate-config», чтобы сгенерировать файл конфигурации и сгенерировать пароль «jupyter notebook password»

16 — Теперь отредактируйте файл конфигурации jupyter: vim .jupyter/jupyter_notebook_config.py

17 — В первой строке напишите, а затем сохраните и закройте файл: c.NotebookApp.ip = ‘*’

18 — Приведенная выше команда позволит ноутбуку быть доступным для всех IP-адресов на вашей виртуальной машине. И затем я запустил Jupyter Notebook с помощью командной строки: jupyter-notebook —no-browser —port=8888

Но я обнаружил это сообщение об ошибке:

 (base) reichaves@the-who:~$ jupyter-notebook --no-browser --port=8888
[I 11:51:06.234 NotebookApp] Writing notebook server cookie secret to /run/user/1001/jupyter/notebook_cookie_secret
Traceback (most recent call last):
  File "/home/reichaves/miniconda3/lib/python3.7/site-packages/traitlets/traitlets.py", line 528, in get
    value = obj._trait_values[self.name]
KeyError: 'allow_remote_access'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/home/reichaves/miniconda3/lib/python3.7/site-packages/notebook/notebookapp.py", line 864, in _default_allow_remote
    addr = ipaddress.ip_address(self.ip)
  File "/home/reichaves/miniconda3/lib/python3.7/ipaddress.py", line 54, in ip_address
    address)
ValueError: '' does not appear to be an IPv4 or IPv6 address
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
  File "/home/reichaves/miniconda3/bin/jupyter-notebook", line 11, in <module>
    sys.exit(main())
  File "/home/reichaves/miniconda3/lib/python3.7/site-packages/jupyter_core/application.py", line 266, in launch_instance
    return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
  File "/home/reichaves/miniconda3/lib/python3.7/site-packages/traitlets/config/application.py", line 657, in launch_instance
    app.initialize(argv)
  File "</home/reichaves/miniconda3/lib/python3.7/site-packages/decorator.py:decorator-gen-7>", line 2, in initialize
  File "/home/reichaves/miniconda3/lib/python3.7/site-packages/traitlets/config/application.py", line 87, in catch_config_error
    return method(app, *args, **kwargs)
  File "/home/reichaves/miniconda3/lib/python3.7/site-packages/notebook/notebookapp.py", line 1628, in initialize
    self.init_webapp()
  File "/home/reichaves/miniconda3/lib/python3.7/site-packages/notebook/notebookapp.py", line 1378, in init_webapp
    self.jinja_environment_options,
  File "/home/reichaves/miniconda3/lib/python3.7/site-packages/notebook/notebookapp.py", line 159, in __init__
    default_url, settings_overrides, jinja_env_options)
  File "/home/reichaves/miniconda3/lib/python3.7/site-packages/notebook/notebookapp.py", line 252, in init_settings
    allow_remote_access=jupyter_app.allow_remote_access,
  File "/home/reichaves/miniconda3/lib/python3.7/site-packages/traitlets/traitlets.py", line 556, in __get__
    return self.get(obj, cls)
  File "/home/reichaves/miniconda3/lib/python3.7/site-packages/traitlets/traitlets.py", line 535, in get
    value = self._validate(obj, dynamic_default())
  File "/home/reichaves/miniconda3/lib/python3.7/site-packages/notebook/notebookapp.py", line 867, in _default_allow_remote
    for info in socket.getaddrinfo(self.ip, self.port, 0, socket.SOCK_STREAM):
  File "/home/reichaves/miniconda3/lib/python3.7/socket.py", line 748, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name or service not known
  

Пожалуйста, кто-нибудь знает, отсутствовали ли какие-либо детали настройки?

Ответ №1:

В последних версиях Jupyter необходимо указать, какие IP-адреса прослушивать. Вам нужно в файле конфигурации:

c.NotebookApp.ip = ‘0.0.0.0’

Даже с этим изменением и паролем я предпочитаю поместить Jupyter в контейнер Singularity, поскольку люди с веб-доступом к нему могут запускать любой код python на виртуальной машине. Рецепт для этого см.:https://bitbucket.org/account/user/stfcsciml/projects/JSV