这里只讲配置问题,Nginx和 uwsgi的下载请自行百度
在往下看之前,强烈建议大家先看文档,文档看不懂再来看本教程,因为毕竟每台机器的具体情况都不同,文档链接:
uwsgi:http://uwsgi-docs-cn.readthedocs.io/zh_CN/latest/WSGIquickstart.html
Nginx:https://nginx.org/en/docs/
假设已经下载好了 Nginx和 uwsgi
首先配置 uwsgi
在 Django的项目目录下建立一个 script文件夹,这里假设我的 Django项目目录是
/root/mysite/
那么建立的 script文件夹目录路径是
/root/mysite/script/
在 script文件夹里新建一个 uwsgi.ini文件,这个文件是 uwsgi启动时的配置文件
打开 uwsgi.ini并编辑,写入如下内容:
#声明此文件是 uwsgi配置文件
[uwsgi]
#Django的项目目录
chdir=/root/mysite/
#Django和 uwsgi的接口文件,生成 Django项目时会自动生成
wsgi-file=mysite/wsgi.py
#静态文件目录 执行 python manage.py collectstatic命令之后生成的文件夹,这个留到后面讲
static-map=/static=/root/mysite/static
#与 Nginx进行通信的地址 两个软件的这项配置必须相同 否则无法进行通信
socket=localhost:8080
#保存 pid和 log的文件路径
pidfile=/root/mysite/script/pid_uwsgi
daemonize=/root/mysite/script/log_uwsgi
#直接复制粘贴
master=true
processes=4
vacuum=true
thunder-lock=true
enable-threads=true
harakiri=30
post-buffering=4096
配置好 uwsgi后再配置 Nginx
首先打开 Nginx的配置文件
通过 yum apt-get等安装的 Nginx,配置文件在 /etc/nginx/conf.d 下
打开 /etc/nginx/conf.d 新建一个配置文件 命名随意 我的就叫 mysite.conf
vim打开 mysite.conf编辑
如果你要部署 https站点的话,配置类似下面这样:
server {
listen 443 ssl;
server_name 域名;
ssl_certificate 证书路径;
ssl_certificate_key 密钥路径;
#access_log /var/log/nginx/access.log main;
charset utf-8;
gzip on;
gzip_types text/plain application/x-javascript text/css text/javascript application/x-httpd-php application/json text/json image/jpeg image/gif image/png application/octet-stream;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location / {
include uwsgi_params;
uwsgi_connect_timeout 30;
uwsgi_pass localhost:8080 #uwsgi中的 scoket地址;
}
location /static/ {
alias /root/mysite/static/ #静态文件路径;
index index.html index.htm;
}
}
#http重定向到 https
server {
listen 80;
server_name 域名;
return 301 https://$host$request_uri;
}
http站点的话,就只要去掉证书、密钥和 http重定向,并把监听端口改为 80, ssl去掉。
最后讲一讲,Django的静态文件问题,在生产环境中 Django是不提供静态文件服务的,所以要把 Django的静态文件全部提取到一个文件夹里让 Nginx来提供静态文件服务。
第一步:在setting.py里添加STATIC_ROOT=os.path.join(BASE_DIR, ‘/static’)
第二步:在 Django项目目录下执行 python manage.py collectstatic
然后项目目录下就会多出一个 static文件夹,Django项目所需的所有 静态文件都在这个文件夹下
到这里 Django+Nginx+uwsgi部署网站就已经完成了。