部署网站

基于Nginx+Django+FastCGI/uWSGI

Posted by Gavin on June 13, 2019

诗万首,酒千觞

几曾著眼看侯王

前言

介绍

Django提供了友好的开发环境,当我们完成开发,准备部署的时候,就该考虑另外的问题了。我决定使用Nginx+Django+FastCGI部署一个网站,特此记录。但是中途发现高版本Django已经不支持FastCGI了,因此采用了uWSGI

FastCGI

FastCGI是一种服务器与应用通讯的协议,FastCGI全称快速通用网关接口(FastCommonGatewayInterface)。


步骤(FastCGI)

环境

  • Cent OS 7
  • Nginx
  • Python3
  • sqlite3

创建虚拟环境

python3 -m virtualenv project_path

由于我使用的是python3,一般执行如下命令:

virtualenv project_path

安装相关依赖

pip install django
pip install mysqlclient
pip install pysqlite3 
pip install flup

修改Nginx配置

location ~/static/ {
    alias /var/www/html/disprobind/;
    break;
}
location ~/media/ {
    alias /var/www/html/disprobind/;
    break;
}

location /disprobind {
    fastcgi_pass 127.0.0.1:9000;
    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 pass_header Authorization;
    fastcgi_intercept_errors off;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
    expires 30d;
}

location ~ .*\.(js|css)?$ {
    expires 1h;
}

迁移Django项目并启动

python manage.py runfcgi host=127.0.0.1 port=9000 method=prefork --settings=mysite.settings

注意端口号保持一致


步骤(uWSGI)

安装依赖

pip install uwsgi

设置uWSGI

[uwsgi]
socket = 127.0.0.1:port #与nginx配置中的uwsgi_pass相同
chdir = path #项目地址
wsgi-file = mysite/wsgi.py
processes = 4
threads = 2
pidfile=/tmp/project-master.pid
stats = 127.0.0.1:9191
virtualenv = <path to env> #virtualenv

启动项目

uwsgi myfile.ini


启动成功