静态文件要这样访问 专业!!
上线之前要把 配置这样修改
HOST="192.167.12.42" #改成在公网ip
DEBUG=false
所有人能访问
测试版的 本地测试,不是上线版的
安装python 3.6?? (看以前的笔记)
wsgiref的性能要差一点
第二个版本要装uwsgi
UWSGI 缺点:处理I静态文件有问题
当访问量大的时候,需要有负载均衡
这个时候ngxj
能够处理静态文件
-- 做反向代理
--做负载均衡(处理多个接口)(LVS,hapropx也可以做负载均衡)
这个时候 可以这样写 因为他们是内部传递的 所以可以用socket来传送数据
UWSgi中加上 &就可以后台运行
然后ngix做负载均衡 如下
uwsgi中的processes=1 这个数字跟cup核数有关, 能同时开启的进程数
小白的项目部署
项目开发完毕后,需要将代码放到服务器上,这样用户才能访问。接下来我们一步一步来进行一波部署操作。
1. 简单粗暴
项目开发完毕,在部署之前需要再配置文件中将 ALLOWED_HOSTS配置设置为:当前服务器IP或*,如:
1
|
ALLOWED_HOSTS
=
[
"*"
,]
|
示例源码:猛击下载
然后将源码上传至服务器指定目录,如:/data/ ,然后执行命令来运行:
注: 上传命令: scp /Users/wupeiqi/PycharmProjects/oldboy-1.zip root@192.168.10.33:/data/
解压,进入目录并执行以下命令:
1
|
python3 mange.py runserver
0.0
.
0.0
:
8000
|
2. uwsgi
Django框架运行依赖wsgi(本质提供socket服务端),众多模块实现了wsgi规范,而django框架中默认使用wsigiref模块来实现,他由于性能比较低,所以用于本地开发和测试,而线上部署时需要使用uwsgi来代替。
a. 在服务器上安装uwsgi
1
|
pip3 install uwsgi
|
需要先安装:yum install python-devel
b. 单文件使用uwsgi
在服务器上编写一个Python文件:
1
2
3
|
def
application(env, start_response):
start_response(
'200 OK'
, [(
'Content-Type'
,
'text/html'
)])
return
[b
"Hello World"
]
|
在服务器上执行命令启动Web服务器:
1
2
3
|
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 ,执行命令启动:
1
|
uwsgi
-
-
http :
9005
-
-
chdir
/
data
/
oldboy
/
-
-
wsgi
-
file
oldboy
/
wsgi.py
-
-
master
-
-
processes
4
|

