django+vue前后端分离项目部署

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django+vue前后端分离项目部署相关的知识,希望对你有一定的参考价值。

参考技术A 后端用的drf,使用的是uwsgi+nginx

进入服务器项目文件目录下,我的django项目放在了“/usr/myProjects/”目录下了。在manage.py同级目录下创建uwsgi.ini文件,配置如下:

测试效果命令:

如果访问:xxx.xxx.xxx.xx:8000 成功, 则uwsgi.ini配置成功

我的nginx.conf所在位置是“/etc/nginx/nginx.conf”
配置文件如下:

1、第一行

主要就是给nginx加权限,vue部署后使用history路由时会去掉地址后面的‘#’号,打包部署后不加权限会有bug。
2、如配置所示,有两个Server,分别部署了前端服务,和后端服务,值得注意的是两个Server用的是同一个服务器,监听的端口不同。
3、vue部署需要注意的是反向代理地址:

以及后面的端口问题

4、后端的Server需要注意location中的uwsgi_pass 后面的端口号要和uwsgi.ini中配的相同,否则监听不到

5、后端跨域问题。如果遇到跨域需要自己网上找配置,我的没遇到,可能是因为我在django的settings中配置了跨域。
6、django-suit后台管理样式崩了,需要改,但是api可以正常访问,这个有空再说
7、我开始后台监听的是8008端口,vue前端监听的是80端口,这样前端显示好看。然而问题出现了,虽然后台api可以正常访问,vue的本地开发环境也能正常运行且文字、图片资源均显示正常,但是前端vue打包线上部署后,文字信息显示正常,图片信息缺失8008端口,导致显示不出来。为图方便我选择了前端监听8008端口,后端监听80,部署后显示正常。原因不太清楚///////有空再说吧。
8、不要问我为啥都前后端分离了还部署到一个服务器上?穷,而且只是测试,没必要
9、此文仅适合入门

关于django后台admin(suit)缺失的修改(参考:django中文网: https://www.django.cn/article/show-4.html

在环境中进入项目目录,需要收集css样式,在终端输入命令:

接下来你就回发现static文件中包含了css文件,此时再打开网站,样式显示正常

uWSGI 通过 xxx.ini 启动后会在相同目录下生成一个 xxx.pid 的文件,里面只有一行内容是 uWSGI 的主进程的进程号。

关于uwsgi,进入同届目录下

教训

获取不到环境,那就指定环境

另外:记得重启uwsgi,重启Nginx,实在不行就先把监听的端口kill掉再重启
暴力删端口:fuser -k 80/tcp

netstat -aptn命令行,查看所有开启的端口号

netstat -ntlp | grep 80 查看具体的端口是否使用
ps -ef | grep uwsgi 查看是否有uwsgi端口存在

uwsgi+nginx部署vue+django前后端分离项目

vue部署

把打包好的vue项目 dist上传至服务器/opt文件夹中

nginx配置vue项目

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /opt/dist;
            index  index.html;
        }

    }

如需安装nginx 请移步至 Nginx安装

django部署

上传django包至 /opt目录为例

1.通过命令保证环境的一致性,导出python开发环境的包
pip3 freeze > requirements.txt

激活虚拟环境ipm,在虚拟环境下,安装项目所需的依赖模块(requirements.txt文件上传到与虚拟环境同级的目录)

pip3 install -r requirements.txt

如何使用虚拟环境请移步 虚拟环境配置

uwsgi (Django框架运行依赖wsgi,众多模块实现了wsgi规范,而django框架中默认使用wsigiref模块来实现,他由于性能比较低,所以用于本地开发和测试,而线上部署时需要使用uwsgi来代替)

退出虚拟环境,安装uwsgi

pip3 install uwsgi

在/opt目录下建立文件

vi /opt/uwsgi.ini

配置如下

[uwsgi]
# 项目目录

chdir=/opt/ipm2020
module=ipm2020.wsgi:application
# the virtualenv (虚拟环境的绝对路径)
home = /root/Envs/ipm
#热重载
#touch-reload = /opt/ipm2020
#py-auto-reload = 1
# 指定sock的文件路径
#socket=/root/proj/script/uwsgi.sock
#或者指定地址直接(指定文件路径就是相当于单独写了个配置导入,相当于import导入,可以修改和删除,可维护性高点)
#socket=127.0.0.1:9090
socket=0.0.0.0:9090
#直接做服务器用http模式
; http=0.0.0.0:9500
# 进程个数
workers=1
pidfile=/opt/uwsgi/uwsgi.pid
# 指定静态文件,这个项目中没有,如果你的项目中有静态文件的话按这个目录结构配置
#static-map=/static=/root/proj/
# 启动uwsgi的用户名和用户组
uid=root
gid=root
# 启用主进程
master=true
# 自动移除unix Socket和pid文件当服务停止的时候
vacuum=true
# 序列化接受的内容,如果可能的话
#thunder-lock=true
# 启用线程
enable-threads=true
# 设置自中断时间
#harakiri=30
# 设置缓冲
post-buffering=4096
# 设置日志目录
#daemonize=/opt/uwsgi/uwsgi.log

测试启动uwsgi

/usr/local/python3/bin/uwsgi --ini /opt/uwsgi.ini

 nginx配置

#user  nginx;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;


events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  $remote_addr - $remote_user [$time_local] "$request" 
                      $status $body_bytes_sent "$http_referer" 
                      "$http_user_agent" "$http_x_forwarded_for";

    #access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    gzip on; # 开启Gzip
    


    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /opt/dist;
            index  index.html;
        }

    }
    server {
        listen       8000;
        server_name  localhost;

        location / {
            uwsgi_pass localhost:9090;
            include /usr/local/nginx/conf/uwsgi_params;
        }
        

    }

}

使用Supervisor管理 uwsgi  Supervisor安装

一切配置无误 项目就可以正常运行起来了

以上是关于django+vue前后端分离项目部署的主要内容,如果未能解决你的问题,请参考以下文章

vue+gin前后端分离

nginx部署多个前后端项目

vue+uwsgi+nginx部署前后端分离项目

将前后端分离项目部署至远程服务器

如何在开发时部署和运行前后端分离的JavaWe

Django+Vue前后台分离项目开发