Django部署

Django部署

 

 

 

 

部署

Nginx

nginx操作

nginx基本配置

nginx基本操作

nginx遇到的问题

nginx对接uwsgi

nginx对接不同的服务器

nginx负载均衡

简介

配置

使用案例

简单测试

 

 

 

部署

 django中自带开发者服务器

 runserver

 路由处理功能,动态资源处理

 如果是debug的话,具有静态资源处理的功能

 功能健壮,性能比较低,仅仅使用于开发

 部署不会使用单一服务器

 Apache

 Nginx

 HTTP服务器

 处理静态资源

 反向代理

 uWSGI HTTP服务器

 gunicorn HTTP服务器

 邮件服务器

 流媒体服务器

 

 

Nginx

中文文档淘宝网页书籍、安装https://www.cnblogs.com/fengff/p/8892590.html

 

nginx操作

// 默认是以后台进程的方式启动
sudo nginx
// 如果是编译安装
// sudo /opt/soft/nginx/start/nginx

// 查看启动进程id
ps -ef|grep nginx

// 和谐关闭
sudo nginx -s stop

// nginx根据指定配置文件启动项目,一般先测试,测试通过在启动部署
sudo nginx -t -c ***/nginx.conf

// nginx启动项目,此时只能访问静态资源(nginx充当HTTP服务器),
// 要想访问动态资源还需配置uwsgi(nginx充当代理服务器)
sudo nginx -c ***/nginx.config

 

 

nginx基本配置

// nginx配置文件nginx.conf,放在项目根目录下

# nginx用户名
user www-data;
# nginx工作的进程数量
worker_processes auto;
# nginx运行时存储自己pid的文件。nginx是通过将自己的pid记录下来的方式,然后当给nginx发信号时,
# 它会去nginx.pid文件内找启动的进程号,然后给当前nginx启动的进程号发信号
pid /run/nginx.pid;

# 工作模式
events {
   # 最大链接数
   worker_connections 768;
   # multi_accept on;
}

http {

   ##
   # Basic Settings
   ##

   sendfile on;
   tcp_nopush on;
   tcp_nodelay on;
   keepalive_timeout 65;
   types_hash_max_size 2048;
   # server_tokens off;

   # server_names_hash_bucket_size 64;
   # server_name_in_redirect off;

   include /etc/nginx/mime.types;
   default_type application/octet-stream;

   ##
   # SSL Settings
   ##

   ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
   ssl_prefer_server_ciphers on;

   ##
   # Logging Settings
   ##
   # 访问日志和错误日志,一般越来越大的文件会放在var目录下
   access_log /var/log/nginx/access.log;
   error_log /var/log/nginx/error.log;

   ##
   # Gzip Settings
   ##

   # 开启gzip
   gzip on;
   gzip_disable "msie6";

   # gzip_vary on;
   # gzip_proxied any;
   # gzip_comp_level 6;
   # gzip_buffers 16 8k;
   # gzip_http_version 1.1;
   # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;


    server {
      # nginx代理服务启动的ip地址以及端口号(供客户端访问的ip端口),default_server默认是localhost
        listen 80 default_server;
        listen [::]:80 default_server;

      # 项目的跟路径
        root /home/liuwei/PycharmProjects/DjangoProDemo/DjangoDemo;

        # Add index.php to the list if you are using PHP
        # index index.html index.htm index.nginx-debian.html;

        server_name _;

        # 匹配静态目录路由
        location /static {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            # try_files $uri $uri/ =404;
            alias /home/liuwei/PycharmProjects/DjangoProDemo/DjangoDemo/static;
        }

        # 匹配除了静态文件的路由[动态资源需要使用反向解析,指定对接服务器,和python最和掐的nginx提供了uwsgi]
      # / 表示匹配所有
        location / {
             # 加载uwsgi的一些参数
             include /etc/nginx/uwsgi_params;
             # nginx将请求转发给监听如下地址的服务器处理,然后nginx将其他服务器处理的结果在交给客户端
             uwsgi_pass 0.0.0.0:8888;
        }
    }
}

 

nginx基本操作

# nginx对接uwsgi
# 安装uwsgi
sudo apt-get install python3-dev  // 如果不安装这个直接安装uwsgi会报错Command "/home/liuwei/PycharmProjects/DjangoProDemo/venv/bin/python 
pip install uWSGI

# uwsui启动项目(可以访问静态资源,但是不能访问静态资源)
uwsgi --ini ****/uwsgi.ini

# 关闭项目
uwsgi --stop uwsgi.pid

