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

问题描述 投票:0回答:2

我是Django的新手。我想我不能将django应用程序作为sudo运行,因为所有与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。我该如何调试以及它的正确解决方案是什么?

python django ubuntu
2个回答
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的好地方


0
投票

在理想的世界中,您需要一个Web服务来与您的Django交谈。

Web server (port 80/443) -> gunicorn (wigs) -> Django (port 8000)

如果你只是想让Django开发服务器在80上运行那么试试吧

manage.py rumserver 0.0.0.0:80 

并确保没有其他进程使用端口80。

© www.soinside.com 2019 - 2024. All rights reserved.