用uwsgi和nginx 部署 django和vue打造的前后端分离项目

前言

由于现在没有彻底掌握nginx的使用,部署起来有点磕磕绊绊,为了防止以后再次需要部署的时候无法快速找到适合的资料,以此文章记录简单的部署步骤。

项目部署环境

  1. ubuntu16.04
  2. python3.6.8
  3. django 3.0.6

部署步骤

  1. uwsgi部署django项目。
  2. nginx部署vue项目。
  3. 配置nginx解决vue前端接口转发。

步骤1

uwsgi部署django项目。

1.更改django的settings.py文件

  • DEBUG=True改为DEBUG=False
  • ALLOWED_HOSTS = ["*"]
    ALLOWED_HOSTS是为了限定请求中的host值,以防止黑客构造包来发送请求。只有在列表中的host才能访问。强烈建议不要使用*通配符去配置,另外当DEBUG设置为False的时候必须配置这个配置。否则会抛出异常。这里暂时以 * 设置,等正式发布之后改成对应的域名。

2.安装uwsgi

pip3 install uwsgi

3.收集静态资源

在django的settings.py中增加如下:

# 静态资源访问的起始url
STATIC_URL = '/static/'
# 指定静态资源所在的目录
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static') ]
# 设置收集静态资源的路径(部署时使用)
STATIC_ROOT = os.path.join(BASE_DIR, 'collect_static/')

然后在项目根目录下(manage.py同级)运行如下命令:

python manage.py collectstatic

4.准备uwsgi的配置文件

假设我项目中的wsgi.py文件的路径如下。

  /home/tk/Project/test_LP100/ThinkCloud/wsgi.py

在项目根目录下创建一个文件 uwsgi.ini并配置uwsgi.ini文件如下:

[uwsgi]
# 监听的端口
http=0.0.0.0:8080# chdir配置项目的根目录
chdir=/home/tk/Project/test_LP100/ThinkCloud# 主应用中的wsgi文件
wsgi-file=ThinkCloud/wsgi.py# 代理静态资源:路径映射
# 单独使用uwsgi时可使用这个路径映射,搭配nginx的话,使用nginx
#static-map=/static=/home/tk/Project/test_LP100/ThinkCloud/collect_static# 启动一个master进程,来管理其余的子进程
master=True
processes = 4
threads = 2# 保存主进程的pid,用来控制uwsgi服务
pidfile=/home/tk/Project/test_LP100/ThinkCloud/uwsgi.pid# 设置后台运行,保存日志
daemonize=/home/tk/Project/test_LP100/ThinkCloud/Logs/uwsgi.log
# deamonize=1  ; 用来配置background运行# 设置每个工作进程处理请求的上限,达到上限时,将回收(重启)该进程。可以预防内存泄漏
max-requests=5000# 服务停止时自动移除unix Socket和pid文件
vacuum=true

5.uwsgi --ini uwsgi.ini 启动uwsgi服务

进入到uwsgi.ini的所在路径中执行uwsgi --ini uwsgi.ini命令启动uwsgi服务,至此django的部署就告一段落。当然如果不进入到配置文件所在目录中也可以在命令中将路径直接写进去也可以。

这个时候可以通过用postman访问一下服务器上配置的后端是否能被访问到来测试一下后端的配置是否成功。

步骤二

