day4 linux上部署第一个nest项目(java转ts全栈/3R教室)

2024-03-29 23:44

本文主要是介绍day4 linux上部署第一个nest项目(java转ts全栈/3R教室),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 背景:上一篇吧nest-vben-admin项目,再开发环境上跑通了,并且build出来了dist文件,接下来再部署到linux试试吧

  • dist文件夹是干嘛的? 一个pnpn install 直接生成了两个dist文件夹,前端admin项目一个(vue的),后端server项目一个(nestjs的)

    • 前端容易理解,就是静态页面,放nginx上就行了
    • 那么nestjs的dist文件呢?按照java springboot的经验吧打包出来的文件放服务器上启动就行了,java用jdk启动,那么nestjs应该是用node启动吧
  • 尝试:于是生产环境的linux上,安装node pnpm等环境

    • dist中有个关键的main.js文件,网上说用node main.js就可以启动,但是启动后报错 node_modules 缺失。。感情node_modules的依赖不会打包呀,这个和springboot打jar包挺不一样的
  • node_modules如何部署? 网上查了一些帖子,竟然很多人要把整个项目代码 git下载到生产环境,在服务器上安装依赖包的。。。这个挺出乎意料的。先按照这种方法试试吧,之后再优化部署方式(「技术教程」Nestjs 与Prisma打包部署 – Eswlnk Blog)

    • 1711702573390.png

       

      1711683914402.png

    • 跟几个人交流后,他们说
  • 开始部署:把整个项目放到了linux上,然后再install把node_modules安装了下来,这时候因为是生产环境就不能run dev了,需要start:prod

    • 这时候发现原来start:prod的命令是需要用到dist文件的,这大概就是build的作用吧

      1711705533838.png

    • 然后pnpm build,报错:pnpm add turbo -g 安装下

      1711684878693.png

    • 继续build,报错 找不到node_modules?看了下目录,基本空的,看来没安装成功
    • 1711685032578.png

    • 重新install,仔细看日志:"resolutions"这个错误本地开发环境也有,主要是安装进程被kill的问题:尝试 chmod -R 775 给目录赋予下权限,不行;重新安装配置了下pnpm 好了,install成功!

      1711686706837.png

    • 继续build,成功了(这里我在整个项目下build,前端打包报错了,然后前端在开发环境下build了下,拿了过来;应该都可以在开发环境build好,唯独是node_modules需要在生产环境安装)

      1711685032578.png

  • 启动调试:前端就是放nginx上,后端cd到server目录下,pnpm start:prod &

    • 测试后端启动成功;测试前端启动成功,登陆报405

      1711704241252.png

    • 发现找不到启动日志,准备用nohup记录一下,但是如何关闭掉nestjs程序呢?按照java的思路,直接kill掉进程就行,于是尝试kill掉nestjs进程:不行;再试着kill掉node进程:也不行

      1711698701183.png

    • 如何关闭node程序?网上找了个killall node,可以了
    • nohup启动后,看到启动日志并没有变化,说明没请求到后端,检查nginx配置,补上后端接口配置

      1711699654509.png

    • 继续测试登陆,报错404,这时候请求到后端了,不过请求路径配错了,少了/api,改下nginx配置

      1711700055701.png

    • 启动成功了!

      1711700232794.png

  • nginx配置:

server {listen       5173;charset utf-8;location / {root  /home/project/wangc-nest-admin/apps/admin/dist;try_files $uri $uri/ /index.html;index  index.html index.htm;}location /api/ {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:5001/api/;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   html;}}

  • 总结:nestjs项目部署流程走通了,以下是可以优化的地方
    • 源码应该并不需要全部放生产环境:首先前端项目直接打包放服务器就行,而后端的node_modules是需要在生产环境安装的,所以后端的package.json是需要的,dist文件应该也是可以打包好放服务器的。
    • node_modules也比较占资源,并且如果能把代码和依赖一起打包就好了,这方面之后看看webpack,vercel(ncc)这些的前端构建工具,之后在用docker部署下试试(不同于maven管理构建一套生命周期全管下,前端得npm webpack等一起用)

      1711702932746.png

这篇关于day4 linux上部署第一个nest项目(java转ts全栈/3R教室)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/859964

相关文章

SpringBoot中SM2公钥加密、私钥解密的实现示例详解

《SpringBoot中SM2公钥加密、私钥解密的实现示例详解》本文介绍了如何在SpringBoot项目中实现SM2公钥加密和私钥解密的功能,通过使用Hutool库和BouncyCastle依赖,简化... 目录一、前言1、加密信息(示例)2、加密结果(示例)二、实现代码1、yml文件配置2、创建SM2工具

Spring WebFlux 与 WebClient 使用指南及最佳实践

《SpringWebFlux与WebClient使用指南及最佳实践》WebClient是SpringWebFlux模块提供的非阻塞、响应式HTTP客户端,基于ProjectReactor实现,... 目录Spring WebFlux 与 WebClient 使用指南1. WebClient 概述2. 核心依

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一