项目开发完毕后,需要将代码放到服务器上,这样用户才能访问。接下来我们一步一步来进行一波部署操作。
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
uWSGI的主要特点如下
Django框架运行依赖wsgi(本质提供socket服务端),众多模块实现了wsgi规范,而django框架中默认使用wsigiref模块来实现,他由于性能比较低,所以用于本地开发和测试,而线上部署时需要使用uwsgi来代替。
a. 在服务器上安装uwsgi
pip3 install uwsgi
b. 单文件使用uwsgi
在服务器上编写一个Python文件
# test.py def application(env, start_response): start_response(‘200 OK‘, [(‘Content-Type‘,‘text/html‘)]) return [b"Hello World"] # python3 #return ["Hello World"] # python2
在服务器上执行命令启动Web服务器:
uwsgi --http :9001 --wsgi-file app.py # 或 uwsgi --http :9002 --wsgi-file foobar.py --master --processes 4
PS: flask需要再加 --callable app
访问查看即可:
c. django程序使用uwsgi
将开发好的django程序拷贝到服务器目录【同示例一】,即:/data/oldboy ,执行命令启动:
uwsgi --http :9005 --chdir /data/oldboy/ --wsgi-file oldboy/wsgi.py --master --processes 4
启动方式二
项目的同级目录创建script文件,
uwsgi.ini中写入如下
启动项目
此时访问时,会出现找不到静态文件的错误。
想要uwsgi处理静态文件,需要先将django的静态文件收集到制定目录,然后再设置对应关系。
利用Nginx做反向代理、负载均衡以及处理静态文件。
a. 安装Nginx
yum install nginx
b. 配置nginx
/etc/nginx/conf.d
配置内容如下: server { # 这个server标识我要配置了 listen 80; # 我要监听那个端口 server_name 192.168.2.108 ; # 你访问的路径前面的url名称 access_log /var/log/nginx/access.log main; # Nginx日志配置 charset utf-8; # Nginx编码 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; # 错误页面 # 指定项目路径uwsgi location / { # 这个location就和咱们Django的url(r‘^admin/‘, admin.site.urls), include uwsgi_params; # 导入一个Nginx模块他是用来和uWSGI进行通讯的 uwsgi_connect_timeout 30; # 设置连接uWSGI超时时间 uwsgi_pass unix:/opt/proj/script/uwsgi.sock; # 指定uwsgi的sock文件所有动态请求就会直接丢给他 } # 指定静态文件路径 location /static/ { alias /opt/proj/teacher/static/; index index.html index.htm; } } 最后一步,重启nginx
/etc/init.d/nginx restart
nginx相关命令
# 启动Nginx通过Nginx访问 /etc/init.d/nginx start /etc/init.d/nginx stop # 这里有个命令configtest,Nginx配置是重启生效的,如果你修改完了,不知道对 不对又担心影响其他人可以使用它测试 /etc/init.d/nginx configtest # 如果是生产环境的话Nginx正在运行,就不要直接stop start 或者 restart 直接reload就行了 # 对线上影响最低 /etc/init.d/nginx reload
至此,Django + Uwsgi + Nginx 的生产环境部署就完成了
Django + Uwsgi + Nginx 实现生产环境部署1
原文:https://www.cnblogs.com/weidaijie/p/10497341.html