Nest.js 实战 (十五):前后端分离项目部署的最佳实践

☘️ 前言

本项目是一个采用现代前端框架 Vue3 与后端 Node.js 框架 Nest.js 实现的前后端分离架构的应用。Vue3 提供了高性能的前端组件化解决方案,而 Nest.js 则利用 TypeScript 带来的类型安全和模块化优势构建了一个健壮的服务端应用。通过这种技术栈组合,我们不仅实现了快速开发,同时也保证了应用的可维护性和扩展性。

随着项目的开发完成,接下来将详细介绍如何将这个应用部署到生产环境,以便让最终用户能够访问并使用我们的服务。

这里以 1Panel面板 为例,其它的运维平台应该大差不差。

🌳 准备阶段

  • 云服务器: 安装 1Panel面板,并安装后端服务数据库。
  • 域名:完成实名认证,并完成域名备案。
  • SSL 证书:建议使用,可在腾讯云 SSL申请免费证书。

🌴 部署 Node 服务

  1. 将后端整个文件夹(除了 node_modules)打包上传到服务器
    在这里插入图片描述

  2. 创建数据库,并上传本地数据库文件
    在这里插入图片描述

  3. 复制用户名和密码,打开根目录的 .env 文件,填入用户名和密码:
    在这里插入图片描述

  4. 进入 网站-运行环境-Node.js 面板,点击 创建运行环境,根据自己实际需求填入配置:
    在这里插入图片描述

  5. 稍等几分钟,如果看到状态显示 已启动,并且查看日志无报错异常,则说明服务运行正常,这里记住端口号,等下我们部署前端应用做反向代理会用到。

🌵 部署 web 应用

  1. 网站-网站 点击 创建网站,选择 静态网站,填入所需网站信息:
    在这里插入图片描述

  2. 进入网站目录,将 web 应用打包的 dist 文件夹上传并解压:
    在这里插入图片描述

  3. 进入网站配置,设置网站目录,选择刚上传解压的 dist 目录:
    在这里插入图片描述

  4. 进入 网站-证书,点击 上传证书,将申请的证书信息填入
    在这里插入图片描述

  5. 进入网站配置,点击 HTTPS 选项,选择相应的网站证书:
    在这里插入图片描述

到这里,我们的 web
应用就部署成功了,打开域名应该就能看到网站信息了。但这时候还不能访问后端服务,我们需要做反向代理,将接口请求转发到后端服务。

🌱 配置反向代理

一般现在前后端分离项目,前端的接口请求都有一个共同前缀,比如:/api等。

进入网站配置,点击反向代理-创建,填入代理信息:
在这里插入图片描述

这样配置后,当我们访问 https://vue3.baiwumm.com/api/login 的地址时,服务器内部会做一个转发,相当于访问了服务器内部的:http:127.0.0.1:6689/login 请求。

如果有多个接口前缀,或者有其他如图片服务的前缀,那就配置多个代理,道理是一样的。

如果顺利的话,重新刷新页面,就能看到前端能正常请求数据了。

🪴 常见问题

这里罗列一下项目部署中我遇到最常见的问题:

  1. 前端请求接口,页面直接报 404
    答:这个是网站的反向代理没有成功,检查一下网站配置中的反向代理配置,看看是不是前缀不一致等问题。

  2. 前端请求接口,服务报 502
    答:这个是网站的反向代理成功了,但是后端服务没启动成功,检查一下 Node.js 服务日志是否有报错,状态是否显示 已启动 绿色标志。

  3. 接口能正常请求,但 sql 语句报错
    答:这个是后端服务启动成功了,前端也能正常请求,但可能由于数据库缺失表,或者服务本身 sql 语句有误,检查数据库每张表的信息是否完整,根据 sql 报错信息检查。

这几个问题是我部署过程中最常见的问题,如果是首次部署,也许可能会遇到各种奇奇怪怪的问题,我们可问度娘或者有经验的开发者,一一排查解决。
祝君部署应用一路绿灯!

🌹 总结

