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

    • 跟几个人交流后,他们说

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

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

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

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

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

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

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

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

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

    • 如何关闭node程序?网上找了个killall node,可以了

    • nohup启动后,看到启动日志并没有变化,说明没请求到后端,检查nginx配置,补上后端接口配置

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

    • 启动成功了!

  • 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等一起用)

相关推荐
毕设源码-赖学姐5 小时前
【开题答辩全过程】以 高校评教评学系统的设计与实现为例,包含答辩的问题和答案
java·eclipse
老华带你飞5 小时前
博物馆展览门户|基于Java博物馆展览门户系统(源码+数据库+文档)
java·开发语言·数据库·vue.js·spring boot·后端
无奈笑天下5 小时前
银河麒麟高级服务器操作系统【双网卡绑定之bond0】操作方法
linux·运维·服务器·网络·经验分享
无名3875 小时前
FusionPBX Debian 12 安装
运维·debian·通信
路边草随风5 小时前
iceberg 基于 cosn 构建 catalog
java·大数据
It's now5 小时前
Spring Framework 7.0 原生弹性功能系统讲解
java·后端·spring
点PY5 小时前
C++ 中 std::async 和 std::future 的并发性
java·开发语言·c++
一 乐6 小时前
人事管理系统|基于Springboot+vue的企业人力资源管理系统设计与实现(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·spring boot·后端
带刺的坐椅6 小时前
Solon AI 开发学习19 - 结合 Solon Flow 实现 ReAct 效果
java·ai·chatgpt·llm·openai·solon·deepseek
CoderYanger6 小时前
Java SE——12.异常(≠错误)《干货笔记》
java·开发语言