Django项目部署
Django项目部署
Django的settings中
settings --- ALLOWED_HOST = ['个人的IP']
DEBUG = False
(1) Django代码 拷贝到服务器
runserver 0.0.0.0:9002 (自带的wsgiref 性能低)
(2) 通过uwsgi
pip install uwsgi
使用 :
a linux 下载 uwsgi 运行 app.py,监听 9001端口
单文件
app.py
def application(env,start_response):
start_response('200 OK',[('Content-Type','text/html')])
return [b'hello world']
uwsgi --http :9001 --wsgi-file app.py
>>
http://140.143.35.239:9001/
hello world
b Django 程序(wsgi.py文件):
uwsgi --http :9005 --chdir /data/项目目录/ --wsgi-file /项目/wsgi.py --master --process 4 --threads 2 --static-map /static=/data/...c
含静态文件:
需要配置 STATIC_ROOT (用于统一收集静态文件)
收集静态文件 python manage.py collectstatic
c 写一个 uwsgi.ini 配置文件
[uwsgi]
http = 0.0.0.0:9005
chdir = /data/项目目录/
wsgi-file = /项目/wsgi.py
process = 4
threads = 2
static-map = /static=/data/...c
uwsgi uwsgi.ini
(3) nginx 反向代理(分发)
uwsgi 处理静态文件的能力不强
使用 -- yum install nginx
配置 --
1 启动 uwsgi
uwsgi uwsgi_socket.ini
写一个 uwsgi_socket.ini 配置文件
[uwsgi]
socket = 0.0.0.0:9005
chdir = /data/项目目录/
wsgi-file = /项目/wsgi.py
process = 4
threads = 2
2 启动 nginx
/etc/init.d/nginx start
配置:nginx.conf
user root;
worker_processes 4;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
' "$http_user_agent" "$http_x_forwarded_for" ';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodeplay on;
keepalive_timeout 65;
# types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
upstream django {
# servr unix://path/to/your/mysite.sock;
servr 127.0.0.1:9001;
}
server {
listen 80;
charset utf-8;
client_max_body_size 75M;
location /static{
alias /root/s5/sdads
}
location / {
uwsgi_pass django;
include uwsgi_params;
}
}
}
(4) 路飞上线
vue --- vue run build (run build 来生成静态文件)
-->>> dist生成一个静态文件
上传到服务器 nginx的静态文件的目录
django restframework
location /api {
uwsgi_pass django;
include uwsgi_params;
}
location / {
alias /静态文件;
}
(5) 运维部署流程
开发 上传git
运维 :
测试服务器 master saltstack
saltstack 推送到线上(vue--dist, api程序)
上线服务器 slave
正式的
静态文件目录 uwsgi的目录
jekins 软件 --->> 自动化部署(git下载,上传到上线服务器)
(6) nginx与负载均衡
**nginx (基于效率最高的 epoll IO 模型 ) 支持并发量 2w,**
**(它相当于是 精简版的 httpd) web 服务器**
niginx 实现负载均衡:
实现方式: 反向代理
代理:
1 正向: vpn (正常的使用中间代理 来获取想要的数据)
2 反向(把内网的机器隐藏起来): 用户访问同一台机器(代理机器),然后把用户请求分发到不同的其他机器上,获取结果后再统一的返回给用户
3 透明(管理用户) :(用户不知道代理的存在)
数据包-->> 交换机 -->> (管理员 设置 透明代理) 中间服务器(限制访问内容) -->> 正常网页
反向代理:
用户pc --->> nginx 隐藏的内网的 机器 (也可以是nginx)
(反向代理) ---->> .A
同时实现了负载均衡 ---->> B
---->> C
---->> D
---->> .....
niginx 负载均衡的方式:(要考虑用户的状态维持)
(1)round-robin 轮询 默认每个机器一次
也可以加权重 (使得配置,性能好的机器更多的使用)
缺点:不能保持用户的状态
(2)使用 ip-hash (用户认证 使得会话保持)
但是这样 会没有负载均衡
(3)解决方法:
使用一台第三方(共享的机器)的机器来专门 保存用户的 验证信息
读书使人心眼明亮