【转】腾讯云OpenCloudOS部署NestJS项目
2024-09-23 11:40:52

目前还在艰难摸索部署流程中,虽然初步完成了项目的部署。

不过由于种种原因,暂时还没成功,后续我会继续摸索完善该文档。

正文

整个流程其实和本地开发流程大概类似,安装配置好node环境,再安装PM2工具,用于管理进程。

在完成准备工作之后,上传nestjs的后端环境压缩包,然后在线上npm装好包,到此完成

只是流程多了个PM2工具来管理进程。

安装node环境

安装完成后也要创建一个软链接才可以全局使用

创建目录

1
mkdir -p /server/soft/node

安装目录

1
cd /server/soft/node

下载安装包

下载最新版本的Node.js,这里我用wget命令下载,如果不能用,建议查一下其他的linux下载命令。

1
wget https://nodejs.org/dist/v20.5.0/node-v20.5.0-linux-x64.tar.xz

解压到指定目录

这里我们就解压到

1
sudo tar -xJvf node-v20.5.0-linux-x64.tar.xz -C /server/soft/node

配置nodejs环境

看了其他人的文档,有人说创建软链接的方式不太好,个人参考那篇文档没跑通。

折腾了一段时间之后,还是选择如下方案,node环境推荐按照当前最新的稳定版本(node20)。

在默认路径中创建对应的软链 (推荐)
1
2
3
4
5
6
# 创建 node 软链
sudo ln -s /server/soft/node/node-v20.5.0-linux-x64/bin/node /usr/bin/node
# 创建 npm 软链
sudo ln -s /server/soft/node/node-v20.5.0-linux-x64/bin/npm /usr/bin/npm
# 创建 npx 软链
sudo ln -s /server/soft/node/node-v20.5.0-linux-x64/bin/npx /usr/bin/npx

优点: 创建一次,所有用户均可运行node相关命令
缺点: 每增加一个全局node相关命令都要创建软链

移除对应内容

如果要是对应的软连接已经被占用,可以用以下命令移除对应的软连接,再重新执行上边的命令

1
2
3
sudo rm /usr/bin/node
sudo rm /usr/bin/npm
sudo rm /usr/bin/npx

验证版本

如果这里版本验证成功后,到此,node安装的流程就算是完成了。

1
2
node -v
npm -v

安装PM2

安装pm2也要添加软连接,因为使用npm下载安装,所以下载目录就在node的bin目录下。

安装pm2

1
npm install pm2 -g

添加软连接

1
sudo ln -s /server/soft/node/node-v20.5.0-linux-x64/bin/pm2  /usr/bin/pm2

启动nest项目

将本地的nest项目打包成tar包,然后传到对应的目录。

不过,如果你nest项目如果是独立的,你也可以考虑直接在服务器上用git下载,只不过这么做太费事,我懒得整了,直接本地打包放上去就好。

创建目录

当前目录是用来放nest项目后端的

1
mkdir -p /server/soft/nest-admin

解压到指定目录

这里我们将对应的压缩包解压到我们刚才创建的目录中

1
sudo tar -xvf nest-server.tar -C /server/soft/nest-admin

切换目录

这里我们切换到对应的项目目录,然后为npm安装做准备。

1
cd /server/soft/nest-admin/server/

安装依赖

因为我这里没有多个项目,所以我就不额外安装pnpm来做包管理了,直接用npm安装包依赖就够了。

1
npm install

如果要是你喜欢使用pnpm来进行管理,也可以提添加一个pnpm的软连接,方便后续用pnpm管理。

1
2
# 创建 npm 软链
sudo ln -s /server/soft/node/node-v20.5.0-linux-x64/bin/pnpm /usr/bin/pnpm

启动项目

1
2
cd /server/soft/nest-admin/server/dist
pm2 start main.js

防火墙

我这里是用腾讯云小程序开了防火墙的对应的端口。

访问项目

因为我这里端口是8080,所以我这里就用8080启动项目

1
ip地址:8080/swagger-ui/

pm2相关操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
pm2 start app.js # 运行pm2启动项目
pm2 restart app.js # 运行pm2启动项目
pm2 stop app.js # 运行pm2启动项目
pm2 list # 显示所有进程状态
pm2 monit # 监视所有进程
pm2 logs # 显示所有进程日志
pm2 stop all # 停止所有进程
pm2 restart all # 重启所有进程
pm2 reload all # 0 秒停机重载进程 (用于 NETWORKED 进程)
pm2 stop 0 # 停止指定的进程
pm2 restart 0 # 重启指定的进程
pm2 startup # 产生 init 脚本 保持进程活着
pm2 web # 运行健壮的 computer API endpoint (http://localhost:9615)
pm2 delete 0 # 杀死指定的进程
pm2 delete all # 杀死全部进程

结语

目前项目中的问题还比较多,开发环境可以连接,但是部署到线上,因为没有合适的文档,所以总是会有各种问题。

现在还在艰难排查中,总算是总结出了一套可能并不好用的部署方式。

万里长征现在刚走了第一步,艰难摸索中,希望能有一些好的收获。

参考

nestjs项目打包部署之linux系统上线]_nestjs部署-CSDN博客

node.js - 在linux系统上安装和配置nodejs - 箫笛 - 博客园 (cnblogs.com)