簡體   English   中英

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

[英]How to run Django Web app on port 443 and 80 linux - Ubuntu or Raspberry PI?

我對 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。 我該如何調試以及正確的解決方案是什么?

在理想的世界中,您將需要一個網絡服務來與您的 Django 交談。

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

如果你只是想讓 Django 開發服務器在 80 上運行,那么試試

python manage.py runserver 0.0.0.0:80 

並確保沒有其他進程正在使用端口 80。

您不直接與 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM