通常,我们的web服务是部署在云服务厂商的云主机上,比如阿里云的ECS云主机,或者企业的IT机房。
这里大家练习的时候,可以先用一台安装了Linux的虚拟机。
安装好后, 为了方便后续apt安装其它软件时,能从国内的apt源高速下载,需要设置一下apt源,具体操作参考我们这篇教程有详细讲解
以后当你负责产品发布,你需要准备发布的产品包。
产品的发布包,是不是只是需要把你的代码 用zip打个包?
不是那样简单的。
产品往往会 涉及到好多子系统,前端通常包括 web前端、app前端, 后端 包括 业务处理系统、数据库系统、消息队列、异步任务系统、缓存系统等等。
为了保证这些子系统能在生产环境 友好配合 , 需要仔细的规划、配置、产生发布包。
我们先从基本的做起,我们现在的系统 包括 web前端系统(包括web前端的HTML、css、图片、js业务代码、js库等文件)、后端业务处理系统、数据库系统。
需要做到产品发布包里面的 包括 web前端系统 和 业务处理系统 的代码。
不同的运营架构,部署的方式不同,需要构建发布包的方式也不同。
这里,根据我们的架构图,可以把 前端系统代码 做在一个发布包中, 后端系统做在另一个发布包中。
我们完全可以 把 前后端系统 分别部署到 两台 Linux主机上。当有请求需要Django后端业务系统处理的时候,转发给Django所在的主机即可。 如果请求只是获取一些静态资源,比如HTML、图片等,在前端主机处理完即可。 这样 做到 部署的前后端分离。
目前我们先按照简单的来, 根据我们的架构图, 都部署在同一台机器上。
首先,我们需要为当前版本的发布,准备 web前端发布包,和web后端发布包。
现在我们假定发布的 版本号为 1.5
你们作为后端的开发人员,当然由你提供,后端的发布包。
基于Django开发的后端系统,要发布正式版本:
bysms_back_v1.5修改其中 bysms/settings.py ,把下面的 配置项DEBUG值为 False
- # SECURITY WARNING: don't run with debug turned on in production!
- DEBUG = True
前面我们为了开发简单,一直用的SQLite数据库,现在需要改为生产环境的MySQL数据库。
按照如下示例,修改 bysms/settings.py
- #DATABASES = {
- # 'default': {
- # 'ENGINE': 'django.db.backends.sqlite3',
- # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
- # }
- #}
-
- DATABASES = {
- 'default': {
- 'ENGINE': 'django.db.backends.mysql',
- 'NAME': 'bysms', # 数据库名
- 'USER': 'byhy', # 数据库 用户名
- 'PASSWORD': 'Mima123$',# 数据库 用户密码
- 'HOST': '127.0.0.1', # 数据库服务主机名
- 'PORT': '3306', # 数据库服务端口
- 'CONN_MAX_AGE': 0
- }
- }
当然,上面配置的 MySQL连接的 用户名、密码、数据库名、数据库服务主机名、端口 都要和你的环境匹配。
生产环境,我们使用 Gunicorn 作为 Django的WSGI前端,首先我们需要创建一个 Gunicorn启动配置文件 ./bysms/gunicorn_conf.py(和setting.py一个目录) ,内容如下
- # gunicorn/django 服务监听地址、端口
- bind = '127.0.0.1:8000'
-
- # gunicorn worker 进程个数,建议为: CPU核心个数 * 2 + 1
- workers = 3
-
- # gunicorn worker 类型, 使用异步的event类型IO效率比较高
- worker_class = "gevent"
-
- # 日志文件路径
- errorlog = "/home/byhy/gunicorn.log"
- loglevel = "info"
-
- import sys,os
-
- cwd = os.getcwd()
- sys.path.append(cwd)
要保证我们的Django后端服务在linux上一个命令就能启动,需要开发一个 Linux 启动shell脚本 ./run.sh 。(在setting.py上级目录创建)
可以参考下面的 shell脚本内容
- #!/bin/bash
- DIR="$( cd "$( dirname "$0" )" && pwd )"
- echo $DIR
-
- cd $DIR
-
- # ulimit -n 50000
- nohup gunicorn --config=bysms/gunicorn_conf.py bysms.wsgi &> /dev/null &
VERSION = '1.5'
然后,删除 所有app 的 migrations 目录。
最好把整个Django后端的代码打包,包名为 bysms_back_v1.5.zip