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

news2024/10/5 15:29:16

  • 背景:上一篇吧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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

黑马鸿蒙笔记 3

目录 11.ArkUI组件-Column和Row 12.ArkUI组件-循环控制 13.ArkUI组件-List 14.ArkUI组件-自定义组件 15.ArkUI组件-状态管理State装饰器 16.ArkUI组件-状态管理-任务统计案例 17.ArkUI组件-状态管理-PropLinkProvideConsume 11.ArkUI组件-Column和Row Colum和Row的交叉…

力扣-python-故障键盘

题解: from collections import dequeclass Solution:def finalString(self, s: str) -> str:# 创建一个双端队列用于存储字符q deque()# 定义一个标志位,用于标记当前字符应该添加到队列的哪一端head False# 遍历输入的字符串s的每一个字符for ch…

k8s安装traefik作为ingress

一、先来介绍下Ingress Ingress 这个东西是 1.2 后才出现的,通过 Ingress 用户可以实现使用 nginx 等开源的反向代理负载均衡器实现对外暴露服务,以下详细说一下 Ingress,毕竟 traefik 用的就是 Ingress 使用 Ingress 时一般会有三个组件: …

从0到1利用express搭建后端服务

目录 1 架构的选择2 环境搭建3 安装express4 创建启动文件5 express的核心功能6 加入日志记录功能7 日志记录的好处本节代码总结 不知不觉学习低代码已经进入第四个年头了,既然低代码很好,为什么突然又自己架构起后端了呢?我有一句话叫低代码…

大模型 web ui 界面 text-generation-webui

目录 前言 web ui ValueError: When localhost is not accessible 前言 使用 text-generation-webui 生成大模型界面,这个是专门用于文本对话生成的 web ui 界面 GitHub - oobabooga/text-generation-webui: A Gradio web UI for Large Language Models. Suppo…

【语言信号增强算法研究-1】维纳滤波(Wiener Filter)

1 语音增强方法分类 2 维纳滤波的局限性 对于非线性和非高斯噪声的处理效果不佳; 对于信号和噪声的统计特性要求比较高,需要准确地了解信号和噪声的分布规律(说明自适应很差); 在处理复杂信号时,需要进行多…

【Functional Affordances】如何确认可抓取的区域?(前传)

文章目录 1. 【Meta AI】Emerging Properties in Self-Supervised Vision Transformers2. 【Meta AI】DINOv2: Learning Robust Visual Features without Supervision3. 【NeurIPS 2023】Diffusion Hyperfeatures: Searching Through Time and Space for Semantic Corresponden…

ElasticSearch理论指导

引子 本文致力于ElasticSearch理论体系构建,从基本概念和术语讲起,具体阐述了倒排索引和TransLog,接着讲了ElasticSearch的增删改查的流程和原理,最后讲了讲集群的选举和脑裂问题。 前言 大碗宽面-Kafka一本道万事通&#xff0…

蓝桥杯真题:成绩统计

这题思路简单,但是输出结果的位置容易出错,题目要求四舍五入,所以要用Math.round()的方法

瑞吉外卖实战学习--10、完成新增菜品分类

完成新增菜品分类 前言1、前期准备定义实体类和实体对象 2、创建修改的接口 前言 1、前期准备 定义实体类和实体对象 package com.example.ruiji_demo.entity;import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; …

kubernetes-Pod基于污点、容忍度、亲和性的多种调度策略(二)

Pod调度策略 一.污点-Taint二.容忍度-Tolerations三.Pod常见状态和重启策略1.Pod常见状态2.Pod的重启策略2.1测试Always重启策略2.2测试Never重启策略2.3测试OnFailure重启策略(生产环境中常用) 一.污点-Taint 在 Kubernetes 中,污点&#x…

稻盛和夫|普通人如何才能取得非凡成就?

哈喽,你好啊,我是雷工! 稻盛和夫老先生曾经回答过这么一个问题: 资质平庸的普通人如何才能取得非凡的成就? 稻盛和夫认为:人生成就=能力努力态度。 也就是:做一个努力工作却不甘于只做眼前的事,而想要做更有挑战的事,这种人才能逃离平庸,取得非凡成就。 01 不甘平凡…

django+uniapp校园失物招领系统e5asg 微信小程序python

本失物招领小程序,使用的是比较成熟的python语言和比较完善的MySQL数据库,将网络失物招领小程序信息管理系统可以更安全、技术性更强的满足网站所有信息的管理。 失物招领小程序主要实现了管理员服务端模块、学生微信端模块二大部分。通过本失物招领小程…

200个有趣的HTML前端游戏项目合集(持续更新中)

💂 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】🤟 一站式轻松构建小程序、Web网站、移动应用:👉注册地址🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交…

新生报到系统的设计与实现(论文+源码)_kaic

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对新生报到信息管理混乱,出错率高,信息安全性差…

11-2说说小滴课堂之前的被薅羊毛的事情+防范解决方案

11-2说说小滴课堂之前的被薅羊毛的事情防范解决方案

【LVGL-字库应用】

LVGL-中文字库应用 ■ LVGL-内部字库■ LVGL 内部字库的使用流程: ■ LVGL-自定义字库■ 方法一:C 语言数组(内部读取)-在线转换工具■ 方法二:C 语言数组(内部读取)-利用离线字体转换软件&…

【Java】API——Calendar日期类使用+题目演示

目录 Calendar日期类简单介绍 导入对应包: 获取 Calendar 对象: 设置日期和时间: 获取日期和时间的各个部分: 日期和时间的加减操作: 例题:世纪末的星期 题目描述 题目代码 Calendar日期类简单介绍…

FPGA之状态机学习

作为一名逻辑工程师,掌握和应用状态机设计是必不可少的。能够灵活的应用状态机是对逻辑工程师最基本的要求,状态机设计的好坏能够直接影响到设计系统的稳定性,所以学会状态机是非常的重要。 1.状态机的概念 状态机通过不同的状态迁移来完成特…

计算机网络—TCP协议详解:特性、应用(1)

🎬慕斯主页:修仙—别有洞天 ♈️今日夜电波:マリンブルーの庭園—ずっと真夜中でいいのに。 0:34━━━━━━️💟──────── 3:34 🔄 ◀️…