6

I am having difficulty running Django on my Ubuntu server. I am able to run Django but I don't know how to run it as a service.

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

Here is what I am doing:

  1. I log onto my Ubuntu server
  2. Start my Django process: sudo ./manage.py runserver 0.0.0.0:80 &
  3. Test: Traffic passes and the app displays the right page.
  4. Now I close my terminal window and it all stops. I think I need to run it as a service somehow, but I can't figure out how to do that.

How do I keep my Django process running on port 80 even when I'm not logged in?

Also, I get that I should be linking it through Apache, but I'm not ready for that yet.

4

5 回答 5

14

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

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

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

您可以通过该setsid实用程序运行该过程来规避此行为。有关更多详细信息,请参阅您的手册以获取setid

于 2012-05-04T18:07:05.303 回答
10

无论如何,如果在阅读其他评论后,您仍想使用 manage.py 的进程,只需在命令行前添加“nohup”:

sudo nohup /home/ubuntu/django_projects/myproject/manage.py runserver 0.0.0.0:80 &
于 2012-05-04T18:18:49.763 回答
4

对于这种工作,既然你在 Ubuntu 上,你应该使用很棒的Ubuntu upstart

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

/etc/init/django-fcgi.conf

并放置所需的暴发户语法说明。

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

start runserver

stop runserver

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

于 2012-05-04T17:54:49.010 回答
1

问题是&在后台运行程序但没有将其与生成过程分开。但是,另一个问题是您正在运行开发服务器,该服务器仅用于测试目的,不应用于生产环境。

使用gunicorn或 apache 与mod_wsgi. django 和这些项目的文档应该明确说明如何正确服务它。

如果您只是想要一种非常快速和肮脏的方式来在端口 80 上运行 django 开发服务器并将其留在那里——这不是我推荐的——你可能会在screen. screen将创建一个即使您关闭连接也不会关闭的终端。您甚至可以在屏幕终端的前台运行它并断开连接,让它一直运行直到重新启动。

于 2012-05-04T17:57:39.977 回答
0

如果你使用 virtualenv,sudo 命令将manage.py runserver在虚拟环境上下文之外执行命令,你会得到各种错误。

为了解决这个问题,我做了以下事情:

在处理虚拟环境类型时:

which python

输出:/home/oleg/.virtualenvs/openmuni/bin/python

然后输入:

sudo !!

输出:/usr/bin/python

然后剩下要做的就是在全局 python 和你当前使用的 virtualenv 上的 python 之间创建一个符号链接,并希望在 0.0.0.0:80 上运行

首先将全局 python 文件夹移动到备份位置:

mv /usr/bin/python /usr/bin/python.old

/usr/bin/python

应该这样做:

ln -s /usr/bin/python /home/oleg/.virtualenvs/openmuni/bin/python

而已!现在您可以sudo python manage.py runserver 0.0.0.0:80在 virtaulenv 上下文中运行了!

请记住,如果您在本地开发设置中使用 postgres DB,您可能需要一个 root 角色。

感谢@ydaniv

于 2014-02-07T08:19:33.177 回答