2024 年在 AWS 云 Ubuntu 服务器通过 PM2 部署 Nest.js 项目教程

今年第一次在 Ubuntu 上面部署 Nest.js 项目,因为各个组件每年的版本都会发生变化,这里记录一下环境搭建的过程,帮助大家少踩坑。

首先在 AWS 云上面开通一台 EC2 的服务器,EC2 是弹性计算、按照使用量收费的服务器,性价比很高。具体开通步骤就不赘述了。

开通后使用 pem 文件登陆,pem 通常来说会比密码更加安全。

ssh 复制代码
ssh -i /path/to/xxx.pem user@server_ip

连接到服务器后开始搭建环境。

node.js 环境搭建

第一步是更新一下 apt 包管理器的包列表信息。

shell 复制代码
sudo apt update

第二步是安装 Node.js,注意不要直接用 sudo apt install nodejs 来安装 node.js,因为这样安装的版本是 12.x。这是 Ubuntu 包管理器的策略,它们会以稳定性优先,所以往往都不会包含软件包的最新版本。

想要安装高版本的 node.js 有三种方式:

  1. 使用 node.js 官网的二进制文件。
  2. 使用 NodeSource 二进制分发 PPA。我们可以指定不同版本的 node.js 进行安装。
  3. 使用 nvm。nvm 的优势是可以方便的切换版本。

通常都会根据需求选择后两种安装方式。

这里我采取了第二种安装方式,因为我的 Node.js 版本是固定的,没有切换版本的需求。不过也会顺便讲一下第三种的安装方式。

首先通过 cURL 下载二进制安装脚本,并把它放到临时目录中。

shell 复制代码
curl -sL https://deb.nodesource.com/setup_20.x -o /tmp/nodesource_setup.sh

然后执行脚本。

shell 复制代码
sudo bash /tmp/nodesource_setup.sh

执行完脚本之后,会自动更新软件包信息。

现在我们可以通过 apt 安装 node.js 了。

shell 复制代码
sudo apt install nodejs

安装完成后测试是否安装成功。

shell 复制代码
node -v

输出正确的版本号就代表安装成功了。

pm2 环境搭建与项目部署

接下来把源代码上传到服务器。这里的方式比较原始,后面我搭建了自动化部署,篇幅所限,会再写一篇文章讲一下通过 Github Actions 来实现自动化部署。

上传文件可以用 rsync,rsync 会比 scp 有更多的功能,比如增量上传、带宽限制、过滤文件等。

shell 复制代码
rsync -avz --progress --exclude='node_modules' /path/to/local/folder/projects/ user@server_ip:/path/to/remote/projects

我通过添加 exclude 参数过滤掉了 node_modules 文件夹。

等待项目源码上传完成。

完成后进入服务器的项目目录下,安装依赖。

shell 复制代码
npm i

然后全局安装 nest cli

shell 复制代码
sudo npm install -g @nestjs/cli@latest

构建项目。

shell 复制代码
npm run build

然后全局安装 pm2

shell 复制代码
sudo npm install -g pm2@latest

通过 pm2 启动项目。

shell 复制代码
pm2 start npm --name "project_name" -- run start

启动完成后可以查看 pm2 的项目列表确认项目是否正常启动。

shell 复制代码
pm2 list

还可以通过 losf 命令来查看项目是否正常。

shell 复制代码
lsof -i :port

映射到公网域名

到这里项目部署已经完成了,接下来是通过公网域名访问项目。

首先设置一下 AWS 的安全组,允许 3000 端口被访问。

然后保证 EC2 的服务器有一个弹性 IP。

最后就是域名解析,在域名服务商的 DNS 配置界面上,添加 A 记录到 EC2 的 IP 就可以了。

相关推荐
newbe365245 小时前
我们如何使用 impeccable 优化前端界面设计与实现稳定性
前端·人工智能·分布式·github·aigc·wpf
KaMeidebaby11 小时前
卡梅德生物技术快报|蛋白 N 端测序在重组贻贝融合蛋白表征中的应用,解决原核表达序列偏移工艺难题
前端·人工智能·物联网·算法·百度
独孤九剑打醒他11 小时前
双层Master-Worker软硬协同调度架构:从根源解决分布式数据一致性难题
后端·嵌入式硬件·硬件架构·硬件工程
kyriewen13 小时前
我筛了 1400 个 Claude Code Skills,留下 5 个天天在用的
前端·ai编程·claude
JNX_SEMI13 小时前
AT2401C 2.4GHz 全集成射频前端单芯片技术解析
前端·单片机·嵌入式硬件·物联网·硬件工程
不会c+13 小时前
02-SpringBoot配置文件
java·spring boot·后端
anOnion13 小时前
Agentic 前端开发之 实时显示 AI Agent 终端输出
前端·javascript·人工智能
随风一样自由13 小时前
【前端领域】2026最新前端领域全梳理(框架/工具/AI/跨端/底层标准/就业趋势)
前端·人工智能·前端框架
这是个栗子13 小时前
【前端性能优化】优化数据加载:用 Promise.all 从串行到并行
前端·javascript·性能优化·异步编程·前端优化·promise.all
fei_sun14 小时前
黑洞路由(Null Route/空接口路由)
服务器·前端·javascript