我是Django的新手。我想我不能以sudo的身份运行django应用程序,因为所有pip相关模块都是为用户而非sudo用户安装的。因此,这是一种基本问题,例如如何运行可监听80端口和443端口的django应用。
到目前为止,我已经尝试过以下选项-即预先路由-NAT
我使用以下命令运行我的应用-
$python manage.py runserver
Performing system checks...
System check identified no issues (0 silenced).
You have 15 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
September 13, 2018 - 03:04:41
Django version 2.1.1, using settings 'WebBlogger.settings'
Starting development server at http://127.0.0.1:8000/
接下来,这是我的iptables设置,虽然对我没有任何帮助
$sudo iptables -t nat --line-numbers -n -L
Chain PREROUTING (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL
2 REDIRECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 redir ports 8000
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
num target prot opt source destination
1 MASQUERADE all -- 172.17.0.0/16 0.0.0.0/0
2 RETURN all -- 192.168.122.0/24 224.0.0.0/24
3 RETURN all -- 192.168.122.0/24 255.255.255.255
4 MASQUERADE tcp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
5 MASQUERADE udp -- 192.168.122.0/24 !192.168.122.0/24 masq ports: 1024-65535
6 MASQUERADE all -- 192.168.122.0/24 !192.168.122.0/24
Chain DOCKER (2 references)
num target prot opt source destination
1 RETURN all -- 0.0.0.0/0 0.0.0.0/0
我做了http:// 我看到连接被拒绝。 我不知道如何调试NAT东西,无论它实际上是否到达NAT。如何调试以及正确的解决方案是什么?
答案 0 :(得分:1)
您不直接与Django应用对话。尽管Django可以通过runserver命令提供一个简单的开发服务器,但除开发工作外,它无济于事。
您想要的是设置一个WSGI服务器来运行您的应用程序,并设置一个Web服务器来接受实际的用户请求并将它们代理到WSGI。常用的WSGI服务器(不用担心WSGI是什么)是gunicorn和uWSGI。两者都可以使用PIP进行安装,而您不必以与应用程序相同的用户身份来安装它们。 Gunicorn易于使用,因此我建议您使用它。如今最常见的Web服务器是Nginx。
此外,您应该将应用程序打包到虚拟环境中,以便可以将其与所有依赖项打包在一起,而不必依赖安装了所有组件的特定系统。
这是有关如何执行此操作的过时指南。不过,它应该最准确,并且是一个不错的起点 https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-14-04
答案 1 :(得分:0)
在理想的世界中,您需要网络服务才能与Django对话。
Web server (port 80/443) -> gunicorn (wigs) -> Django (port 8000)
如果您只是希望Django开发服务器在80上运行,请尝试
manage.py rumserver 0.0.0.0:80
并确保没有其他进程正在使用端口80。