# 查看uwsig 启动信息
ps 17331

 

nginx遇到的问题

# 使用默认方式安装完系统之后,不要急着装conda和配置pip镜像源,装了conda就很难在装上python3-dev
# 先去更新以下 
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python3-dev
# 先去装python3-dev,这就没报错说安不上python3-dev,少依赖啥的错误了。

之前在安装uwsgi报错:
Building wheel for uwsgi (setup.py) ... error
  ERROR: Command errored out with exit status 1:
   command: /home/liuwei/mycode/py/envs/structappenv/bin/python -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-x_v8_6dt/uwsgi/setup.py'"'"'; __file__='"'"'/tmp/pip-install-x_v8_6dt/uwsgi/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' bdist_wheel -d /tmp/pip-wheel-9flg0dwl --python-tag cp36
       cwd: /tmp/pip-install-x_v8_6dt/uwsgi/
  Complete output (163 lines):
  /home/liuwei/.conda/envs/py366/lib/python3.6/distutils/dist.py:261: UserWarning: Unknown distribution option: 'descriptions'
    warnings.warn(msg)
  running bdist_wheel
  
  # 自己后来又研究了一下,在虚拟环境virtualenvwrapper下:
          # 不配置pip阿里镜像源,直接在虚拟环境里安装uwsgi,能成功!(会使用之前安装的python3-dev去编译?)
          # 配置pip阿里镜像源,安装uwsgi他会自动下载再次编译,就会报上面的错误。(不会使用之前安装的python3-dev去编译?)
          
  # 我在想,如果我不使用conda或许就不会出现这个问题。

 

nginx对接uwsgi

// uwsgi配置文件uwsgi.ini,放在项目根目录下

[uwsgi]

# 如果是使用Nginx连接使用:
socket = 0.0.0.0:8888
# 如果是直接作为web服务器使用:
# http=127.0.0.1:8080


# 配置工程目录
chdir=/home/liuwei/PycharmProjects/DjangoProDemo/DjangoDemo
# 配置项目的wsgi目录,相对于工程目录。相对路径相对于chdir目录
wsgi-file=DjangoDemo/wsgi.py

#配置进程、线程信息,这取决于服务器的配置
processes=2
threds=2
# 是否开启多线程模式
enable-threads=True
# 是否开启主从结构
master=True
# 进程id存储文件,相对于当前文件路径,启动时会自动创建
pidfile=uwsgi.pid
# 日志文件
daemonize=uwsgi.log

先启动uwsgi后启动nginx,遇到问题看日志!

 

 

nginx对接不同的服务器

// nginx 对接uwsgi
location / {
     include /etc/nginx/uwsgi_params;
     uwsgi_pass 0.0.0.0:8888;
}

// nginx也可以直接对接runserver,作为反向代理
 location / {
     # runserver启动端口http://127.0.0.1:9000
     proxy_pass http://127.0.0.1:9000;
}

 

nginx负载均衡

 

简介

Nginx服务器单台最多处理50000并发。负载均衡是有一台专门的服务器作请求分发【当然还可以继续嵌套,一个主负载,多个从负载】,请求分发给多个业务逻辑服务器去处理业务。

 

配置

- 负载均衡模块,通过一个简单的调度算法来实现客户ip到后端服务器的负载均衡

- 配置
    upstream myproject {
        ip_hash;
        server 192.1.10.113:8000 weight=5;
        server 192.1.10.117:8000 down;
        server 192.110.1.118:8000 weight=2;
        server 192.45.178.125:8000 backup;
       # fair;
    }
    
- 负载均衡算法
    weight 负载权重,权重越高,分的请求越多
    down 当前server不参与负载均衡
    backup 其他机器全down掉或满载使用此服务
    ip_hash 按每个请求的hash结果来分配,session不会乱
    fair 按后端响应时间来分 (第三方的)

 

使用案例

http {
  upstream myproject {
      server 127.0.0.1:8000 weight=3;
      server 127.0.0.1:8001;
      server 127.0.0.1:8002;
      server 127.0.0.1:8003;
  }

  server {
      listen 80;
      server_name www.domain.com;
      location / {
          proxy_pass http://myproject;
      }
  }
}

 

 

简单测试

- 安装ApacheBench
    sudo apt install apache2-utils
    
- 使用ApacheBeanch
    - 查看使用文档
        ab
    - 访问网站
        ab http://www.baidu.com/

 

posted @ 2020-08-09 15:43  刘呆哗  阅读(216)  评论(0编辑  收藏  举报