这篇笔记📒,记录第一次使用阿里云ECS,部署Express应用的过程,还有踩的一些坑。主要步骤如下:
- 新服务器初始化配置(安装git curl wget vim)
- 安装 Node.js 与 npm
- 上传/克隆你的 Express 项目代码
- 运行 Express 服务
- 使用 PM2 守护进程
- 配置防火墙与安全组
- 开放阿里云安全组(公网入口)
买了一个阿里云ECS e实例(2核2G),用的操作系统是Alibaba Cloud Linux 4 LTS 64位

为什么用Alibaba Cloud Linux 4 LTS 64操作系统
刚开始我用的操作系统是CentOS 7.9版本, 但是CentOS 7.9自带的 Node版本我觉得太旧了,然后安装 Node.js 20, 提示需要glibc >= 2.28,CentOS 7.9用的glibc是2.17,在这个系统升级不了Node,
Requires: libstdc++.so.6(GLIBCXX_3.4.20)(64bit) Error: Package: 2:nodejs-20.19.5-1nodesource.x86_64 (nodesource-nodejs) Requires: glibc >= 2.28 Installed: glibc-2.17-326.el7_9.3.x86_64 (@updates)
即使我在CentOS 7.9里安装nvm, 使用nvm安装node 20, 还是会报错。所以我就切换到Alibaba Cloud Linux 4 LTS 64位
nvm 只是切换 Node 版本的工具,它不会自己提供新的 glibc。
所以 Node.js 20 在 CentOS 7上无法直接运行二进制版本。


进入服务区控制台,服务器初始化配置

提示我们进行安全更新, 仅更新系统中与安全相关的最小必要软件包的命令,主要用于在保持系统稳定性的同时,快速修复已知安全漏洞。
执行如下命令进行安全更新
css
dnf upgrade-minimal --security

执行如下命令确保系统基础组件处于最新状态,修复已知漏洞并提升兼容性。
bash
sudo dnf update -y # AL4 用 dnf(yum 别名也行)
运行后,系统会从配置的软件源(如阿里云官方源)检查所有已安装包的最新版本,下载并升级它们,最终完成系统整体更新。
执行如下命令,安装基础工具 git curl wget vim
sudo dnf install -y git curl wget vim
待安装的软件包(均为开发和日常操作的基础工具):
- git:分布式版本控制系统,用于克隆代码仓库(如从 GitHub、GitLab 拉取项目代码)、管理代码版本。
- curl :命令行网络传输工具,支持 HTTP/HTTPS/FTP 等协议,常用于下载文件、测试接口(如 curl example.com)。
- wget :另一个命令行下载工具,擅长断点续传和后台下载(如 wget example.com/file.zip)。
- vim:功能强大的文本编辑器,用于修改配置文件(如 Nginx 配置、脚本文件等),是 Linux 系统中最常用的编辑器之一。


安装 Node.js 20(LTS 版)
用 NVM(Node Version Manager)安装,便于多版本管理。官方推荐,避免仓库冲突。 执行如下命令安装nvm, 用nvm安装node20
bash
# 安装 NVM
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc # 加载 NVM
# 安装 Node 20
nvm install 20
nvm use 20
nvm alias default 20 # 默认用 20
# 验证
node -v # 应输出 v20.x.x
npm -v # 应输出 10.x.x


我们成功安装了node 20.19.5版本
上传/克隆你的 Express 项目代码
创建工作目录 /opt/myapp/
bash
mkdir -p /opt/myapp/ && cd /opt/myapp/
先前我们安装了git, 我们可以直接克隆代码到服务器,因为阿里云ECS网络问题,我们把代码上传到Gitee上,就可以克隆代码
用 Git 克隆项目代码
bash
git clone https://gitee.com/yourusername/your-express-repo.git
安装依赖并构建 TS 项目

