1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > django项目部署(uwsgi+nginx)

django项目部署(uwsgi+nginx)

时间:2020-09-28 03:13:21

相关推荐

django项目部署(uwsgi+nginx)

django项目部署(uwsgi+nginx)

版本背景:python:3.7django:2.2mysql:8.0uwsgi:2.0.17nginx:1.15.6

部署步骤

确定linux服务器,上传项目包安装项目所需包

收集包:pip freeze > requirement.txt安装包:pip install -r requirement.txt

收集静态文件,启动项目

python manage.py collectstaticpython manage.py runserver

安装uwsgi、nginx,修改配置文件,启动项目

nginx相关命令- 启动:/usr/local/nginx/sbin/nginx - 检测:/usr/local/nginx/sbin/nginx -t- 重载:/usr/local/nginx/sbin/nginx -s reload- 重启:/usr/local/nginx/sbin/nginx -s reopen- 停止:/usr/local/nginx/sbin/nginx -s stopuwsig相关命令- 启动:uwsgi --ini uwsgi.ini- 停止:uwsgi --stop uwsgi.pid- 重载:uwsgi --reload uwsgi.pid

这里简要说明一下nginx服务器的作用

nginx服务器在使用中作为web服务器和反向代理服务器正向代理最大的特点是客户端非常明确要访问的服务器地址;服务器只清楚请求来自哪个代理服务器,而不清楚来自哪个具体的客户端;正向代理模式屏蔽或者隐藏了真实客户端信息。反向代理,“它代理的是服务端”,主要用于服务器集群分布式部署的情况下,反向代理隐藏了服务器的信息。负载均衡:将服务器接收到的请求按照规则分发的过程Nginx支持的负载均衡调度算法方式如下:

1、weight轮询(默认):接收到的请求按照顺序逐一分配到不同的后端服务器,即使在使用过程中,某一台后端服务器宕机,Nginx会自动将该服务器剔除出队列,请求受理情况不会受到任何影响。 这种方式下,可以给不同的后端服务器设置一个权重值(weight),用于调整不同的服务器上请求的分配率;权重数据越大,被分配到请求的几率越大;该权重值,主要是针对实际工作环境中不同的后端服务器硬件配置进行调整的。

2、ip_hash:将每个请求客户端的ip地址和访问的真实服务器信息记录下来,在下一次该客户端访问服务器时,直接分发给该服务器,这在一定程度上解决了集群部署环境下session共享的问题

3、fair:智能调整调度算法,动态的根据后端服务器的请求处理到响应的时间进行均衡分配,响应时间短处理效率高的服务器分配到请求的概率高,响应时间长处理效率低的服务器分配到的请求少;结合了前两者的优点的一种调度算法。但是需要注意的是Nginx默认不支持fair算法,如果要使用这种调度算法,请安装upstream_fair模块。

4、url_hash:按照访问的url的hash结果分配请求,每个请求的url会指向后端固定的某个服务器,可以在Nginx作为静态服务器的情况下提高缓存效率。同样要注意Nginx默认不支持这种调度算法,要使用的话需要安装Nginx的hash软件包。

下面由浅入深介绍相关配置来完成项目部署

1、uwsgi单独部署

uwsgi.ini

[uwsgi]# 直接做web服务器,不用nginx做转发http= 127.0.0.1:8000# 指定wsgi文件wsgi-file=sjd/wsgi.py# 项目根目录文件夹chdir=/sjd/sjd/#进程数processes=4#每个进程的线程数threads=2#当前主机master=True#作为服务运行,pid保存文件pidfile=uwsgi.pid# 日志目录daemonize=uwsgi.log#使用uwsgi处理静态文件static-map=/static=static_file

2、uwsgi+nginx部署(推荐)

uwsgi.ini

[uwsgi]#使用socket来进行ngxin连接socket=127.0.0.1:8000# 指定wsgi文件wsgi-file=sjd/wsgi.py# 项目根目录文件夹chdir=/sjd/sjd/#进程数processes=4#每个进程的线程数threads=2#当前主机master=True#作为服务运行,pid保存文件pidfile=uwsgi.pid# 日志目录daemonize=uwsgi.log#使用nginx做静态文件的处理#static-map=/static=static_file

