我是 python 新手,我正在 django 开发一个网站,但想知道如何发布这个网站,我拥有一个带有 Ubuntu 10.04 LTS 的半专用云服务器,我应该安装哪个软件来开发服务器,我我也很乐观,希望200多个同时访问它,还是得用webserver和好...
1 回答
您可以通过多种方式进行操作:
- 在某种进程管理器中运行裸 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-webserver
then 让 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 通信,您需要安装flup
using 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 进程是一个好主意。