首页 > 解决方案 > 如何在 Google Cloud Platform 上配置 VM 以对 jupyter notebook 进行 Web 访问?

问题描述

我正在尝试使用 Python、Miniconda 和 Jupyter 在 Google Cloud Platform 中创建数据科学环境。但是当我尝试使用外部 IP 访问 jupyter 时遇到错误

我按照以下步骤操作:

1 - 我已访问资源管理页面 ( https://console.cloud.google.com/cloud-resource-manager )。创建一个新项目(test_01)

2 - 我打开了仪表板(https://console.cloud.google.com/home/dashboard)。我选择了我刚刚创建的项目(test_01)

3 - 在左上角菜单中 - 选择“Compute Engine”并点击“VM instances”。点击“Create”按钮

4 - 我填写:命名实例(the-who),选择区域(在我的例子中 - 北美-northeast1-a),选择内存,存储和CPU,选择启动盘,远程访问SSH,确保你可以通过允许 Http 和 Https 流量从 Internet 访问 VM,然后单击“创建”

5 - 我打开了 Google 的 Cloud Shell。我按下按钮>_

6 - 打开 Ubuntu 终端,我输入为 root 创建密码:sudo passwd

7 - 输入命令进入SSH:gcloud compute ssh the-who

8 - 总是有关于区域的问题:您的意思是区域 [us-east1-c] 例如:[the-who] (Y/n)?- 由于矿区不同(northamerica-northeast1-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 install scikit-learn pandas jupyter ipython”

11 - 我检查安装:“python --version”和“which python”

12 - 现在我想设置我的 VM 以允许 Web 访问我的 Jupyter 笔记本。我返回到实例面板,在左上角的菜单中选择了“VPC 网络 > 防火墙规则”。我点击了“CREATE FIREWALL RULE”链接并填写了以下值

13 - 名称:jupyter-rule * 源 IP 范围:0.0.0.0/0 * 指定的协议和端口:tcp:8888 * 目标标签:the-who * 并将所有其他变量保留为默认值。因此,此防火墙规则允许(所有 IP 的)所有传入流量到达端口 8888。

14 - 我返回到 VM 页面(左上菜单> Compute Engine> VM 实例)并单击 VM 名称。我记下了虚拟机的外部 IP 地址

15 - 回到终端我配置了jupyter。我输入“jupyter notebook --generate-config”生成配置文件并生成密码“jupyter notebook password”

16 - 现在编辑jupyter配置文件:vim .jupyter/jupyter_notebook_config.py

17 - 在第一行写入然后保存并关闭文件:c.NotebookApp.ip = '*'

18 - 上述命令将允许笔记本可用于 VM 上的所有 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

请问,有没有人知道是否缺少任何设置细节?

标签: pythonlinuxgoogle-cloud-platformjupyter-notebook

解决方案


需要告知最新版本的 Jupyter 监听哪些 IP 地址。您需要在配置文件中:

c.NotebookApp.ip = '0.0.0.0'

即使有了这个更改和密码,我还是更喜欢将 Jupyter 放在 Singularity 容器中,因为可以通过 Web 访问它的人可以在 VM 上运行任何 python 代码。有关执行此操作的方法,请参阅: https ://bitbucket.org/account/user/stfcsciml/projects/JSV


推荐阅读