【问题标题】:Django runserver not working from google cloud platformDjango runserver 无法在谷歌云平台上运行
【发布时间】:2019-02-06 09:46:17
【问题描述】:

这个问题非常相似(但不一样,因为我在谷歌云上运行,我怀疑这可能是问题的原因):

我正在尝试设置一个在谷歌云平台上的 VM 实例上运行的 api。到目前为止,我让 nginx 正常工作(当我访问 ip 地址时,它会收到一条欢迎消息,这让我很高兴)。当我跑步时:

python3 manage.py runserver 0.0.0.0:8000

我得到以下输出:

正在执行系统检查...

系统检查未发现任何问题(0 静音)。

2019 年 2 月 6 日 - 09:27:13

Django 版本 2.1.5,使用设置“my_api.settings.development”

http://0.0.0.0:8000/启动开发服务器

使用 CONTROL-C 退出服务器。

这看起来不错,但是当我转到以下任何页面时(所有这些页面我都在 allowed_hosts 下列出):

  • 0.0.0.0:8000
  • 127.0.0.1:8000
  • :8000

页面无法加载。

我试过检查使用了哪些端口

netstat

我已经杀死了所有使用这个端口的程序,然后我重新启动了我的程序,但无济于事。

此时,我已经修复了其他帖子中建议的所有内容,但我没有想法。查找/解决我的网页无法加载的原因的下一步是什么?

【问题讨论】:

  • 您是否为 8000 打开了防火墙端口?你从哪里检查IP地址?地址0.0.0.0 不是尝试连接的有效地址。 127.0.0.1 仅在 VM 内部有效。
  • @JohnHanley 我没有,我正在从我自己的电脑上检查它们,这可以解释为什么它们不起作用。我去看看,谢谢
  • @JohnHanley 这确实是一个防火墙端口。如果您将其发布为答案,我会接受。不然我自己写

标签: python django google-cloud-platform


【解决方案1】:

您需要创建防火墙规则以允许tcp port 8000 上的入站流量。

创建防火墙规则时,还要指定Target tag,以便您可以将防火墙规则分配给实例。另一种选择是指定一个服务帐户,例如Compute Engine default service account,以根据身份分配规则。

Filtering by service account vs. network tag

【讨论】:

    【解决方案2】:

    正如@JohnHanley 指出的那样,我需要创建一个防火墙规则。

    我是这样做的:

    1. 进入谷歌云平台控制台
    2. 防火墙规则 -> vpc 网络
    3. + 创建防火墙规则
    4. 将所有必要的 ip 地址添加到“源 ip 范围”(后跟 /32,不知道为什么,但这似乎可行)
    5. 在“协议和端口”下,我添加了 tcp: 8000
    6. 我将此应用到我的服务器

    【讨论】:

      【解决方案3】:
      1. 确保启用 http 流量

      2. 像这样制定防火墙规则:

      【讨论】:

        最近更新 更多