正常我们写完一个 django 项目是需要放到服务器上运行,在本地开发你可以使用django自带的测试服务器 runserver 启动就行,这个 runserver 只是开发的时候使用,它的性能非常不好,放到线上服务器需要用其他的方式部署 django ,常见的部署方式是 uwsgi nginx 。
先了解下一些术语的意思,知道一些东西是要做什么用的。
WSGI只是一个协议,一个约定。是为 Python 语言定义的 Web 服务器和 Web 应用程序或框架之间的一种简单而通用的接口。
uWSGI,是实现了 WSGI 协议的一个web服务器。Nginx 中 HttpUwsgiModule的作用是与 uWSGI 服务器进行交换。WSGI 是一种 Web 服务器网关接口。它是一个 Web 服务器(如 nginx ,uWSGI 等服务器)与web应用(如用 Django 框架写的程序)通信的一种规范。
Nginx 分配客户端的请求连接,端口转发, 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
具体的部署流程(不包括python虚拟环境的安装,以及数据库等的相关配置)
1.在对应的python环境(项目使用的python环境)安装uwsgi
代码语言:javascript复制pip install uwsgi
2..写一个项目的uwsgi的配置文件uwsgi.ini
代码语言:javascript复制[uwsgi]
# 项目目录
chdir=/root/test_uwsgi/Stuent_Manage_Systerm/django1703zz/day5
# 指定项目的application
module=day5.wsgi:application
socket=0.0.0.0:8000
# set the max allowed size of websocket messages (in Kbytes, default 1024)
websocket-max-size = 2048
# 直接通过uwsgi访问
#http-socket = 192.168.2.120:4040
# 进程个数
# systemd 模式下要关闭master
#master=true
# systemd 模式下要关闭master
workers=2
enable-threads=true
threads= 5
# 重启或者退出时不等线程退出
#no-threads-wait=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 设置自中断时间,没有websocket情况下建议开启
#harakiri=30
uid=root
gid=root
# PID文件 日志文件
#pidfile=/home/admin/zxy/Cyberrange/%n.pid
disable-logging = false
#logto2=/opt/Cyberrange/log/%n.log
# systemd 模式下要关闭daemonize
#daemonize=/opt/Cyberrange_online/log/%n.log
# systemd 模式下要关闭daemonize
# 序列化接受的内容,如果可能的话
thunder-lock=true
# 设置缓冲
post-buffering=4096
3.启动uwsgi
代码语言:javascript复制uwsgi --ini uwsgi.ini
4.安装nginx
代码语言:javascript复制yum install nginx
5.编写nginx对应的配置文件,在 /etc/nginx/conf.d文件夹下创建一个文件 8090.conf
代码语言:javascript复制server {
listen 8090; # 在浏览器中输入的端口号
server_name 192.168.1.20; # 浏览器中输入的域名
# 项目的静态文件配置
location /static/ {
root /root/test_uwsgi/Stuent_Manage_Systerm/django1703zz/day5;
}
location = /favicon.ico {
root /root/test_uwsgi/Stuent_Manage_Systerm/django1703zz/day5/static;
}
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000; # uwsgi启动的端口
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
uwsgi_read_timeout 86400s;
uwsgi_send_timeout 86400s;
client_max_body_size 1000m;
#proxy_redirect off;
proxy_set_header X-Real-IP $remote_addr;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
6.启动nginx
代码语言:javascript复制service nginx start
本教程使用的环境情况为:
代码语言:javascript复制centos 7.6
python3.6
uwsig 2.0.18
nginx/1.12.2