wordpress网站怎么优化,上海发布首页,建设银行 福建 招聘网站,特价锦州网站建设我们前面编写的所有代码都是在windows上面运行的#xff0c;因为我们还处于开发阶段 当我们完成具体任务开发后#xff0c;就需要把我们开发的网站服务发布给真正的用户 通常来说我们会选择一台公有云服务器比如阿里云ecs#xff0c;现在的web服务通常都是基于liunx操作系统… 我们前面编写的所有代码都是在windows上面运行的因为我们还处于开发阶段 当我们完成具体任务开发后就需要把我们开发的网站服务发布给真正的用户 通常来说我们会选择一台公有云服务器比如阿里云ecs现在的web服务通常都是基于liunx操作系统的 一、架构说明 我们把上线程序并不是简单的把windows的程序仍到linux上运行即可还需要考虑两个点 1、Django 在生产环境不应该处理静态资源比如网页、图片等的请求#前面使用了html作为模板返回或者直接用templates返回前端页面的#return renderindex.html 在这种方法是不可取的, django更多的使用json返回数据#而碰到这种静态请求时我们会在前面搭建一台nginx来进行访问django只接受动态请求2、Django 在生产环境 不能直接处理 HTTP请求#Django是wsgi web application 的框架它只有一个简单的单线程 wsgi web server供调试时使用,性能很低。在生产环境必须提供 专业的 wsgi web server比如 uWSGI 或者 Gunicorn。 我们这里使用 Gunicorn。 而且即使有了 uWSGI 或者 Gunicorn我们最好还要在前面设置 Nginx 。所有的客户请求由它先接受再进行相应的转发。 架构图 Nginx 在整个后端的最前方 可以实现 负载均衡、反向代理、请求缓存、响应缓存 、负荷控制等等一系列功能。可以大大的提高整个后端的性能和稳定性。 架构子系统协同分析
1、nginx #Nginx 运行起来是多个进程, 接收从客户端通常是浏览器或者手机APP发过来的请求#它会根据请求的URL进行判断, 如果请求的是静态资源, 比如HTML文档、图片等#它直接从配置的路径进行读取, 返回内容给客户端#如果请求的是动态数据, 则转发给GunicornDjango进行处理2、Gunicorn/Django#Gunicorn和Django是运行在同一个 Python进程里面的, 它们都是用Python代码写的程序。#启动Gunicorn的时候,它会根据配置加载Django的入口模块,这个入口模块里面提供了WSGI接口。#当Gunicorn接收到Nginx转发的HTTP请求后, 就会调用Django的WSGI入口函数,将请求给Django进行处理#Django框架再根据请求的URL和我们项目配置的URL路由表,找到我们编写的对应的消息处理函数进行处理。#我们编写的消息处理函数就是前面章节大家学习到的处理前端请求。如果需要读写数据库就从MySQL数据库读写数据。
二、产品发布包准备 如果需要你负责产品发布时你需要准备发布的产品包而产品包不是说让你把代码打个zip包就完事了产品通常会设计好几个子系统 前端通常包含web前端、app前端而后端也包括业务处理系统、数据库系统、消息队列、异步任务系统、缓存系统等等 为了保证这些子系统能在生产环境 友好配合 需要仔细的规划、配置、产生发布包。 关于前端发布包和后端发布包 首先, 我们现在的系统包括 1、web前端系统包括web前端的HTML、css、图片、js业务代码、js库等文件 2、后端业务处理系统 3、数据库系统 以上都需要做到产品发布包里面不同的运营架构部署的方式不同需要构建发布包的方式也不同这里根据我们的架构图可以把 前端系统代码 做在一个发布包中 后端系统做在另一个发布包中 我们完全可以 把 前后端系统 分别部署到 两台 Linux主机上。当有请求需要Django后端业务系统处理的时候转发给Django所在的主机即可。 如果请求只是获取一些静态资源 比如HTML、图片等在前端主机处理完即可。 这样做到部署的前后端分离。目前我们先按照简单的来 根据我们的架构图 都部署在同一台机器上 三、前端产品包准备 前端发布包由前端开发人员提供在如下百度网盘中的 bysms_front_v1.5.zip大家先下载到本地 百度网盘链接https://pan.baidu.com/s/1nUyxvq6IYykBNtPUf4Ho6w 提取码9w2u 四、后端产品包准备 作为后端的开发人员当然由我们来提供后端的发布包 (注意: 我这里的项目名称是Django_demo 别和应用名称那层搞混了) 1、添加项目权限及导入Gunicorn 功能
vi Django_demo/Django_demo/settings.py
#允许访问的权限
ALLOWED_HOSTS [*,localhost,127.0.0.1]#添加导入应用
INSTALLED_APPS [
...gunicorn, #新增]#修改
DEBUG False #改成False 2、拷贝项目 这里我们需要将原先的项目拷贝一份出来新的项目的名称自定义我这里直接定义为paas了 3、删除拷贝项目中数据库配置 migrations 是存放我们orm转换的python到数据库的配置如果不删除可能会影响生产环境 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启动脚本 生产环境我们使用 Gunicorn 作为 Django的WSGI前端首先我们需要创建一个 Gunicorn启动配置文件 paas/gunicorn_conf.py 内容如下 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 infoimport sys,oscwd os.getcwd()
sys.path.append(cwd) 要保证我们的Django后端服务在linux上一个命令就能启动需要开发一个 Linux 启动shell脚本 ./run.sh vi paas/run.sh
#!/bin/bash
DIR$( cd $( dirname $0 ) pwd )
echo $DIRcd $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 我们为了提供django的性能在他前面使用Gunicorn去部署 另外需要按照一些依赖的库gevent 和 greenlet 异步模式需要 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 serverkeepalive 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;}}}上面的配置文件中我们定义了如果请求/api/ 就把请求交给10.0.16.15:30021端口这个是一会我们搭建django暴露的端口 2、添加前端包 bysms_front_v1.5 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:3COPY ./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.shCMD [./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/?actionlist_order 七、创建用户
#登录容器
docker exec -it paas-app bash#写入django数据库表数据
python3 manage.py makemigrations
python3 manage.py migrate #创建用户
python3 manage.py createsuperuserbyhy
12345678 流程基本就是这样上面前端的代码调用的后端的api可能有问题稍后修改