Django部署
中文文档、淘宝网页书籍、安装https://www.cnblogs.com/fengff/p/8892590.html
// 默认是以后台进程的方式启动 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.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对接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
# 使用默认方式安装完系统之后,不要急着装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或许就不会出现这个问题。
// 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
// 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服务器单台最多处理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/
前进时,请别遗忘了身后的脚印。