一、架构说明
1、Django 在生产环境不应该处理静态资源(比如网页、图片等)的请求
#前面使用了html作为模板返回,或者直接用templates返回前端页面的
#return render(index.html) 在这种方法是不可取的, django更多的使用json返回数据
#而碰到这种静态请求时,我们会在前面搭建一台nginx来进行访问,django只接受动态请求
2、Django 在生产环境 不能直接处理 HTTP请求
#Django是wsgi web application 的框架,它只有一个简单的单线程 wsgi web server供调试时使用,性能很低。
架构图
架构子系统协同分析
1、nginx
#Nginx 运行起来是多个进程, 接收从客户端(通常是浏览器或者手机APP)发过来的请求
#它会根据请求的URL进行判断, 如果请求的是静态资源, 比如HTML文档、图片等
#它直接从配置的路径进行读取, 返回内容给客户端
#如果请求的是动态数据, 则转发给Gunicorn+Django进行处理
2、Gunicorn/Django
#Gunicorn和Django是运行在同一个 Python进程里面的, 它们都是用Python代码写的程序。
#启动Gunicorn的时候,它会根据配置加载Django的入口模块,这个入口模块里面提供了WSGI接口。
#当Gunicorn接收到Nginx转发的HTTP请求后, 就会调用Django的WSGI入口函数,将请求给Django进行处理
#Django框架再根据请求的URL和我们项目配置的URL路由表,找到我们编写的对应的消息处理函数进行处理。
#我们编写的消息处理函数,就是前面章节大家学习到的,处理前端请求。如果需要读写数据库,就从MySQL数据库读写数据。
二、产品发布包准备
关于前端发布包和后端发布包
三、前端产品包准备
四、后端产品包准备
1、添加项目权限及导入Gunicorn 功能
vi Django_demo/Django_demo/settings.py
#允许访问的权限
ALLOWED_HOSTS = ['*','localhost','127.0.0.1']
#添加导入应用
INSTALLED_APPS = [
...
'gunicorn', #新增
]
#修改
DEBUG = False #改成False
2、拷贝项目
3、删除拷贝项目中数据库配置
paas/mgr/migrations
paas/paas/migrations
4、修改数据库配置为生产环境
paas/Django_demo/settings.py
DATABASES = {
'default':
{
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'paas', # 数据库名称
'HOST': '101.43.156.78', # 数据库地址
'PORT': 30013, # 端口
'USER': 'root', # 数据库用户名
'PASSWORD': '123456', # 数据库密码
}
}
5、添加linux启动脚本
paas/gunicorn_conf.py
# gunicorn/django 服务监听地址、端口
bind = '0.0.0.0:8000'
# gunicorn worker 进程个数,建议为: CPU核心个数 * 2 + 1
workers = 3
# gunicorn worker 类型, 使用异步的event类型IO效率比较高
worker_class = "gevent"
# 日志文件路径
#errorlog = "/home/gunicorn.log"
errorlog = "-"
loglevel = "info"
import sys,os
cwd = os.getcwd()
sys.path.append(cwd)
vi paas/run.sh
#!/bin/bash
DIR="$( cd "$( dirname "$0" )" && pwd )"
echo $DIR
cd $DIR
# ulimit -n 50000
#这里就是指定一下我们定义的配置文件
#Django_demo.wsgi 就是我们这个项目的项目名称+ .wsgi就行
gunicorn --config=$DIR/gunicorn_conf.py Django_demo.wsgi
#后台运行用下面这个
#nohup gunicorn --config=$DIR/gunicorn_conf.py Django_demo.wsgi &> /dev/null &
6、导出本地环境使用的库
#导出依赖
pip freeze > requirements.txt
vi requirements.txt
#添加
Gunicorn
gevent
greenlet
7、整理路径
五、部署nginx环境
mkdir /apps/demo/{web,app}
cd /apps/demo/web
1、添加nginx配置文件
vi nginx.conf
user nginx; # 用byhy用户运行Nginx进程
worker_processes 2; # 启动两个Nginx worker 进程
events {
# 每个工作进程 可以同时接收 1024 个连接
worker_connections 1024;
}
# 配置 Nginx worker 进程 最大允许 2000个网络连接
worker_rlimit_nofile 2000;
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 30;
gzip on;
# 配置 动态服务器(比如Gunicorn/Django)
# 主要配置 名称(这里是apiserver) 地址和端口
upstream apiserver {
# maintain a maximum of 20 idle connections to each upstream server
keepalive 20;
server 10.0.16.15:30021; # 地址和端口
}
# 配置 HTTP 服务器信息
server {
# 配置网站的域名,这里请改为你申请的域名, 如果没有域名,使用IP地址。
server_name 10.0.16.15;
# 配置访问静态文件的根目录,
root /home/byhy/bysms_frontend/z_dist;
# 配置动态数据请求怎么处理
# 下面这个配置项说明了,当 HTTP 请求 URL以 /api/ 开头,
# 则转发给 apiserver 服务器进程去处理
location /api/ {
proxy_pass http://apiserver;
proxy_set_header Host $host;
}
}
}
2、添加前端包
3、启动nginx
docker run -itd --name test \
-v ./nginx.conf:/etc/nginx/nginx.conf \
-p 30019:80 \
-v ./bysms_front_v1.5:/home/byhy/bysms_frontend/ \
nginx
4、测试
#这个是访问nginx下的
http://101.43.156.78:30019/mgr/sign.html
六、部署后端环境
1、上传后端包
cd /apps/demo/app
#将我们整个paas项目扔进去
2、编写Dockerfile
FROM python:3
COPY ./paas /home/paas/
WORKDIR /home/paas/
RUN python3 -m pip config set global.index-url https://pypi.douban.com/simple/ \
&& python3 -m pip config set global.trusted-host pypi.douban.com \
&& pip3 install -r requirements.txt \
&& chmod +x run.sh
CMD ["./run.sh"]
3、构建镜像
docker build . -f Dockerfile -t python:v1
4、运行
docker run -itd --name paas-app \
-p 30021:8000 \
docker.io/library/python:v1
5、测试
http://101.43.156.78:30019/api/mgr/orders/?action=list_order
七、创建用户
#登录容器
docker exec -it paas-app bash
#写入django数据库表数据
python3 manage.py makemigrations
python3 manage.py migrate
#创建用户
python3 manage.py createsuperuser
byhy
12345678