nginx.conf

server {listen 80;listen 443;server_name 101.37.247.76;#配置django项目的访问入口location / {include uwsgi_params;uwsgi_pass 127.0.0.1:8000;proxy_set_header Host $http_host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 600;proxy_read_timeout 600;}# 配置django项目中静态文件的访问入口# 使用的是alias模式下的重定义路径location /static {alias /sjd/sjd/static/;}# 配置的是其他静态文件的访问入口(root)#location /report {# root /sjd/;# expires 24h;# proxy_store on;# proxy_store_access user:rw group:rw all:rw;# proxy_redirectoff;#}}

3、uwsgi+nginx分布式部署(单机多服务)

uwsgi1.ini

[uwsgi]#使用nginx做负载均衡http= 127.0.0.1:8000# 指定wsgi文件wsgi-file=sjd/wsgi.py# 项目根目录文件夹chdir=/sjd/sjd/#进程数processes=4#每个进程的线程数threads=2#当前主机master=True#作为服务运行,pid保存文件pidfile=uwsgi.pid# 日志目录daemonize=uwsgi.log#使用nginx做静态文件的处理#static-map=/static=static_file

uwsgi2.ini

[uwsgi]#使用nginx做负载均衡http= 127.0.0.1:8001# 指定wsgi文件wsgi-file=sjd/wsgi.py# 项目根目录文件夹chdir=/sjd/sjd/#进程数processes=4#每个进程的线程数threads=2#当前主机master=True#作为服务运行,pid保存文件pidfile=uwsgi.pid# 日志目录daemonize=uwsgi.log#使用nginx做静态文件的处理#static-map=/static=static_file

nginx.conf

upstream webserver {server 127.0.0.1:8000server 127.0.0.1:8001}server {listen 80;listen 443;server_name 101.37.247.76;#配置django项目的访问入口location / {proxy_pass http://webserver;proxy_set_header Host $http_host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 600;proxy_read_timeout 600;}# 配置django项目中静态文件的访问入口# 使用的是alias模式下的重定义路径location /static {alias /sjd/sjd/static/;}# 配置的是其他静态文件的访问入口(root)#location /report {# root /sjd/;# expires 24h;# proxy_store on;# proxy_store_access user:rw group:rw all:rw;# proxy_redirectoff;#}}

4、uwsgi+nginx分布式部署(多机多服务)

uwsgi1.ini

[uwsgi]#使用nginx做负载均衡http= 192.168.0.1:8000# 指定wsgi文件wsgi-file=sjd/wsgi.py# 项目根目录文件夹chdir=/sjd/sjd/#进程数processes=4#每个进程的线程数threads=2#当前主机master=True#作为服务运行,pid保存文件pidfile=uwsgi.pid# 日志目录daemonize=uwsgi.log#使用nginx做静态文件的处理#static-map=/static=static_file

uwsgi2.ini

[uwsgi]#使用nginx做负载均衡http= 192.168.0.2:8000# 指定wsgi文件wsgi-file=sjd/wsgi.py# 项目根目录文件夹chdir=/sjd/sjd/#进程数processes=4#每个进程的线程数threads=2#当前主机master=True#作为服务运行,pid保存文件pidfile=uwsgi.pid# 日志目录daemonize=uwsgi.log#使用nginx做静态文件的处理#static-map=/static=static_file

nginx.conf

upstream webserver {server 192.168.0.1:8000server 192.168.0.2:8000}server {listen 80;listen 443;server_name 101.37.247.76;#配置django项目的访问入口location / {proxy_pass http://webserver;proxy_set_header Host $http_host:$server_port;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header X-Forwarded-Proto $scheme;proxy_connect_timeout 600;proxy_read_timeout 600;}# 配置django项目中静态文件的访问入口# 使用的是alias模式下的重定义路径location /static {alias /sjd/sjd/static/;}# 配置的是其他静态文件的访问入口(root)#location /report {# root /sjd/;# expires 24h;# proxy_store on;# proxy_store_access user:rw group:rw all:rw;# proxy_redirectoff;#}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。