如何将Django作为服务运行?

cod*_*Joe 4 python django ubuntu

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

Distributor ID:    Ubuntu
Description:       Ubuntu 10.10
Release:           10.10
Codename:          maverick
Run Code Online (Sandbox Code Playgroud)

这是我在做的事情:

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

即使我没有登录,如何让我的Django进程在端口80上运行?

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

Mig*_*ura 14

不要用于 manage.py runserver 在端口80上运行服务器.甚至不用于开发.如果您的开发环境需要它,那么通过iptables将流量从8000重定向到80仍然比以root身份运行django应用程序更好.

在django文档中(或在本文的其他答案中),您可以了解如何使用真实的Web服务器运行它.

如果由于任何其他原因,您需要一个进程在关闭终端后继续在后台运行,您不能只运行该进程,&因为它将在后台运行但保留会话的会话ID,并且将在关闭时关闭会话负责人(您的终端)已终止.

您可以通过该setsid实用程序运行该过程来控制此行为.请参阅您的联机帮助setsid了解更多详情.

  • 甚至为了发展?如果您不能信任自己机器上的应用程序,那么您就会遇到更大的问题...... (2认同)
  • 问题不在于*在端口 80* 中运行,而在于*以 root 身份运行代码*。然而,你并不需要其中之一才能拥有另一个。您可以将端口 80 重定向到其他 (>1024) 端口,或者只为进程提供 CAP_NET_BIND_SERVICE 而不是整个 root 权限。请参阅 http://stackoverflow.com/a/414258/19401 了解如何执行此操作。 (2认同)

小智 8

无论如何,如果在阅读其他评论之后,您仍然希望将该过程与manage.py一起使用,只需在命令行之前添加"nohup":

sudo nohup /home/ubuntu/django_projects/myproject/manage.py runserver 0.0.0.0:80 &
Run Code Online (Sandbox Code Playgroud)


Jos*_*mit 5

对于这种工作,由于您使用的是 Ubuntu,因此您应该使用很棒的Ubuntu upstart

只需指定一个文件,例如django-fcgi,如果您要使用 FastCGI 部署 Django

/etc/init/django-fcgi.conf
Run Code Online (Sandbox Code Playgroud)

并放置所需的新贵语法指令。

然后你就可以runserver简单地启动和停止你的命令:

start runserver
Run Code Online (Sandbox Code Playgroud)

stop runserver
Run Code Online (Sandbox Code Playgroud)

使用 Upstart 管理 Django 进程部署的示例:这里这里。我发现这两个链接在我自己设置此部署结构时很有帮助。