执行npm i 后,一直没啥反应, 把npm 镜像换成淘宝镜像,就可以成功安装了
bash
npm config set registry https://registry.npmmirror.com
执行npm i --no-optional --verbose 不安装那些可选的包,--verbose就可以显示安装的详细信息

安装pm2, 使用pm2启动应用
运行npm run build, 打包, 然后控制台执行
bash
npm i -g pm2 && pm2 start dist/app.js --name "api"
这里我们安装了pm2, pm2 是 Node.js 应用的进程管理工具,在服务器部署场景中非常重要,主要解决以下问题:
- 防止进程意外退出:直接用 node dist/app.js 启动的话,一旦程序报错或服务器临时波动,进程会直接终止,导致服务中断。pm2 会自动监控进程,崩溃后立即重启,保证服务可用性。
- 后台运行:通过 pm2 启动的进程会在后台运行,不会因终端关闭(比如你断开 SSH 连接)而停止(直接用 node 启动的话,关闭终端进程就没了)。
- 资源监控与日志管理 :可以通过
pm2 monit查看 CPU / 内存占用,用pm2 logs api快速查看该服务的日志,方便排查问题。 - 多进程管理:如果你的 express 服务需要扩展性能,pm2 可以轻松启动多个进程(利用多核 CPU),提升并发处理能力。


--name "api" 是 PM2 的一个可选标志,用来给这个启动的 Node.js 进程(你的 Express app)起一个自定义名称(这里是 "api"), 起名的好处
管理操作:后续命令用名称操作更方便:
- pm2 logs api:只看 "api" 进程的日志(不看所有)。
- pm2 restart api:只重启 "api"(不影响其他进程)。
- pm2 stop api / pm2 delete api:停止/删除特定进程。
- pm2 monit:监控界面中,按名称过滤。
从 上面截图看,我们的Express应用已启动(ID 0,name "api",status online,占用 43MB 内存)。现在它在 ECS 服务器本地运行(fork 模式,PID 64131)。默认 Express app 监听端口 3000
既然应用已经运行了,我们试着访问下
bash
curl http://localhost:3000/
可以看到输出了Transaction API is running...,我的代码就是这样写的
javascript
app.get('/', (req, res) => {
res.send('Transaction API is running...')
})
说明本地部署成功了,服务器内部可以访问
配置防火墙与安全组
css
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-ports # 确认添加
报错了FirewallD is not running,这是阿里云 AL4(基于 RHEL 9)的常见情况:firewalld 默认安装但未启动(安全考虑,初始状态关闭),我们要激活它,然后开放端口 3000(你的 Express app 端口)。完成后,再检查阿里云安全组(控制台配置),因为 ECS 防火墙只管本地,安全组管公网。
执行如下命令安装firewalld
bash
sudo dnf install -y firewalld

执行如下命令启动firewalld,并设置开机启动
bash
sudo systemctl start firewalld # 立即启动
sudo systemctl enable firewalld # 开机自启
sudo systemctl status firewalld # 检查状态,应显示 "active (running)"

再次运行添加firewalld
css
sudo firewall-cmd --permanent --add-port=3000/tcp

我们用浏览器访问下我们的公网IP,发现还是不行,因为防火墙只管 ECS 内部,安全组管进出流量,我们要配置安全组
开放阿里云安全组(公网入口)
在控制台网络与安全组 
添加入方向规则 
我的访问配置,0.0.0.0/0,这样就可以任何地方都访问了,暂时不加限制, ECS有限制不同网络访问,访问你的服务器能力

这样再访问,浏览器就可以访问了

小结:整个过程还是挺简单的,虽然一些工具是第一次用,比如pm2,但是需要一点linux基础,去操作系统。再次总结下流程
- 新服务器初始化配置(安装git curl wget vim node)
- 上传/克隆你的 Express 项目代码 安装依赖 打包 运行
- 使用 PM2 守护进程
- 配置防火墙与安全组
- 开放阿里云安全组(公网入口)