我在Ubuntu服务器上运行Django有困难。我能够运行Django,但我不知道如何将其作为服务运行。
Distributor ID: Ubuntu
Description: Ubuntu 10.10
Release: 10.10
Codename: maverick
这是我正在做的事情:
sudo ./manage.py runserver 0.0.0.0:80 &
即使我没有登录,如何让我的Django进程在端口80上运行?
另外,我知道我应该通过Apache链接它,但我还没准备好。
答案 0 :(得分:13)
请勿使用 manage.py runserver
在端口80上运行您的服务器。甚至不用于开发。如果您的开发环境需要它,那么它仍然是最好通过iptables将流量从8000重定向到80,而不是以root身份运行django应用程序。
在django文档中(或在本文的其他答案中),您可以了解如何使用真实的网络服务器运行它。
如果出于任何其他原因,您需要一个进程在关闭终端后继续在后台运行,那么您不能只使用&
运行该进程,因为它将运行在后台,但保持会话的会话ID ,并在会话负责人(您的终端)终止时关闭。
您可以通过setsid
实用程序运行该过程来解决此问题。有关详细信息,请参阅联系人以获取 setsid 。
答案 1 :(得分:8)
无论如何,如果在阅读其他评论之后,您仍然希望将该过程与manage.py一起使用,只需在命令行之前添加“nohup”:
sudo nohup /home/ubuntu/django_projects/myproject/manage.py runserver 0.0.0.0:80 &
答案 2 :(得分:3)
对于这类工作,因为你在Ubuntu上,你应该使用真棒Ubuntu upstart。
只需指定一个文件,例如django-fcgi
,如果你要去deploy Django with FastCGI:
/etc/init/django-fcgi.conf
并输入所需的upstart语法说明。
然后,您可以使用以下命令启动和停止runserver
命令:
start runserver
和
stop runserver
答案 3 :(得分:1)
问题是&
在后台运行程序,但不会将其与产生过程分开。但是,另一个问题是您运行的开发服务器仅用于测试目的,不应用于生产环境。
将gunicorn
或apache与mod_wsgi
一起使用。 django和这些项目的文档应明确说明如何正确地提供它。
如果你只想要一个非常快速和肮脏的方式在端口80上运行django dev服务器并将其保留在那里 - 这不是我推荐的 - 你可以在screen
中运行它。 screen
将创建一个即使您关闭连接也不会关闭的终端。您甚至可以在屏幕终端的前台运行它并断开连接,让它一直运行直到重新启动。
答案 4 :(得分:0)
如果您使用的是virtualenv,则sudo命令将在虚拟环境上下文之外执行manage.py runserver
命令,您将收到所有类型的错误。
为了解决这个问题,我做了以下事情:
在处理虚拟环境类型时:
which python
输出:/home/oleg/.virtualenvs/openmuni/bin/python
然后输入:
sudo !!
输出:/usr/bin/python
然后剩下要做的就是在你当前使用的virtualenv上创建全局python和python之间的符号链接,并希望在0.0.0.0:80上运行
首先将全局python文件夹移动到备份位置:
mv /usr/bin/python /usr/bin/python.old
的/ usr /斌/蟒
应该这样做:
ln -s /usr/bin/python /home/oleg/.virtualenvs/openmuni/bin/python
就是这样!现在你可以在virtaulenv上下文中运行sudo python manage.py runserver 0.0.0.0:80
!
请记住,如果您在开发本地设置中使用postgres DB,则可能需要root角色。
归功于@ydaniv