本篇文章是根据我的项目 Vue3 Admin 部署经验,可供大家参考,希望对大家有帮助!😘

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/455897.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序绘制轨迹

1、map | uni-app官网 根据官网描述&#xff1a;通过从数据库获取POI数据&#xff0c;并通过 uni-id-common 内的路线规划API&#xff0c;计算路线、距离、时间。 2、 <map style"width:100%;height:96%;" id"myMap" :scale"scale" :longi…

javaWeb项目-ssm+jsp大学生校园兼职系统功能介绍

本项目源码&#xff08;点击下方链接下载&#xff09;&#xff1a;java-ssmjsp大学生校园兼职系统实现源码(项目源码-说明文档)资源-CSDN文库 项目关键技术 开发工具&#xff1a;IDEA 、Eclipse 编程语言: Java 数据库: MySQL5.7 框架&#xff1a;ssm、Springboot 前端&#x…

C++【string类的使用】(上)

文章目录 1. 为什么要学习string类2. 标准库的string类2.1 string的构造函数&#xff08;1&#xff09;无参构造&#xff08;重点&#xff09;&#xff08;2&#xff09;用字符串初始化&#xff08;重点&#xff09;&#xff08;3&#xff09;用字符串的前n个字符初始化(4)拷贝…

前端处理返回的number类型超出16位的问题 ,在axios中统一处理

前端处理返回的number类型超出16位的问题 &#xff0c;在axios中统一处理 造成原因&#xff1a;js的number类型有个最大安全值&#xff0c;即2的53次方&#xff08;9007199254740992&#xff09;&#xff0c;超过这个值就会出现精度丢失的问题。 后端处理&#xff1a;将数字类…

MATLAB Simulink (二)高速跳频通信系统

MATLAB & Simulink &#xff08;二&#xff09;高速跳频通信系统 写在前面1 系统原理1.1 扩频通信系统理论基础1.1.1 基本原理1.1.2 扩频通信系统处理增益和干扰容限1.1.3 各种干扰模式下抗干扰性能 1.2 高速跳频通信系统理论基础1.2.1 基本原理1.2.2 物理模型 2 方案设计2…

使用docker-compose搭建redis7集群-3主3从

下面是一个用于搭建 Redis 集群的 docker-compose.yml 示例文件&#xff0c;它会启动 6 个 Redis 节点&#xff08;3 主节点 3 从节点&#xff09;来构成一个最小的 Redis 集群。 同一个容器内网通讯没问题&#xff0c;但是你要是需要暴露到外网你需要用第二个yml 内网的 v…

Leetcode 最长公共前缀

