项目发布须知

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文件

  1. 启动linux的数据库,创建对应的数据库,密码设置等等
    • create database nb_crm
  2. 更改settings.py文件的相关设置
    • DATABASES= {'default': {
          'ENGINE': 'django.db.backends.mysql',
          'NAME': 'nb_crm', #数据库名
          'HOST': '127.0.0.1',  #这里服务器的ip地址
          'PORT': 3306, #端口
          'USER': 'root', #用户名 
          'PASSWORD': 'redhat123',   #用户密码
         }}
  3. 更改允许主机 
    • ALLOWED_HOSTS=["*"]
  4. 线上关闭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的配置文件启动项目

  1. 手动创建uwsgi.ini文件
    • touch uwsgi.ini
  2. 写入作用域配置
    • [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

12,通过配置文件启动NB_crm(注意到uwsgi不会处理静态文件)

  • uwsgi --ini uwsgi.ini

13,配置django的settings.py,收集所有NB_crm项目锁需的静态文件

  1. # 通过命令,收集整个项目所有的静态文件,放入到/opt/static
    • STATIC_ROOT="/opt/static/"
  2. 执行命令
    • python3 manage.py clooectstatic
  3. 此时的NB_crm的所有的静态文件,都跑到/opt/static下边了

14,配置nginx

  1. 配置一个网站的入口,当用户访问192.168.12.96:80这个web应用时,自动将请求转发给uwsgi,uwsgi处理后,返回给nginx,返回给用户,当请求是192.168.12.96:80的时候,其实访问的是192.16812.96:9999,这是动态请求,因为找到的是uwsgi
  2. 通过nginx处理静态文件
  3. nginx..conf配置如下:# 定义负载均衡池,里面放入uwsgi的地址
  4. 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)

  1. 安装easy_install,python2的软件包管理工具,如果有了可以忽略
    • yum install python-setuptools
  2. 安装软件
    • easy_install supervisor
  3. 使用supervison命令,常用命令如下:
    • echo_supervisord_conf > /etc/supervisord.conf
  4. 修改配置文件,添加任务,按照自己的机器环境修改此命令
    • [program:xuexue]   # 作用域
    • #  添加命令变量启动命令就而胡思这个
    • command = /root/#/Envs/nbcrm/bin/uwsgi --ini/opt/NB_crm/uwsgi.ini
    • # 自动启动uwsgi,挂了之后自动加载
    • autorestart=true
  5. 启动supvervisord服务,启动uwsgi,服务端命令,用于启动这个服务
    • supervisord -c /etc/supervisord.conf
  6. 通过命令管理uwsgi
    • uwsgi直接回车,进入交互式管理模式
  7. 也可以通过命令交互式的管理uwsgi
    • supervisorctl start xuexuecrm
    • supervisorctl stop xuexuecrm
    • supervisorctl status xuexuecrm

 

原文地址:https://www.cnblogs.com/ljc-0923/p/10265323.html