39

我目前正在试用 Django 框架,我会分享/展示/展示我为我的同事/朋友制作的一些东西。我通过 VMware 在 Win7 下的 Ubuntu 中工作。所以我的愿望/愿望是将我当前的带有端口的 pub-IP(例如http://123.123.123.123:8181/django-app/)发送给我的朋友,以便他们进行测试。

问题是 - 我使用 django 的开发服务器(python /path-to-django-app/manage.py runserver $IP:$P​​ORT)。

如何使开发服务器公开?

编辑:

哦,有件事我忘了说。我很伤心,我将 VMware 与 Ubuntu 一起使用。我有一个 shellscript,它返回我当前的 int-IP 192.168.xx.xx 并将其保存在环境变量($CUR_IP)中所以,每次我想运行 django 的开发服务器时,我只需执行

python /path-to-django-site/manage.py runserver $CUR_IP:8080

这样我就变成了一个http地址(例如http://192.168.40.145:8080/app-name/),我可以在我的虚拟机之外使用它。我可以在我的主机(win7)机器上测试它。这实际上是我问这个问题的原因。我认为有一种方法可以使用 ext-IP 并使 runserver 在外部也可用

4

9 回答 9

95
python manage.py runserver 0.0.0.0:8181

这将运行应侦听端口 8181 上所有 IP 的开发服务器。

请注意,截至2011 年 6 月 17 日,Django 开发服务器默认是线程化的(票证 #1609)

来自文档:

请注意,您网络上的其他计算机无法访问默认 IP 地址 127.0.0.1。要使您的开发服务器对网络上的其他机器可见,请使用其自己的 IP 地址(例如 192.168.2.1)或 0.0.0.0。

于 2010-07-25T11:09:03.430 回答
11

假设你已经安装了 ruby​​,你只需要获取 localtunnel:

gem install localtunnel

然后使用以下命令启动您的 python 开发服务器:

python manage.py runserver 0.0.0.0:8000

在另一个 shell 中,启动 localtunnel:

localtunnel -k ~/.ssh/id_rsa.pub 8000 

这将输出一个 url 以访问您的本地服务器。

Port 8000 is now publicly accessible from http://xxxx.localtunnel.com

就是这样。

于 2012-09-06T08:05:53.477 回答
5

192.168.*.*是一个 LAN 私有地址——一旦你完成了正确的 VMWare(或其他 VM 管理器)和防火墙咒语以使其可以从 LAN 访问,它仍然无法从 LAN 外部访问,即从 Internet总的来说(这也是一件好事,因为这样的开发服务器并不是为安全性和可扩展性而设计的)。

要使具有 LAN 私有 IP 的机器的某些端口对整个 Internet 可见,您需要具有“虚拟服务器”功能的路由器(许多路由器,甚至便宜的路由器都提供它,但不可能具体说明启用因为每个品牌都有自己独特的方式)。我还建议使用dyndns或其他类似服务将稳定的 DNS 名称关联到您不断变化的公共 IP(当然,除非您从连接提供商那里花钱购买静态 IP,但后一种选择一直在变得更昂贵)。

superuser.com 或 serverfault.com 可能会提供更好的答案和详细信息(一旦您在问题中提供了配置的每一个小细节),因为该问题与软件开发无关,而与服务器管理和配置有关。

于 2010-07-25T16:11:17.607 回答
5

我必须将此行添加到 settings.py 以使其工作(否则从另一台计算机访问时会显示错误)

ALLOWED_HOSTS = ['*']

然后运行服务器:

python manage.py runserver 0.0.0.0:9595

此外,请确保您的防火墙允许与所选端口(在本例中为 9595)进行通信

于 2017-06-29T07:49:46.443 回答
4

已经回答,但添加了相同 localtunnel 的 npm 替代

sudo npm install -g localtunnel

lt --port 8000 --subdomain yash
于 2016-05-25T13:40:38.263 回答
1

如果您使用的是 Virtualbox,您需要将 VB 中的网络设置从“NAT”更改为“Bridged Adaptor”。然后重启linux。现在,如果您运行sudo ifconfig,您可以看到您的 IP 地址,例如192.168.*.*. 最后一步是运行服务器

python manage.py runserver 192.168.*.*:8000

干杯!

于 2014-01-03T02:54:09.413 回答
0

您需要在 VMWare 中配置桥接网络,并在 Ubuntu 防火墙中授予对目标端口的访问权限。

于 2010-07-25T12:45:16.710 回答
0

我是否可以建议尝试pyngrok以编程ngrok方式为您管理隧道?完全披露,我是它的开发者。这里是Django 示例,但它就像安装一样简单pyngrok

pip install pyngrok

并使用它:

from pyngrok import ngrok

# <NgrokTunnel: "http://<public_sub>.ngrok.io" -> "http://localhost:8000">
http_url = ngrok.connect(8000)

没有弄乱端口或防火墙或 IP 地址,现在您还可以检查流量(这很有用,因为您在这里所做的是正在进行的开发,而不是运行prod-ready 服务器)。

于 2020-05-07T00:26:32.870 回答
0

或者,您可以使用cotunnel,只需在您的 ubuntu(在 VMware 中)中运行 cotunnel 即可在 cotunnel 仪表板中更改您在本地使用的端口。它提供公共网址,您可以与您的朋友分享网址。

你的 Django 服务器可以监听 127.0.0.1 或 0.0.0.0(我更喜欢 0.0.0.0),这对 cotunnel 没关系。

于 2020-05-09T16:19:43.487 回答