如何在端口443和80 linux上运行Django Web应用程序-Ubuntu或Raspberry PI?

时间:2018-09-13 03:13:42

标签: python django ubuntu

我是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 -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8000

$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。如何调试以及正确的解决方案是什么?

2 个答案:

答案 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。