• 项目部署


    技术栈:

      python3

      uwsgi  wsgi(web服务网关接口,就是一个实现了python web应用的协议)

      virtualenvwrapper

      后端代码

      vue的代码

      nginx (一个是nginx对静态文件处理的优秀性能,一个是nginx的反向代理功能,以及以及nginx的默认80端口,访问nginx的80端口,就能反向代理到应用的8000端口)

      mysql

      redis  购物车订单信息

      supervisor

    1.部署环境准备,准备python3和虚拟环境解释器,virtualenvwrapper

    1.部署环境准备,准备python3和虚拟环境解释器,virtualenvwrapper 
    
        pip3 install -i https://pypi.douban.com/simple virtualenvwrapper  
    
    2.修改python3的环境变量,写入到/etc/profile中
    
    PATH=/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/opt/ruby/bin/:/root/bin
    
    3.修改~/.bashrc 
    
    写入变量
    
    4.新建一个虚拟环境  s15vuedrf 
    
    mkvirtualenv  s15vuedrf 
    
    5.准备前后端代码
    
    wget https://files.cnblogs.com/files/pyyu/luffy_boy.zip 
    
    wget https://files.cnblogs.com/files/pyyu/07-luffy_project_01.zip
    
    如果代码在本地,传到服务器 使用 lrzsz 和xftp工具
    
    
    
    6.解压缩代码
    
    unzip 解压
    
    unzip luffy_boy.zip 
    
    unzip 07-luffy_project_01.zip
    
    7.从vue前端代码搞起 
    
        1.准备node打包环境
    
        wget https://nodejs.org/download/release/v8.6.0/node-v8.6.0-linux-x64.tar.gz
    
        2.解压缩node包,配置环境变量,使用npm和node命令
    
        3.检测node和npm
    
        node -v 
    
        npm  -v 
    
        4.安装vue项目所需的包
    
        cd /opt/s15vuedrf/07-luffy_project_01
    
        输入npm install  
    
            npm run build  
    
        这两条都正确配置之后,就会生成一个 dist 静态文件目录,整个项目的前端内容和index.html都在这里了
    
        5.等待nginx加载这个 dist文件夹
    
        
    
        
    
    8.部署后端代码所需的环境
    
        1.激活虚拟环境
    
            workon s15vuedrf 
    
        2.通过一条命令,导出本地的所有软件包依赖 
    
            pip3 freeze >  requirements.txt 
    
        3.将这个requirements.txt 传至到服务器,在服务器的新虚拟环境中,安装这个文件,就能安装所有的软件包了
    
            pip3 install -r  requirements.txt   
    
            
    
            这个文件内容如下:项目所需的软件包都在这里了
                [root@web02 opt]# cat requirements.txt
                certifi==2018.11.29
                chardet==3.0.4
                crypto==1.4.1
                Django==2.1.4
                django-redis==4.10.0
                django-rest-framework==0.1.0
                djangorestframework==3.9.0
                idna==2.8
                Naked==0.1.31
                pycrypto==2.6.1
                pytz==2018.7
                PyYAML==3.13
                redis==3.0.1
                requests==2.21.0
                shellescape==3.4.1
                urllib3==1.24.1
                uWSGI==2.0.17.1
            
        4.准备uwsgi 支持高并发的启动python项目(注意uwsgi不支持静态文件的解析,必须用nginx去处理静态文件)
            1.安装uwsgi 
             pip3 install -i https://pypi.douban.com/simple uwsgi
        
            2.学习uwsgi的使用方法
                通过uwsgi启动一个python web文件
                uwsgi --http :8000 --wsgi-file   s15testuwsgi.py
                        --http 指定http协议 
                        --wsgi-file  指定一个python文件
                
                通过uwsgi启动django项目,并且支持热加载项目,不重启项目,自动生效 新的 后端代码
                
                uwsgi --http  :8000 --module s15drf.wsgi    --py-autoreload=1
            
                        --module 指定找到django项目的wsgi.py文件
    
                        
    
        5.使用uwsgi的配置文件,启动项目
                1.创建一个uwsgi.ini配置文件,写入参数信息
                    touch uwsgi.ini 
                                        
                        [uwsgi]
                        # Django-related settings
                        # the base directory (full path)
                        #指定项目的绝对路径的第一层路径!!!!!!!!!!!!!!!!!!!!!!!!
                        chdir           = /opt/s15vuedrf/luffy_boy/
        
                        # Django's wsgi file
                        #  指定项目的 wsgi.py文件!!!!!!!!!!!!
                        #  写入相对路径即可,这个参数是以  chdir参数为相对路径
                        module          = luffy_boy.wsgi
        
                        # the virtualenv (full path)
                        # 写入虚拟环境解释器的 绝对路径!!!!!!
                        home            = /root/Envs/s15vuedrf
                        # process-related settings
                        # master
                        master          = true
                        # maximum number of worker processes
                        #指定uwsgi启动的进程个数                
                        processes       = 1
        
                        #这个参数及其重要!!!!!!
                        #这个参数及其重要!!!!!!
                        #这个参数及其重要!!!!!!
                        #这个参数及其重要!!!!!!
                        # the socket (use the full path to be safe
                        #socket指的是,uwsgi启动一个socket连接,当你使用nginx+uwsgi的时候,使用socket参数
                        socket          = 0.0.0.0:9000
        
                        #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数
                        #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数
                        #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数
                        #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数
                        #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数
                        #http  =  0.0.0.0:8000
        
                        # ... with appropriate permissions - may be needed
                        # chmod-socket    = 664
                        # clear environment on exit
                        vacuum          = true
                        
        6.使用uwsgi配置文件启动项目
        uwsgi --ini  uwsgi.ini 

    supervisor进程管理工具

    1.将linux进程运行在后台的方法有哪些
    
            第一个,命令后面加上 &  符号
    
            python  manage.py  runserver & 
    
            
    
            第二个 使用nohup命令
        
            第三个使用进程管理工具
    
    2.安装supervisor,使用python2的包管理工具 easy_install ,注意,此时要退出虚拟环境!!!!
    
    2.安装supervisor,使用python2的包管理工具 easy_install ,注意,此时要退出虚拟环境!!!!
    
    2.安装supervisor,使用python2的包管理工具 easy_install ,注意,此时要退出虚拟环境!!!!
    
    如果没有命令,使用以下命令,安装
    
    yum install python-setuptools
    
    easy_install supervisor
    
    3.通过命令,生成一个配置文件,这个文件就是写入你要管理的进程任务
    
    echo_supervisord_conf > /etc/supervisor.conf
    
    4.编辑这个配置文件,写入操作  django项目的 命令 
    
    vim /etc/supervisor.conf  
    
    直接到最底行,写入以下配置
    
    [program:s15luffy]
    
    command=/root/Envs/s15vuedrf/bin/uwsgi  --ini  /opt/s15vuedrf/luffy_boy/s15drf/uwsgi.ini
    
    5.启动supervisord服务端,指定配置文件启动
    
    supervisord -c  /etc/supervisor.conf
    
    6.通过supervisorctl管理任务
    
    supervisorctl -c /etc/supervisor.conf 
    
    7.supervisor管理django进程的命令如下
    
    supervisorctl直接输入命令会进入交互式的操作界面
    
    stop s15luffy 
    
    start s15luffy 
    
    status s15luffy 
    
    8.启动luffy的后端代码

    配置nginx步骤

    1.编译安装nginx
    
    2.nginx.conf配置如下
    
    第一个server虚拟主机是为了找到vue的dist文件, 找到路飞的index.html
    
    server {
    
            listen       80;
    
            server_name  192.168.13.79;
    
            
    
            #当请求来自于 192.168.13.79/的时候,直接进入以下location,然后找到vue的dist/index.html 
            location / {
                root   /opt/s15vuedrf/07-luffy_project_01/dist;
                index  index.html;
            }
            
        }
    
    由于vue发送的接口数据地址是 192.168.13.79:8000  我们还得再准备一个入口server
    
    server {
    
        listen 8000;
    
        server_name  192.168.13.79;
    
        
    
        #当接收到接口数据时,请求url是 192.168.13.79:8000 就进入如下location
        location /  {
            #这里是nginx将请求转发给  uwsgi启动的 9000端口
            uwsgi_pass  192.168.13.79:9000;
            # include  就是一个“引入的作用”,就是将外部一个文件的参数,导入到当前的nginx.conf中生效
            include /opt/nginx112/conf/uwsgi_params;
        }
    
    }
    
    3.启动nginx 
    
    ./sbin/nginx  直接启动 
    
    此时可以访问 192.168.13.79  查看页面结果

    错误:vue+nginx页面刷新404错误解决方案

    参考地址:https://router.vuejs.org/zh/guide/essentials/history-mode.html

    1.修改nginx.conf,给前端server添加一行try_files $uri $uri/ /index.html;

    这里的try_files相当于在服务端增加一个覆盖所有情况的候选资源:如果 URL 匹配不到任何静态资源,则应该返回同一个 index.html 页面

    复制代码
      server{
           listen 80;
           server_name 192.168.119.128;
           location / {
                root /opt/vuedrf/07-luffy_project_01/dist;
                index index.html ;
                try_files $uri $uri/ /index.html;
            }
      }
    复制代码

    2.此时,你的服务器就不再返回 404 错误页面,因为对于所有路径都会返回 index.html 文件;如果路由不存在则会返回空页面,不会报错. 为了避免这种情况,你应该在 Vue-router里面覆盖所有的路由情况,然后再给出一个NotFound页面

    复制代码
    (1)vue components里创建一个NotFound页面:
    
      <template>
          <h1>页面不存在</h1>
      </template>
    
      <script>
          export default {
              name: "NotFound"
          }
      </script>
      <style scoped>
      </style>
    
    (2)vue-router里:
      # 引入NotFound页面
      import NotFound from '@/components/NotFound/NotFound'
      # 在routes列表最后添加NotFound捕获所有未定义页面
      {
        path: "*",
        name:'NotFound',
        component:NotFound,
      }
    复制代码

    3.重新生成dist文件,启动nginx

  • 相关阅读:
    JS和PYTHON中数据类型比较
    http状态码
    ffmpeg architecture(上)
    降低数值精度以提高深度学习性能
    IaaS、PaaS 和 SaaS:云服务模型概述
    英特尔Intel® Arria® 10 FPGA加速器设计
    基于至强® 平台的内存数据库解决方案
    MLPerf结果证实至强® 可有效助力深度学习训练
    如何从数据角度为人工智能部署做好数据准备
    英特尔内存革新助平安云 Redis 云服务降本增效
  • 原文地址:https://www.cnblogs.com/qq849784670/p/10235404.html
Copyright © 2020-2023  润新知