博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
部署 Nginx +uwsgi+centos7+django+supervisor 项目
阅读量:5284 次
发布时间:2019-06-14

本文共 5352 字,大约阅读时间需要 17 分钟。

部署CRM项目

前言

  • 使用软件

    1. nginx

      1. 使用nginx是为了它的反向代理功能,项目会通过Django+uWSGI+Nginx进行服务器线上部署。
    2. uWSGI

      1. python web服务器开发使用WSGI协议(Web Server Gateway Interface)

        python web项目默认会生成一个wsgi.py文件,确定好应用模块。

        生产环境中使用的是uWSGI,实现了WSGI所有接口,C语言编写,效率很高的web服务器。

        uWSGI是一个全功能的HTTP服务器,实现了WSGI协议、uwsgi协议、http协议等。它要做的就是把HTTP协议转化成语言支持的网络协议。比如把HTTP协议转化成WSGI协议,让Python可以直接使用。

    3. centos7

      1. 打包项目CRM文件夹,压缩文件
      2. 通过xftp、scp、lrzsz等上传文件至Centos服务器
    4. CRM项目文件

    5. virtualenv

      1. 构建一个干净,隔离的python解释器环境,防止软件依赖,冲突等问题,建议使用。
    6. supervisor

      1. Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

项目部署

准备工作

1 将项目上传到服务器上

  1. 方法一:使用xftp工具,进项上传文件夹,将项目代码,传到linux服务器当中

    1. 这个页面操作,实在不会百度
  2. 方式2: 使用scp从本地将文件上传到linux服务器中

    scp -r  本地文件夹  远程用户名@远程ip:远程文件夹/

2 将mysql数据迁移到服务器数据库

  • 服务器端安装mysql(mariadb)数据库链接:https://www.cnblogs.com/yuncong/p/10253215.html

  • 数据导入导出

    在linux服务端,mysql,导入knight的数据      1.mysql数据的导出,与导入      这个命令是在linux/windows中敲的      mysqldump -u root -p --all-databases >  knight.dump        2.上传这个数据文件到linux数据库中      3.在linux的mysql,导入这个数据文件      mysql -uroot -p   <   /opt/knight.dump
  • 注意:linux的数据库,需要对root用户设置远程链接的权限

    grant all privileges on *.* to root@'%' identified by 'redhat';# 授权所有的权限,在所有库,所有表  对  root用户在所有的主机上, 权限密码为redhat,   注意是自己设置的密码# 刷新授权表flush privileges;
  • 注意2:linux的防火墙要给关闭,否则windows去链接linux的3306端口可能被拒绝

    centos7默认已经使用firewall作为防火墙了1.关闭防火墙systemctl status firewalld #查看防火墙状态systemctl stop firewalld    #关闭防火墙systemctl disable firewalld#关闭防火墙开机启动systemctl is-enabled firewalld.service#检查防火墙是否启动

1. 激活虚拟python环境

  • 这里使用的是virtualenv进行管理

  • 安装virualenvwrapper工具链接:https://www.cnblogs.com/yuncong/p/10251899.html

    # 创建虚拟环境mkvirtualenv my_django# 激活该虚拟环境workon my_diango
  1. 激活环境后,cd到项目目录下

    • 可以使用pip freeze模块迁移

      • 生成项目依赖模块

        # 在本地pip freeze >requirements.txt
      • 在虚拟环境中

        pip install -r C:\Users\Administrator\requirements.txt# pip install -r 路径
    • 启动django项目

      python3 manage.py runserver 0.0.0.0:8000

      启动项目注意的问题,根据报错进行下载相应的模块,

      项目中settings.py中俩个关键位置记得更改:

      # 这个参数ALLOWED_HOSTS = ['*']# 数据库连接参数DATABASES = {    'default': {        'ENGINE': 'django.db.backends.mysql',        'NAME': "crm",        "HOST": "127.0.0.1",        "PORT": 3306,        "USER": 'root',        "PASSWORD": '123'    }}
    • 启动成功之后退出, 这里只是为了测试项目

2 安装uwsgi

  • 安装

    pip3 install uwsgi
  • 1 通过uwsgi启动django项目(注意这里要在项目目录下)

    uwsgi --http :8000 --module  knight.wsgi
  • 2 使用uwsgi.ini配置文件来启动项目,这个文件要自己创建,随意放在哪,我这里是放在项目目录中的

    # 新建uwsgi.ini touch uwsgi.ini# 查看 ls uwsgi.ini

    编辑uwsgi.ini,注意编辑中的路径之类的数据要进行更改

    [uwsgi]  # Django-related settings  # the base directory (full path)  #写上项目的绝对路径    chdir           = /opt/knight  # Django's wsgi file  #填写找到django的wsgi文件,填写相对路径,以chdir参数为相对路径  module          = knight.wsgi  # the virtualenv (full path)  #填写虚拟环境的绝对路径  home            = /root/Envs/knight/  # process-related settings  # master  #启动uwsgi主进程  master          = true  # maximum number of worker processes  processes       = 5  #如果你使用了nginx,做反向代理,必须填写socket链接,而不是http参数  # the socket (use the full path to be safe  #socket          = 0.0.0.0:8000  #如果你不用nginx,直接使用uwsgi,运行一个http服务端,就用这个http参数  http = 0.0.0.0:8000  # ... with appropriate permissions - may be needed  # chmod-socket    = 664  # clear environment on exit  vacuum          = true

    指定配置文件启动uwsgi

    uwsgi --ini  uwsgi.ini

    启动之后可以通过网址进行访问了