java solution class Solution {public String longestCommonPrefix(String[] strs) {if(strs null || strs.length 0) {return "";}//用第一个字符串作为模板,利用indexOf()方法匹配,由右至左逐渐缩短第一个字符串的长度String prefix strs[0];for(int i 1; i …

stm32单片机基于rt-thread 的 串行 Flash 通用驱动库 SFUD 的使用

1024程序员节&#xff5c;征文 一、sfud 通用驱动库介绍 SFUD 是一款开源的串行 SPI Flash 通用驱动库。由于现有市面的串行 Flash 种类居多&#xff0c;各个 Flash 的规格及命令存在差异&#xff0c; SFUD 就是为了解决这些 Flash 的差异现状而设计&#xff0c;能够支持不同品…

【OpenAI】第六节(语音生成与语音识别技术)从 ChatGPT 到 Whisper 的全方位指南

前言 在人工智能的浪潮中&#xff0c;语音识别技术正逐渐成为我们日常生活中不可或缺的一部分。随着 OpenAI 的 Whisper 模型的推出&#xff0c;语音转文本的过程变得前所未有的简单和高效。无论是从 YouTube 视频中提取信息&#xff0c;还是将播客内容转化为文本&#xff0c;…

K8S系列-Kubernetes网络

一、Kubernetes网络模型 ​ Kubernetes网络模型设计的一个基础原则是&#xff1a;每个Pod都拥有一个独立的IP地址&#xff0c;并假定所有Pod都在一个可以直接连通的、扁平的网络空间中&#xff0c;不管它们是否运行在同一个Node&#xff08;宿主机&#xff09;中&#xff0c;都…

【Java SE 题库】LeetCode 热题 100--->两数之和

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 题目 2. 解析 2.1 判断两个数相加是否等于目标值 2.2 相等后&#xff0c;如何返回两个下标 3. 代码 4. 小结 取于力扣-->LeetCode 热题 100 - 学…

nginx的配置

nginx 通过nginx来进行配置&#xff0c;功能如下 通过nginx的反向代理功能访问后端的网关资源通过nginx的静态服务器功能访问前端静态页面 nginx配置步骤&#xff1a; ①&#xff1a;解压下载下来的nginx的压缩包nginx-1.18.0.zip&#xff0c;安装完成并启动后&#xff0c;访…

面经之一:Synchronized与ReentrantLock区别

Synchronized与ReentrantLock是Java中用于实现线程同步的两种主要机制&#xff0c;它们各有特点和适用场景。以下是它们的主要区别&#xff1a; 实现方式&#xff1a; Synchronized&#xff1a;是Java语言内置的关键字&#xff0c;通过JVM层面的监视器&#xff08;Monitor&…

基于vue3封装了一个coverflow轮播图(层叠轮播图)组件

最近公司有这个需求, 但是网上找了一圈 , 没有合适的能用在vue3里面的、且长这样的组件, 干脆自己动手写了一个; 效果如下, 可以适配多张图片 ,小于五张会是平铺展示; 大于五张按顺序轮播 , 每次切换有动画 <template><div class"Swiper"><div v-i…

COSCon'24 志愿者招募令:共创开源新生活!

亲爱的开源爱好者们&#xff0c; 第九届中国开源年会&#xff08;COSCon24&#xff09;即将在北京中关村国家自主创新示范区会议中心于2024年11月2日至3日隆重举行。今年的主题是“Open Source, Open Life&#xff5c;开源新生活”&#xff0c;旨在探索开源技术如何在各个领域推…

APP综合应用之业务场景脚本测试任务(5)--多重继承与总结

在脚本中&#xff0c;有三个子类继承自父类Test_login,那么怎么同时获得三个子类的继承呢&#xff1f; 1、多重继承 下面用Test_flowdriver的子类继承自上面的三个子类。 新建一个工作流驱动的文件testtest_run_workflowV1.py 主要是创建驱动类时&#xff0c;要把三个子类都继…

VisionPro —— CogBlobTool斑点工具详解

一 CogBlobTool 简介 CogBlobTool 一个用于斑点检测和分析的工具。可以使用该工具检查图像的区域&#xff0c;并定位由灰度值有限范围内的像素组成的特征&#xff0c;这些特征的形状通常是不可预测的。检测和分析这些特征或斑点的过程称为斑点分析。您可以使用blob分析来提供有…

【C++】——list 容器的解析与极致实现

人的一切痛苦&#xff0c;本质上都是对自己的无能的愤怒。 —— 王小波 目录 1、list 介绍 2、list的使用 2.1 list 的构造 2.2 iterator 的使用 2.3 list 的修改 2.4一些特殊接口 2.5 迭代器失效问题 3、实现list 3.1底层结构 结点类 list类 迭代器类 3.2功能接…

MYSQL-SQL-04-DCL(Data Control Language,数据控制语言)

DCL&#xff08;数据控制语言&#xff09; DCL英文全称是Data Control Language(数据控制语言)&#xff0c;用来管理数据库用户、控制数据库的访问权限。 一、管理用户 1、查询用户 在MySQL数据库管理系统中&#xff0c;mysql 是一个特殊的系统数据库名称&#xff0c;它并不…

信息安全工程师(54)网络安全审计主要产品与技术指标

前言 网络安全审计是对网络系统进行全面的安全评估和检查&#xff0c;以发现网络安全漏洞和威胁&#xff0c;并采取相应的措施进行修补和防护的重要过程。 一、网络安全审计主要产品 域智盾 简介&#xff1a;一款企业级功能强大的网络监控和审计工具&#xff0c;能够持续监控网…