-2

我是 python 新手,我正在 django 开发一个网站,但想知道如何发布这个网站,我拥有一个带有 Ubuntu 10.04 LTS 的半专用云服务器,我应该安装哪个软件来开发服务器,我我也很乐观,希望200多个同时访问它,还是得用webserver和好...

4

1 回答 1

3

您可以通过多种方式进行操作:

  • 在某种进程管理器中运行裸 django
  • 使用反向代理通过 FastCGI 等特定协议将请求重定向到 django

使用进程主管运行 django

用于确保特定服务启动的多种工具之一是supervisord。要安装它,您需要做的就是sudo apt-get install supervisord.

成功安装后,您应该已经创建了一个/etc/supervisord/conf.d目录,您可以在其中放置您想要监督的每个服务的所有配置文件。

监督员是做什么的?

Supervisord 等检查由配置中给出的命令启动的服务进程的当前状态。一旦检测到服务关闭,它就会尝试重新启动它。如果它在短时间内失败太多次,则该服务被认为是错误的,您需要自己调查问题的原因。

示例配置文件

[program:django-webserver]
directory = /user/foo/my-project
user = foo
command = /user/foo/.virtualenvs/my-project/bin/python /user/foo/my-project/manage.py runserver
stdout_logfile = /user/foo/my-project/logs/supervisord/webserver.out.log
stderr_logfile = /user/foo/my-project/logs/supervisord/webserver.err.log
autostart = true
autorestart = true
environment = DJANGO_SETTINGS_MODULE="myproject.settings.production"

运行机器

将上面的配置粘贴到/etc/supervisord/conf.d/目录(例如文件)后,您可以使用命令myproject.conf查看服务的当前状态。sudo supervisorctl您将从包含的配置文件中获得所有已配置程序的列表及其状态。要重新加载配置,您应该reload输入进入 supervisorctl 后出现的提示。

在确保 supervisord 已经加载了你的新配置文件之后,你可以输入start django-webserverthen 让 supervisor 运行 django 并处理它。请注意,这django-webserver是您[program:<name>]在 supervisord 配置文件的子句中传递的名称。

使用反向代理运行 django

在我看来,用户友好的反向代理之一是nginx。为什么要使用像 nginx 这样的反向代理?它允许您设置负载平衡器,更有效地提供文件等等。

Nginx 可以通过键入来安装sudo apt-get install nginx。要nginx与您交谈,您django-webserver需要在/etc/nginx/sites-available目录中创建像这样的配置文件。

server {
    listen 80;
    access_log /home/foo/myproject/nginx/access.log;
    error_log /home/foo/myproject/nginx/error.log;

    location /statics/ {
        gzip on;
        root /home/foo/myproject/collected_static;
        rewrite ^/statics/(.*)$ /$1 break;
        autoindex off;
        expires 60d;
    }

    location / {
        fastcgi_pass 127.0.0.1:8000;
        fastcgi_param PATH_INFO $fastcgi_script_name;
        fastcgi_param REQUEST_METHOD $request_method;
        fastcgi_param QUERY_STRING $query_string;
        fastcgi_param CONTENT_TYPE $content_type;
        fastcgi_param CONTENT_LENGTH $content_length;
        fastcgi_param SERVER_PROTOCOL $server_protocol;
        fastcgi_param SERVER_PORT $server_port;
        fastcgi_param SERVER_NAME $server_name;

        fastcgi_pass_header Authorization;
        fastcgi_intercept_errors off;
    }
}

为了使您的 django 可以与 nginx 通信,您需要安装flupusing pip install flup(其他替代方法是例如gunicorn)。安装完flup后,请确保您的django服务器正在使用以下命令运行: python manage.py runfcgi host=127.0.0.1 port=8000 daemonize=false

daemonize=false开关很重要,因为它不会创建后台守护程序。

随着 django 的启动和运行,剩下要做的就是让外部世界可以使用实际的 nginx 站点:在里面的/etc/nginx/sites-available目录中创建一个指向刚刚创建的 nginx 配置的软链接,/etc/nginx/sites-enabled如下所示:

cd /etc/nginx/sites-enabled
ln -s /etc/nginx/sites-available/myproject.conf myproject.conf

完成这些步骤后,使用sudo /etc/init.d/nginx restart并重启 nginx。

将这两个步骤结合起来让主管负责将与 nginx 通信的 django 进程是一个好主意。

于 2013-07-07T21:47:53.110 回答