Windows服务器,通过Nginx部署VUE+Django前后端分离项目
目录
- 基本说明
- 安装 Nginx
- 部署 VUE 前端
- 部署 Django 后端
- Django admin 静态文件(CSS,JS等)丢失的问题
1. 基本说明
本文介绍了在 windows 服务器下,通过 Nginx 部署 VUE + Django 前后端分离项目。本项目前端运行在 80 端口,服务器端运行在 8000 端口。因此本项目使用 Django 的 runserver 命令进行部署,基本能满足小型使用需求。
由于 Nginx 多在 Linux 服务器下使用,少有博客介绍其 windows 下使用规则。此外,Django 部署多用 uWSGI,但经过实测 windows 下先无法正常使用。并且经过本人实测目前几乎没有可以满足本人需求的博文。基于以上考虑,因此写下此博客,方便大家进行基本部署。
2. 安装 Nginx
2.1 下载
Nginx 是一个 Web 服务器和方向代理服务器,简而言之,Nginx监听请求,然后根据配置中的规则(2.2中讲)执行不同的操作。
进入 Nginx 官网 https://nginx.org/en/index.html
点击右侧 download
链接
随后选择版本,我选择了图中红框中版本
下载后将其放入服务器中想要的文件夹并解压即可,文件夹中内容如图所示
点击执行 Nginx.exe,随后在浏览器中访问 localhost,页面展示如下则表示安装成功。
下面为 Nginx 操作命令,在 终端 中,进入 Nginx 文件夹路径
# 启动 Nginx
nginx
start nginx
# 结束 Nginx
nginx -s stop
# 或在任务管理器中结束 Nginx 任务
2.2 配置
当前,我的程序在本机运行时,访问前端地址为 localhost:3000 , 后端地址为 localhost:8000。我想将前后端分别在服务器中部署,前端运行在 80 端口,后端运行在 8000 端口。目前有了 Nginx 这个服务器,因此我们在访问网站时要通过Nginx监听所有请求,然后根据规则分别进行转发。因此,我通过 Nginx 监听 80 端口,如果有人访问服务器的 80 端口,那么 Nginx 将让其访问我的前端程序。
打开文件夹中 conf/nginx.conf 文件,通过记事本等工具打开,在 http 的 server 下进行如下配置。
http {
... # 这里不进行修改
server {
listen 80; # 监听 80 端口
server_name 192.168.50.10; # 输入服务器 ip,我这里为内网 ip
location / {
root html;
index index.html index.htm; # 这里默认为此配置,表示当有人访问 服务器 80 端口的 / 根目录,那么 Nginx 将在 html 文件夹中寻找 index.html, index.htm 文件进行展示,也可以根据自己实际情况进行修改
# 如果 vue 的路由模式是 history,一定要加上下面这句话
try_files $uri $uri/ /index.html;
}
}
}
3. 配置 VUE 前端
我使用了 axios 发起请求,请求地址为 http://localhost:8000/api/
,现在部署到服务器后,所有请求通过 Nginx进行转发,因此前端并不直接访问 8000 端口,而是通过 Nginx 进行转发,因此将 axios 请求地址改为 http://192.168.50.10/api/
。这里修改为你的服务器地址,去掉端口号。
随后在 终端 中执行一下命令打包前端文件
npm run build
执行结束后,在前端项目根目录自动生成 dist 文件夹,将里面内容全部复制到 服务器 Nginx 文件夹的 html 文件夹中。确保 Nginx 处于启动状态,浏览器访问 192.168.50.10 (这里为你服务器ip),如正确出现 前端项目 则表示 vue 前端配置成功。(但是目前还不能进行前后端通信,因为我们把前端的请求8000端口改成了80端口,但是目前我们还没有配置,因此要进行如下配置才可以,在将Django后端配置结束以后,再进行如下配置也可以)
在 conf/nginx.conf 文件中进行如下配置。
location / {
... # 上面配置的内容
}
location /api/ {
add_header Access-Control-Allow-Origin *;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8000; # Nginx 监听到请求 api后,将请求转发给 localhost的8000端口,因为 Django后端也要部署到这台服务器上,所以是 localhost,这样可以减少用户请求次数,加快网站访问速度。(我实测速度是有一定提升)
}
此外,如果前端程序中存在一些需要访问的文件(我的程序为论文检索系统,在前端保留了论文pdf文件,存储在static文件夹中),那么在 conf/nginx.conf 文件中进行如下配置。
location / {
... #上面配置内容
}
location /static/ { # 这里为你的需要访问文件的访问路径,我的文件访问路径是 http://192.168.50.10/static/papers/XXX.pdf,我的文件存储在了 static/papers/XXX.pdf,并且一同复制到了 html 文件夹中。
alias D:/Web/nginx-1.24.0/html/static/; # 这里为服务器中 html 内,你的文件的存储路径。
try_files $uri $uri/;
}
4. 配置 Django 后端
4.1 安装依赖
在开发电脑上,终端 进入 Django 后端程序路径,执行pip freeze > requirements.txt
,生成所需的依赖文件。
随后将 Django 后端程序复制到服务器中合适路径,在终端中执行 pip3 install -r requirements.txt
,在服务器中安装依赖。
4.2 部署
进入 Django 后台程序中的 settings.py
进行如下修改
DEBUG = False
ALLOWEDD_HOST = ['*']
DATABASES = {
"default": {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'paper_web', # 服务器数据库名
'USER': 'root', # 服务器数据库用户名
'PASSWORD': 'root', # 服务器数据库密码
'HOST': '127.0.0.1',
'PORT': '3306'
}
}
随后在 终端 中执行(进入Django 后台程序目录)
python manage.py runserver 0.0.0.0:8000
至此,配置基本结束,通过浏览器访问 服务器ip,即可进行正常操作。
5. Django admin 静态文件(CSS,JS等)丢失的问题
Django 自带一个 admin 管理后台,直接通过浏览器访问 192.168.50.10:8000/admin/:
时,会出现样式丢失的问题,如图所示
因此要执行以下配置。
在 服务器的 Django 的 settings.py 中,新增以下配置
STATIC_ROOT = "D:/Web/nginx-1.24.0/html/static/static/" # 这里为你的服务器中 Nginx 的路径,应在 html 文件夹下的 static 文件夹,但是我的static 文件夹存了论文不为空,因此我在 static 文件夹中新建了文件夹 static
随后在终端中执行
python manage.py collectstatic # 将 admin 样式复制到指定目录
将 html/static/static 文件夹的 admin 文件夹复制到 html/static 文件夹中。
随后在 Nginx 的 conf/nginx.conf 文件中进行如下配置。
location /api/ {
... # 以上配置内容
}
location /admin/ {
add_header Access-Control-Allow-Origin *;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8000;
}
location /static/admin/ {
alias D:/Web/nginx-1.24.0/html/static/admin/; # 这里为 admin文件夹所在位置
try_files $uri $uri/;
}
location /static/ {
... # 以上配置内容
}
配置结束后,重启 Nginx 服务,在浏览器中访问 192.168.50.10/admin/
,可以发现 Django admin 样式又回来了。
6. 总结
因为 网上几乎没有这种部署情况,而且对于Django admin 样式丢失的方法,我尝试过均没有什么效果,因此我写下这篇文章,希望对有相似情况的朋友有一定帮助。
以上就为我的简单部署情况,因为是单位内部使用,并且仅有 windows 服务器,所以只能进行以上操作。
如果大家遇到什么我未提到的问题,可以与我联系,我们共同解决。
如有未尽之处,还请见谅。
Windows服务器,通过Nginx部署VUE+Django前后端分离项目的更多相关文章
- docker-compose 部署 Vue+SpringBoot 前后端分离项目
一.前言 本文将通过docker-compose来部署前端Vue项目到Nginx中,和运行后端SpringBoot项目 服务器基本环境: CentOS7.3 Dokcer MySQL 二.docker ...
- 基于Vue的前后端分离项目实践
一.为什么需要前后端分离 1.1什么是前后端分离 前后端分离这个词刚在毕业(15年)那会就听说过,但是直到17年前都没有接触过前后端分离的项目.怎么理解前后端分离?直观的感觉就是前后端分开去做,即功 ...
- Django前后端分离项目部署
vue+drf的前后端分离部署笔记 前端部署过程 端口划分: vue+nginx的端口 是81 vue向后台发请求,首先发给的是代理服务器,这里模拟是nginx的 9000 drf后台运行在 9005 ...
- 【转】python+django+vue搭建前后端分离项目
https://www.cnblogs.com/zhixi/p/9996832.html 以前一直是做基于PHP或JAVA的前后端分离开发,最近跟着python风搭建了一个基于django的前后端分享 ...
- python+django+vue搭建前后端分离项目
以前一直是做基于PHP或JAVA的前后端分离开发,最近跟着python风搭建了一个基于django的前后端分享项目 准备工作:IDE,[JetBrains PyCharm2018][webpack 3 ...
- 从零开始搭建django前后端分离项目 系列一(技术选型)
前言 最近公司要求基于公司的hadoop平台做一个关于电信移动网络的数据分析平台,整个项目需求大体分为四大功能模块:数据挖掘分析.报表数据查询.GIS地理化展示.任务监控管理.由于页面功能较复杂,所以 ...
- 《论vue在前后端分离项目中的实践之年终总结》
我是2014年的时候开始了解知道的vue,当时vue还不太成熟,想用但是又怕自己hold不住,况且那时候vue还没有成熟的(路由.验证.ui组件)插件,社区也是不温不火的,再说也没有合适的机遇让我去项 ...
- 云计算:Ubuntu下Vue+Springboot前后端分离项目部署(多节点)
一.机器准备 首先准备三台机器: 我是一台WINDOWS系统主机,在WINDOWS里的 VMware 中安装两台Ubuntu系统虚拟机 如果你的虚拟机只有 CentOS,可以参考这篇文章:https: ...
- luffy项目搭建流程(Django前后端分离项目范本)
第一阶段: 1.版本控制器:Git 2.pip安装源换国内源 3.虚拟环境搭建 4.后台:Django项目创建 5.数据库配置 6.luffy前 ...
- 从零开始搭建django前后端分离项目 系列二(项目搭建)
在开始项目之前,假设你已了解以下知识:webpack配置.vue.js.django.这里不会教你webpack的基本配置.热更新是什么,也不会告诉你如何开始一个django项目,有需求的请百度,相关 ...
随机推荐
- valgrind 配合 gdb 调试程序
在实际研发过程中,可能会遇到过这样的问题:测试通过 valgrind 验证当前代码存在变量未初始化的问题,但仅通过 valgrind 测试报告,研发无法确认具体的应用场景.本文将通过 valgrind ...
- 【技术积累】Docker部署笔记
服务器环境搭建 nacos镜像 使用宝塔Docker管理器直接拉起nacos环境并运行 注意:在同一台服务器中,nacos只对内网才能注册,图中172.17.0.2是内网地址,在多台服务器中需要跨ip ...
- 9、Mybatis之动态SQL
9.1.环境搭建 9.1.1.创建新module 创建名为mybatis_dynamicSQL的新module,过程参考5.1节 9.1.2.创建Emp实体类 package org.rain.myb ...
- 在.NET Framework中使用RocketMQ(阿里云版)实战【第一章】
章节 第一章:https://www.cnblogs.com/kimiliucn/p/17662052.html 第二章: 作者:西瓜程序猿 主页传送门:https://www.cnblogs.com ...
- 程序员视角下的API数据接口对接指南
在当今互联网时代,许多应用程序和网站都需要使用第三方的API接口来获取数据.API(Application Programming Interface)允许不同的应用程序之间进行数据交互,从而提高 ...
- C++算法之旅、06 基础篇 | 第三章 图论
常用代码模板3--搜索与图论 - AcWing DFS 尽可能往深处搜,遇到叶子节点(无路可走)回溯,恢复现场继续走 数据结构:stack 空间:需要记住路径上的点,\(O(h)\). BFS使用空间 ...
- 如何对MongoDB进行测试
一.环境搭建 关于环境搭建,最好的搭建方式,当然是脚本一键式搭建 我这里是centos6 x64版本的linux上进行构建,这个linux版本现在应该是大部分的主流服务器的标配版本 下面是安装脚本的编 ...
- Windows 某些软件显示"口口"解决办法
和乱码不同,文字变成"口口",一般是语言环境出错了. 解决办法 开始->控制面板->区域 (时钟.语言和区域)->区域:更改设置->管理->非 Uni ...
- 【krpano】KRPano测试开发专用浏览器
KRPano技术解密网站:http://www.krpano.tech 在开发KRPano项目时候,每次测试时均需要打开测试服务器,或者上传到空间中才能进行测试,十分不方便. 因此本站提供了免费的KR ...
- 文心一言 VS 讯飞星火 VS chatgpt (99)-- 算法导论9.3 5题
五.用go语言,假设你已经有了一个最坏情况下是线性时间的用于求解中位数的"黑箱"子程序.设计一个能在线性时间内解决任意顺序统计量的选择问题算法. 文心一言: 为了在线性时间内解决任 ...