3 配置nginx

  • 作用: 使用ngixn处理django的静态文件
  1. 设置django的静态文件目录,收集一下

    修改项目中settings.py,写下如下参数

    STATIC_ROOT= '/opt/static'   #该路径根据实际放置
  2. 使用命令收集django的静态文件

    python manage.py collectstatic
  3. 查看django的静态文件收集目录

    ls /opt/static
  4. 配置nginx,进行反向代理,找到uwsgi项目,且配置nginx处理uwsgi的静态文件

    编辑nginx.conf

    server {        listen       80;        #域名qishijd.com        server_name  qishijd.com;           #只要用户访问qishijd.com:80/  就走这个location匹配>,反向代理给uwsgi:        location / {         include    uwsgi_params;         uwsgi_pass  0.0.0.0:8000;                 }         #当用户请求是qishijd.com/static/的时候         #就会进入这个location匹配         #通过alias参数进行路径别名,让nginx去/opt/static底下去找静>态资源         location  /static  {         alias  /opt/static;}    }

    img

  5. 配置完成后启动uwsgi,重启nginx,

注意问题

  1. 在浏览器上输入网址后,数据不加载,可能原因

    #如果你使用了nginx,做反向代理,必须填写socket链接,而不是http参数 # the socket (use the full path to be safe #socket          = 0.0.0.0:8000 #如果你不用nginx,直接使用uwsgi,运行一个http服务端,就用这个http参数 http = 0.0.0.0:8000

    这俩只选一个

  2. 本地域名添加

    在本地编辑vim /etc/hosts# 加载你nginx.conf中这个参数对应的域名# server_name  qishijd.com;  格式为192.168.11.11 qishijd.com# 保存退出

进程管理工具superviosr

  • 注意

    使用python2的模块管理工具,去下载supervisor ,注意此时,退出虚拟环境

    使用python2的模块管理工具,去下载supervisor ,注意此时,退出虚拟环境
    使用python2的模块管理工具,去下载supervisor ,注意此时,退出虚拟环境
    使用python2的模块管理工具,去下载supervisor ,注意此时,退出虚拟环境
    使用python2的模块管理工具,去下载supervisor ,注意此时,退出虚拟环境

  • 安装supervisor

    yum install python-setuptools
  • 安装

    easy_install supervisor
  • 使用supervisor命令,生配置文件

    echo_supervisord_conf   >  /etc/supervisor.conf
  • 在这个配置文件中加入我们想要管理的任务

    vim /etc/supervisor.conf# 在底部写入如下配置#定义一个任务,名字自定义#commnad=参数,定义我们启动项目的命令[program:crm_knight]command=/root/Envs/knight/bin/uwsgi    /opt/knight/uwsgi.inistopasgroup=true     ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程killasgroup=true     ;默认为false,向进程组发送kill信号,包括子进程
  • 通过配置文件启动supervisor服务

    supervisord -c /etc/supervisor.conf
  • 启动了supervisor服务端后,管理任务

    supervisorctl -c /etc/supervisor.conf
  • 任务管理命令如下:有两种,一个是交互式,一个是参数形式

    1. 参数形式

      supervisorctl -c /etc/supervisor.conf stop/start/restart   allsupervisorctl -c /etc/supervisor.conf start crm_knight
    2. 交互式形式

      supervisorctl -c /etc/supervisor.conf

转载于:https://www.cnblogs.com/yuncong/p/10264851.html

你可能感兴趣的文章
vue基础——路由懒加载
查看>>
Oracle sql优化示例
查看>>
sql-向已有数据的表添加约束
查看>>
Angularjs的核心概念
查看>>
通过用户模型,对数据库进行增删改查操作。
查看>>
everything 搜索文件
查看>>
easyui 表单验证validatetype——支持自定义验证
查看>>
iOS-GCD多线程编程详解1
查看>>
Javascript实用方法
查看>>
损坏视频的烦恼
查看>>
网络字节序和主机字节序转换-------- “可交换操作”
查看>>
Python教程[廖雪峰],主要是实践
查看>>
python记录_day03 字符串
查看>>
MarkDown测试
查看>>
led指示灯电路图大全(八款led指示灯电路设计原理图详解)
查看>>
潜水手表的历史
查看>>
aspose.word 使用简单方法
查看>>
私有属性和私有方法
查看>>
java.util.regx Demo
查看>>
react-fetch数据发送请求
查看>>