如何将Django的devserver设为公开?一般可行吗?

42 投票
9 回答
52035 浏览
提问于 2025-04-16 01:48

我现在正在尝试使用Django框架,想把我做的一些东西分享给我的同事和朋友。我是在Win7下通过VMware使用Ubuntu的。所以我希望能把我当前的公网IP和端口(例如 http://123.123.123.123:8181/django-app/)发给我的朋友们,让他们也能测试一下。

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

我该如何让这个开发服务器变得可以公开访问呢?

编辑:

哦,我还有一件事忘了提。正如我所说,我在VMware上使用Ubuntu。我有一个脚本可以返回我当前的内网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)上测试。这其实就是我问这个问题的原因。我想知道有没有办法使用外网IP,让开发服务器也能在外部使用。

9 个回答

11

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

gem install localtunnel

然后用下面的命令启动你的python开发服务器:

python manage.py runserver 0.0.0.0:8000

在另一个终端窗口中,启动localtunnel:

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

这样就会输出一个网址,你可以用这个网址访问你的本地服务器。

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

就这样。

98
python manage.py runserver 0.0.0.0:8181

这段话的意思是,这个命令会启动一个开发服务器,它会在8181端口上监听所有的IP地址。

需要注意的是,从2011年6月17日起,Django的开发服务器默认是支持多线程的。

根据文档的说明:

默认的IP地址127.0.0.1是无法从你网络上的其他机器访问的。如果想让其他机器也能看到你的开发服务器,你需要使用它自己的IP地址(比如192.168.2.1)或者使用0.0.0.0。

6

192.168.*.* 是一个局域网(LAN)私有地址。这意味着即使你在 VMware(或其他虚拟机管理工具)和防火墙上做了正确的设置,让它可以在局域网内访问,它仍然无法从外部网络(也就是互联网)访问。这其实是件好事,因为这样的开发服务器并不是为了安全和扩展性而设计的。

如果你想让一个有局域网私有IP的机器的某个端口可以被互联网访问,你需要一个支持“虚拟服务器”功能的路由器(很多路由器,即使是便宜的,也提供这个功能,但每个品牌的设置方式都不一样,所以具体操作很难一概而论)。我还建议使用 dyndns 或其他类似的服务,将一个稳定的域名与不断变化的公网IP关联起来(当然,除非你愿意为你的网络提供商购买一个静态IP,但这种选择的费用越来越高了)。

如果你在提问时能提供你配置的每一个小细节,superuser.com 或 serverfault.com 可能会给出更好的答案和详细信息,因为这个问题与软件开发关系不大,而更多是关于服务器管理和配置。

撰写回答