项目发布须知
1,项目发布更换不同的服务器,解决依赖关系的问题
- pip3 frezz > requirements.py
- pip3 install -r requirements.py
2,准备python环境,准备虚拟环境,.激活虚拟环境
- mkvirtualenv xuexue
- 检测是否虚拟环境正常
- which pip3
- which python3
-
3,在虚拟环境中安装django模块(此时的操作都是在xuexue这个虚拟环境中)
- pip3 install django==1.11.11
4,安装pymysql连接mysql的数据库
- pip3 install pymysql
5,安装django的一个django-multiselectfield
- pip3 install django-multiselectfield
6,解决数据库连接问题,修改项目中settings.py文件
- 启动linux的数据库,创建对应的数据库,密码设置等等
- create database nb_crm
- 更改settings.py文件的相关设置
- DATABASES= {'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'nb_crm', #数据库名
'HOST': '127.0.0.1', #这里服务器的ip地址
'PORT': 3306, #端口
'USER': 'root', #用户名
'PASSWORD': 'redhat123', #用户密码
}}
- DATABASES= {'default': {
- 更改允许主机
- ALLOWED_HOSTS=["*"]
- 线上关闭debug=False, 但是有时候debug=True
7,使用uwsgi启动django,安装uwsgi
- pip3 install -i https://pypi.douban.com/simple uwsgi
8,通过uwsgi命令启动python应用(只做测试用)
- uwsgi --http 0.0.0.0:8888 --wsgi-file test1.py
- --http 指明你是http协议
- --socket启动一个socket链接
- wsgi-file 指明一个python应用文件
9,通过uwsgi启动django项目(问题是,uwsgi不处理static静态文件的配置)
- uwsgi --http :8888 --module NB_crm.wsgi
10,uwsgi可以通过热加载项目
- uwsgi --http :9999 --module mycrm.wsgi --py-autoreload=1
- --py-autoreload是告诉uwsgi自动重启加载django项目
11,通过uwsgi的配置文件启动项目
- 手动创建uwsgi.ini文件
- touch uwsgi.ini
- 写入作用域配置
- [uwsgi]
- # 项目的绝对路径,定位到项目的第一层
- chdir = /opt/NB_crm
- # 指明项目的wsgi文件路径
- module = NB_crm.wsgi
- # 指明虚拟解释器的第一层路径
- home = /root/#/Envs/env2
- # 指明通过uwsgi,启动多少个进程
- processes = 1
- # 如果配置了nginx(启动了nginx服务,配置uwsgi_pass),用这个socket连接
- socket = 0.0.0.0:8000
- # 如果没用nginx,可以通过uwsgi直接启动web服务,指明http协议
- http = 0.0.0.0:9999
- # 在退出uwsgi 环境后,清空环境变量
- vacuum = true
- [uwsgi]
12,通过配置文件启动NB_crm(注意到uwsgi不会处理静态文件)
- uwsgi --ini uwsgi.ini
13,配置django的settings.py,收集所有NB_crm项目锁需的静态文件
- # 通过命令,收集整个项目所有的静态文件,放入到/opt/static
- STATIC_ROOT="/opt/static/"
- 执行命令
- python3 manage.py clooectstatic
- 此时的NB_crm的所有的静态文件,都跑到/opt/static下边了
14,配置nginx
- 配置一个网站的入口,当用户访问192.168.12.96:80这个web应用时,自动将请求转发给uwsgi,uwsgi处理后,返回给nginx,返回给用户,当请求是192.168.12.96:80的时候,其实访问的是192.16812.96:9999,这是动态请求,因为找到的是uwsgi
- 通过nginx处理静态文件
- nginx..conf配置如下:# 定义负载均衡池,里面放入uwsgi的地址
-
upstream nbcrm { server 127.0.0.1: 8000; server { listen 80; server_name www.xuexue.com; # 将nginx入口的请求,直接反向代理uwsgi location / { uwsgi_pass nbcrm; include /opt/nginx1-12/conf/uwsgi_params; #通过nginx出路nbcrm的静态文件 location /static { alias /opt/static/; } } } }
15,更改uwsgi.ini,指明socket连接,结合uwsgi和nginx
- 如果已经配置了nginx,请用socket连接
- socket = 0.0.0.0:8000
16,启动uwsgi.ini
- uwsgi --ini uwsgi.ini
- 启动nginx
- ./nginx
17,配置supversior ,管理uwsgi进程(这里得先退出虚拟环境,安装supvervisor)
- 安装easy_install,python2的软件包管理工具,如果有了可以忽略
- yum install python-setuptools
- 安装软件
- easy_install supervisor
- 使用supervison命令,常用命令如下:
- echo_supervisord_conf > /etc/supervisord.conf
- 修改配置文件,添加任务,按照自己的机器环境修改此命令
- [program:xuexue] # 作用域
- # 添加命令变量启动命令就而胡思这个
- command = /root/#/Envs/nbcrm/bin/uwsgi --ini/opt/NB_crm/uwsgi.ini
- # 自动启动uwsgi,挂了之后自动加载
- autorestart=true
- 启动supvervisord服务,启动uwsgi,服务端命令,用于启动这个服务
- supervisord -c /etc/supervisord.conf
- 通过命令管理uwsgi
- uwsgi直接回车,进入交互式管理模式
- 也可以通过命令交互式的管理uwsgi
- supervisorctl start xuexuecrm
- supervisorctl stop xuexuecrm
- supervisorctl status xuexuecrm