【发布时间】:2019-12-09 04:05:29
【问题描述】:
在生产中,我运行 django 项目
python3 manage.py runserver
结果:
Performing system checks...
System check identified no issues (0 silenced).
December 09, 2019 - 03:23:26
Django version 2.2.7, using settings 'myproject.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
我也试过python3 manage.py runserver 0.0.0.0:8000
但是当我访问它时,该站点被拒绝连接。
(我试过0.0.0.0:8000,127.0.0.1:8000,site-url:8000)
当我通过 ngrok 隧道时,它运行顺利。所以我发现django项目已经在运行但是我们不能从外面访问它。
当我运行sudo lsof -i -P -n | grep LISTEN
结果是:
sshd 890 root 3u IPv4 18590 0t0 TCP *:22 (LISTEN)
sshd 890 root 4u IPv6 18592 0t0 TCP *:22 (LISTEN)
apache2 6049 root 4u IPv6 2895520 0t0 TCP *:80 (LISTEN)
apache2 6049 root 6u IPv6 2895524 0t0 TCP *:443 (LISTEN)
python3 6117 aina 4u IPv4 2896228 0t0 TCP 127.0.0.1:8000 (LISTEN)
apache2 6141 www-data 4u IPv6 2895520 0t0 TCP *:80 (LISTEN)
apache2 6141 www-data 6u IPv6 2895524 0t0 TCP *:443 (LISTEN)
ngrok 6198 root 3u IPv4 2896574 0t0 TCP 127.0.0.1:4040 (LISTEN)
apache2 6383 www-data 4u IPv6 2895520 0t0 TCP *:80 (LISTEN)
apache2 6383 www-data 6u IPv6 2895524 0t0 TCP *:443 (LISTEN)
apache2 6401 www-data 4u IPv6 2895520 0t0 TCP *:80 (LISTEN)
apache2 6401 www-data 6u IPv6 2895524 0t0 TCP *:443 (LISTEN)
apache2 6417 www-data 4u IPv6 2895520 0t0 TCP *:80 (LISTEN)
apache2 6417 www-data 6u IPv6 2895524 0t0 TCP *:443 (LISTEN)
apache2 6419 www-data 4u IPv6 2895520 0t0 TCP *:80 (LISTEN)
apache2 6419 www-data 6u IPv6 2895524 0t0 TCP *:443 (LISTEN)
apache2 6420 www-data 4u IPv6 2895520 0t0 TCP *:80 (LISTEN)
apache2 6420 www-data 6u IPv6 2895524 0t0 TCP *:443 (LISTEN)
apache2 6421 www-data 4u IPv6 2895520 0t0 TCP *:80 (LISTEN)
apache2 6421 www-data 6u IPv6 2895524 0t0 TCP *:443 (LISTEN)
apache2 6512 www-data 4u IPv6 2895520 0t0 TCP *:80 (LISTEN)
apache2 6512 www-data 6u IPv6 2895524 0t0 TCP *:443 (LISTEN)
apache2 6555 www-data 4u IPv6 2895520 0t0 TCP *:80 (LISTEN)
apache2 6555 www-data 6u IPv6 2895524 0t0 TCP *:443 (LISTEN)
apache2 6693 www-data 4u IPv6 2895520 0t0 TCP *:80 (LISTEN)
apache2 6693 www-data 6u IPv6 2895524 0t0 TCP *:443 (LISTEN)
我尝试通过运行 telnet 到端口 8000
telnet 127.0.0.1 8000
结果是:
Connected to 127.0.0.1.
Escape character is '^]'.
由于服务器中正在运行其他项目(Apache 中的 PHP 应用程序),我关注这个问题 Run both Django and PHP application in Apache
但是当我直接访问该站点时(不是通过 ngrok),仍然无法访问该站点。我应该怎么做才能访问 django?
【问题讨论】:
-
你能telnet到8000端口的机器吗?
-
是的,它说已连接
-
首先,您应该将
0.0.0.0:8000用于runserver命令。您很可能被防火墙阻止(ngrok创建了一个隧道,因此它可以在防火墙后面工作)。 -
不建议在生产环境中运行
python manage.py runserver。 -
我建议不要在生产中使用开发服务器(runserver)。您最好根据您的生产环境配置适当的 nginx/gunicorn 设置。 django 文档明确表示开发服务器不适合生产,并且会随着站点负载的增加而迅速失败。编辑:是的,还有另一种方法。根据您部署的平台,谷歌如何在 x 上部署 django 应用程序(可以是 aws、heroku、pythonanywhere,无论您的生产服务器是什么)
标签: django apache ssh production