新的项目部署

一.首先准备

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

前端代码,vue代码,

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

mysql,redis 购物车订单信息,supervisor 进程管理工具

环境准备

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

注意,解压时 需要将 /07-luffy_project_01 下的 /07-luffy_project_01 删掉在进行以下操作

输入npm install

npm run build

这两条都正确配置之后,就会生成一个 dist 静态文件目录,整个项目的前端内容和index.html都在这里了

注意,在进行解压后,需要将所有的文件默认ip 127.0.0.1 改成 当前的本地ip,否则会拒绝访问

在 /opt/luffy/07-luffy_project_01/src/restful/api 通过sed "s/127.0.0.1/192.168.125.129/g"  api 即可

5.等待nginx加载这个 dist文件夹

8.部署后端代码所需的环境

1.激活虚拟环境

workon s15vuedrf

2.通过一条命令,导出本地的所有软件包依赖

pip3 freeze > requirements.txt  #这不没有可忽略,直接手动创建文件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

3.将这个requirements.txt 传至到服务器,在服务器的新虚拟环境中,安装这个文件,就能安装所有的软件包了

pip3 install -r requirements.txt

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

#这里启动django时,需要创建一个django.py文件验证,

#验证固定格式

uwsgi --http 默认端口号 --module 项目名称.wsgi.py #项目名称时wsgi.py的上一级

--module 指定找到django项目的wsgi.py文件

  5.使用uwsgi的配置文件,启动项目

 1.创建一个uwsgi.ini配置文件,写入参数信息

 touch uwsgi.ini

 1                 [uwsgi]
 2                 # Django-related settings
 3                 # the base directory (full path)
 4                 #指定项目的绝对路径的第一层路径!!!!!!!!!!!!!!!!!!!!!!!!
 5                 chdir           = /opt/s15vuedrf/luffy_boy/
 6                 # Django's wsgi file
 7                 #  指定项目的 wsgi.py文件!!!!!!!!!!!!
 8                 #  写入相对路径即可,这个参数是以  chdir参数为相对路径
 9                 module          = luffy_boy.wsgi
10 
11                 # the virtualenv (full path)
12                 # 写入虚拟环境解释器的 绝对路径!!!!!!
13                 home            = /root/Envs/s15vuedrf
14                 # process-related settings
15                 # master
16                 master          = true
17                 # maximum number of worker processes
18                 #指定uwsgi启动的进程个数                
19                 processes       = 1
20 
21                 #这个参数及其重要!!!!!!
22                 #这个参数及其重要!!!!!!
23                 #这个参数及其重要!!!!!!
24                 #这个参数及其重要!!!!!!
25                 # the socket (use the full path to be safe
26                 #socket指的是,uwsgi启动一个socket连接,当你使用nginx+uwsgi的时候,使用socket参数
27                 socket          = 0.0.0.0:8000
28 
29                 #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数
30                 #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数
31                 #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数
32                 #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数
33                 #这个参数是uwsgi启动一个http连接,当你不用nginx只用uwsgi的时候,使用这个参数
34                 #http  =  0.0.0.0:8000
35 
36                 # ... with appropriate permissions - may be needed
37                 # chmod-socket    = 664
38                 # clear environment on exit
39                 vacuum          = true

我的int

[uwsgi]
# Django-related settings
# the base directory (full path)
chdir           = /opt/luffy/luffy_boy
# Django's wsgi file
module          = luffy_boy.wsgi
# the virtualenv (full path)
home            = /root/Envs/city
# process-related settings
# master
master          = true
# maximum number of worker processes
processes       = 1
# the socket (use the full path to be safe
socket          = 1.0.0.0:9000
# clear environment on exit
#http  =  0.0.0.0:8000
vacuum          = true
#后台运行uwsgi
#daemonize=yes
~                                                                                                          
~                  

6.使用uwsgi配置文件启动项目

uwsgi --ini  uwsgi.ini

这个时候也会启动项目后端,

注意,若是启动不了,把uwsgi进程关掉重启,有可能占:8000端口

若是提示没有django模块,重新创建一个虚拟机,只需重新下载requirements.txt 下的环境配置

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项目的 命令 G

vim /etc/supervisor.conf

直接到最底行,写入以下配置

[program:s15luffy] #名字无所谓

command=/root/Envs/s15vuedrf/bin/uwsgi --ini /opt/s15vuedrf/luffy_boy/s15drf/uwsgi.ini

[program:s15luffy]
command= /opt/python3.6.5/bin/uwsgi --ini  /opt/luffy/uwsgi.ini
#command=后接uwsgi 的pwd 通过which uwsgi 获取  --ini
#第二个是创建的uwsgi.ini 绝对路径

5.启动supervisord服务端,指定配置文件启动

supervisord -c /etc/supervisor.conf

6.通过supervisorctl管理任

supervisorctl -c /etc/supervisor.conf

注意,在启动时需要将uwsgi进程关闭,在杀死/supervisor的进程,再重启,uwsgi不和与supervisor一起

7.supervisor管理django进程的命令如下 supervisorctl直接输入命令会进入交互式的操作界面

stop s15luffy

start s15luffy

status s15luffy

8.启动luffy的后端代码

注意:其实配置supervisor后端管理是极大方便了启动后端项目并管理的作用

配置nginx步骤如下

1.编译安装nginx

2.nginx.conf配置如下

#第一个server虚拟主机是为了找到vue的dist文件, 找到路飞的index.html

 server{
      listen   80;       #浏览器vue默认80断后,访问域名直接默认显示界面
      server_name  192.168.125.129;#ip地址
      location /{
          # deny   192.168.125.*/;
#当请求来自于 192.168.13.79/的时候,直接进入以下location,然后找到vue的dist/index.html
           root   /opt/luffy/07-luffy_project_01/dist; #vue的文件
           index  index.html;
            
}           
            
            
           

}             
      
#由于vue发送的接口数据地址是 192.168.13.79:8000  我们还得再准备一个入口server
    server {
        listen       8000; 
        server_name  192.168.125.129; 
#当接收到接口数据时,请求url是 192.168.13.79:8000 就进入如下location
        #charset koi8-r;
    
        #access_log  logs/host.access.log  main;
    
        location / {
            uwsgi_pass 192.168.125.129:9000;                         #这里是nginx将请求转发给  uwsgi启动的 9000端口

            include /opt/nginx112/conf/uwsgi_params;        # include  就是一个“引入的作用”,就是将外部一个文件的参数,导入到当前的nginx.conf中生效
            #root   /opt/myserver/oumei;
            #index  index.html;
        }

 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

原文地址:https://www.cnblogs.com/zhangqing979797/p/10227616.html