nginx部署vue项目

  1. 先通过npm run build将vue项目打包。打包完成后会在前端项目的根目录里出现一个dist文件夹。

  2. 将第一步打包产生的dist文件夹放入服务器中想放的位置。

  3. 安装nginx

    sudo apt update
    sudo apt install nginx
    
  4. 启动nginx查看是否安装成功

    systemctl start nginx
    

    用命令启动nginx服务后,访问服务器地址,应该可以看到 Welcome to nginx!字样。这表示安装和启动nginx服务成功。

  5. 关于sites-available和sites-enabled的介绍

    在/etc/nginx路径下会有两个文件夹。一个是sites-available和sites-enabled。

    sites-available里面放的是一些nginx的配置文件,默认只有一个default。在sites-enabled中也有一个default,是sites-available中的default的软链接。放在sites-enabled中的文件是表示启用的配置文件,可以在/etc/nginx/nginx.conf文件中看到有如下的一行配置,可以看到sites-enabled中的所有配置文件都被引入进来了。

    include /etc/nginx/sites-enabled/*;
    
  6. 开始配置

    我们首先将sites-enabled中的default文件删除(因为只是一个软链接如果有需要可以再建立一个)。

    在sites-available中创建一个文件,例如叫lp100.conf。

    配置内容如下:

    server {# 监听80端口listen 80;# 这里可以暂时先忽略server_name  test.com;  # 域名或IP# 当访问 http://ip地址/ 的时候# 这里是配置的前端项目location / {# root这里写打包好的前端项目的dist文件夹的路径(包括dist)root  /home/tk/Project/test_LP100/ThinkCloud/dist;# hash模式只配置访问html就可以了index  index.html;# history模式下try_files $uri $uri/ /index.html;}
    }
    
  7. 在sites-enabled中建立一个刚才创建的nginx配置文件的软连接到 sites-enabled文件夹中。

    cd ../sites-enabled
    ln -s ../sites-available/lp100.conf
    
  8. 重启nginx服务,测试vue项目是否部署成功

    systemctl restart nginx
    

    访问 http://[ip地址]:[指定端口],如果能出现前端页面则vue项目部署成功。

步骤三

前端的接口请求转发。

经历了步骤一和步骤二之后,单独访问后端接口和单独访问前端页面都是可行的了,只是前端页面并不能拿到后端接口中的数据,这是为啥呢?因为前端的接口没有转发到后端上呀?本来这个事情在开发的时候是在vue.config.js中配置的,现在在生产环境下,就需要nginx来处理了。

我们重新打开步骤二中的lp100.conf文件,新增配置。这个配置就是和vue项目中的vue.config.js中配置proxy是差不多的,添加完的lp100.conf文件内容如下:

server {# 监听80端口listen 80;# 这里可以暂时先忽略server_name  192.168.4.117;  # 域名或IPcharset     utf-8;# 上传文件大小的限制client_max_body_size 75M;# 静态文件配置location /static {alias /home/tk/Project/test_LP100/ThinkCloud/collect_static;}location / {root /home/tk/Project/test_LP100/ThinkCloud/dist;include /home/tk/Project/test_LP100/ThinkCloud/uwsgi_params;proxy_pass http://0.0.0.0:8080;  # 这里端口必须要和上面uwsgi.ini文件中配置的一样proxy_set_header Host  $host;proxy_set_header X-Forwarded-For  $remote_addr;}
}

配置完成后重启nginx服务即可

注:使用uwsgi --ini uwsgi.ini启动项目时,尽量在虚拟环境里面进行启动sudo  pip install virtualenv  # 安装虚拟环境virtualenv -p /usr/bin/python3.8 venv  # 创建指定的python版本虚拟环境source venv/bin/activate   # 进入虚拟环境deactivate  # 退出虚拟环境

用uwsgi和nginx 部署 django和vue打造的前后端分离项目相关推荐

  1. Django+vue+ElementUi 实现前后端分离项目

    目录 一. 环境搭建 二. Django 2.1 创建项目 2.2 数据库配置 2.3 创建模型并且设计数据库表 Django app :myApp 2.4 创建新增和查询的接口 三.Vue 3.1. ...

  2. django集成vue,实现前后端分离开发

    目前,前后端分离的开发方式越发常见,已成为主要开发方式,那么django作为一个python快速开发中小型web端最常见的框架,django虽然也有自己前端模板,但是毕竟不是很好,而且写在一起,也不符 ...

  3. ASP.NET Core 实战:使用ASP.NET Core Web API 和 Vue.js 搭建前后端分离项目

    一.前言 这几年前端的发展速度就像坐上了火箭,各种的框架一个接一个的出现,需要学习的东西越来越多,分工也越来越细,作为一个 .NET Web 程序猿,多了解了解行业的发展,让自己扩展出新的技能树,对自 ...

  4. php node.js django,Vue.js和Django搭建前后端分离项目示例详解

    本篇文章主要介绍了Django+Vue.js搭建前后端分离项目的示例,具有一定参考价值,有兴趣的可以了解一下 在写这篇文章的时候,顺带学习了一下关于Markdown的使用方法. 笔者是个渣渣,一切都是 ...

  5. Vue2+Node.js前后端分离项目部署到云服务器

    本文参考教程: NodeJS项目部署到阿里云ECS服务器全程详解 - 知乎本文详细介绍如何部署NodeJS项目到阿里云ECS上,以及本人在部署过程中所遇到的问题.坑点和解决办法,可以说是全网最全最详细 ...

  6. (一)专题介绍:移动端安卓手机改造成linux服务器linux服务器中安装软件、部署前后端分离项目实战

    快捷目录 前言 一.涉及到的相关技术简介 二.具体实现过程及踩坑杂谈 1.安卓手机改造成linux系统实现方案 2.改造后的手机Linux中软件的安装 3.手机Linux中安装MySQL5.7踩坑实录 ...

  7. 在Docker 上完成对Springboot+Mysql+Redis的前后端分离项目的部署(全流程,全截图)

    本文章全部阅读大约2小时,包含一个完整的springboot + vue +mysql+redis前后端分离项目的部署在docker上的全流程,比较复杂,请做好心理准备,遇到问题可留言或则私信 目录 ...

  8. Nginx+uwsgi+celery+supervisor部署Django前后端分离项目

    转载 Nginx+uwsgi+celery+supervisor部署Django前后端分离项目 ljmict 0人评论 3887人阅读 2018-08-08 01:29:45 本实验实现了负载均衡.反 ...

  9. 最细致的Spring Boot结合Vue前后端分离项目打包部署步骤(搭配Nginx)

    文章目录 前言 一.环境准备 二.SpringBoot项目打jar包 1.1 使用Maven的package插件打包 1.2 上传至Linux服务器 三.Vue项目打包 1.1 修改后台请求地址 1. ...

最新文章

  1. 【matlab】meshgrid的使用
  2. 滤镜应用——制作彩虹效果
  3. python什么时候进入中国-python诞生于什么时候
  4. 常用对照表之TCP及UDP常见端口参照
  5. 【面试必备】通俗易懂的XGBoost、Transformer、BERT、水波网络原理解析 | 学习小组...
  6. 程序员有必要参加软考吗?大一可以考的编程证书还有哪些
  7. ShardingSphere(八) 分库分表的多种分片策略
  8. HBase 管理,性能调优
  9. indesign教程,如何设置边距和分栏?
  10. 实时控制软件第二次作业
  11. 李学斌:广告的罪恶与救赎
  12. 三天研读《中兴电路设计规范》精华总结
  13. java网上购物系统_基于java的网上购物系统的设计与实现
  14. MySql安装版安装最新教程(附错误解决 )
  15. 拳皇FANS们不得不看的动画
  16. gitter 卸载_最佳的Gitter渠道:数据科学和机器学习
  17. Revit二次开发——常规模型标记随构件旋转
  18. 转录组分析---Hisat2+StringTie+Ballgown使用
  19. 2023年30道经典软件测试面试题,等你来看!
  20. html后代选择器的语法,后代选择器 | Descendant selectors

热门文章

  1. ABP官方文档(四十一)【ASP.NET Core】
  2. 微信小程序 border设置单边框失效解决办法
  3. 别人家的工资!在BAT做三年 普通员工能拿多少?
  4. 香港银行开户哪家门槛低
  5. centos 镜像文件说明
  6. 【unity实战】随机地下城生成1——随机生成地下城初稿(含源码)
  7. 安装M2Crypto
  8. iOS11 和 iPhone X 的适配
  9. iOS 对iPhone X XS XR XS MAX适配
  10. 车载激光雷达ISO国际标准预研工作启动 以中国提案为基础完善框架