如何将Django作为服务运行?

时间:2012-05-04 17:51:52

标签: python django ubuntu

我在Ubuntu服务器上运行Django有困难。我能够运行Django,但我不知道如何将其作为服务运行。

Distributor ID:    Ubuntu
Description:       Ubuntu 10.10
Release:           10.10
Codename:          maverick

这是我正在做的事情:

  1. 我登录到我的Ubuntu服务器
  2. 启动我的Django流程:sudo ./manage.py runserver 0.0.0.0:80 &
  3. 测试:流量通过,应用显示正确的页面。
  4. 现在我关闭终端窗口,一切都停止了。我想我需要以某种方式将其作为服务运行,但我无法弄清楚如何做到这一点。
  5. 即使我没有登录,如何让我的Django进程在端口80上运行?

    另外,我知道我应该通过Apache链接它,但我还没准备好。

5 个答案:

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

使用Upstart管理Django流程部署的示例:herehere。我自己设置这个部署结构时发现这两个链接很有用。

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