1. 创建配置文件 oldboy.ini [uwsgi] http = 0.0.0.0:9005 chdir = /data/oldboy/ wsgi-file = oldboy/wsgi.py processes = 4 static-map = /static=/data/oldboy/allstatic 2. 根据配置文件启动uwsgi uwsigi --ini oldboy.ini
PS: 如果有虚拟环境可以添加上虚拟环境路径配置: virtualenv
=
/env
/oldboy
_venv
此时访问时,会出现找不到静态文件的错误。
想要uwsgi处理静态文件,需要先将django的静态文件收集到制定目录,然后再设置对应关系。
- 收集django静态文件
- 在django的配置文件中添加:STATIC_ROOT = os.path.join(BASE_DIR,"allstatic")
- 执行 python3 manage.py collectstatic 命令,至此django项目所有相关静态文件都会收集到制定目录。
- 设置uwsgi静态文件对应关系
- uwsgi --http :9005 --chdir /data/oldboy/ --wsgi-file oldboy/wsgi.py --master --processes 4 --static-map /static=/data/oldboy/allstatic
访问地址,即可看到你的女朋友们了....
3. nginx
利用Nginx做反向代理、负载均衡以及处理静态文件。
a. 安装Nginx
1
|
yum install nginx
|
b. 配置nginx

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_nodelay on; keepalive_timeout 65; include /etc/nginx/mime.types; default_type application/octet-stream; upstream django { server 127.0.0.1:8001; # server 192.1.123.1; } server { listen 80; charset utf-8; # max upload size client_max_body_size 75M; location /static { alias /data/oldboy/allstatic; } location / { uwsgi_pass django; include uwsgi_params; } } }
确保nginx配置文件目录下有uwsgi_params文件(默认)
c. 配置uwsgi
为了确保让所有请求均通过80端口来访问网站,将uwsgi的配置文件修改为:
1
2
3
4
5
6
|
[uwsgi]
socket
=
127.0
.
0.1
:
9005
chdir
=
/
data
/
oldboy
/
wsgi
-
file
=
oldboy
/
wsgi.py
processes
=
4
logto
=
/
tmp
/
oldboy.log
|
d. 启动uwsgi和nginx
1
2
3
|
uwsgi --ini
/data/oldboy/oldboy
.ini &
/etc/init
.d
/nginx
start
|
3. supervisor
supervisor是一个对进程管理的软件,可以帮助我们启动uwsgi并维护(uwsgi进程关闭时,自动将其启动起来)。
a. 安装
1
|
yum
install
supervisor
|
b. 配置 vim /etc/supervisor.conf
6. 第三版本上线:uwsgi + nginx
nginx作用:
- 处理静态文件
- 反向代理
- 负载均衡(LVS、haproxy)
uwsig作用:
- 处理动态请求
nginx配置:/etc/nginx/nginx.conf

user root; #进程数量 4 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_nodelay on; keepalive_timeout 65; include /etc/nginx/mime.types; default_type application/octet-stream; upstream django { server 127.0.0.1:8001; server 127.0.0.1:8002; } server { #监听80端口 listen 80; charset utf-8; # max upload size client_max_body_size 75M; location /static { alias /data/s8day145/allstatic; } location / { uwsgi_pass django; include uwsgi_params; } } }
uwsgi配置:/data/s8day145/
s8day145_uwsgi_8001.ini [uwsgi] socket = 127.0.0.1:8001 chdir = /data/s8day145/ wsgi-file = s8day145/wsgi.py processes = 1 s8day145_uwsgi_8002.ini [uwsgi] socket = 127.0.0.1:8002 chdir = /data/s8day145/ wsgi-file = s8day145/wsgi.py processes = 1
启动:
nginx: /etc/init.d/nginx start /bin/systemctl restart nginx.service /bin/systemctl start nginx.service /bin/systemctl stop nginx.service uwsgi: #这里后边加一个 & 表示在后端启动,不会在前面打印一些日志 uwsgi --ini s8day145_uwsgi_8001.ini & uwsgi --ini s8day145_uwsgi_8002.ini &
7. 如果进程挂了,supervisor帮助你自动将服务重新启动。
/etc/supervisord.conf [program:s8day145] command=/usr/local/bin/uwsgi --ini /data/s8day145/s8day145_uwsgi_8001.ini ;命令 priority=999 ; 优先级(越小越优先) autostart=true ; supervisord启动时,该程序也启动 autorestart=true ; 异常退出时,自动启动 startsecs=10 ; 启动后持续10s后未发生异常,才表示启动成功 startretries=3 ; 异常后,自动重启次数 exitcodes=0,2 ; exit异常抛出的是0、2时才认为是异常 stopsignal=QUIT ; 杀进程的信号 stopwaitsecs=10 ; 向进程发出stopsignal后等待OS向supervisord返回SIGCHILD 的时间。若超时则supervisord将 使用SIGKILL杀进程 user=root ; 设置启动该程序的用户 log_stdout=true ; 如果为True,则记录程序日志 log_stderr=false ; 如果为True,则记录程序错误日志 logfile=/var/log/cat.log ; 程序日志路径 logfile_maxbytes=1MB ; 日志文件最大大小 logfile_backups=10 ; 日志文件最大数量 systemctl start supervisord.service
- 公司中的部署步骤及负责人:
- 开发提交代码
- 测试人员开始测试
- 运维人员进行上线
使用软件:jenkins+自己写脚本,运维人员点点点。
- 从git上啦代码到一个服务器,在该服务器上对代码进行编译(c/vue/java)
- 通过以下工具 将代码同步到每台服务器上
- saltstack
- ansible
- 执行命令启动程序
- 自己搭建yum源