使用阿里云ECS部署Express

这篇笔记📒,记录第一次使用阿里云ECS,部署Express应用的过程,还有踩的一些坑。主要步骤如下:

  1. 新服务器初始化配置(安装git curl wget vim)
  2. 安装 Node.js 与 npm
  3. 上传/克隆你的 Express 项目代码
  4. 运行 Express 服务
  5. 使用 PM2 守护进程
  6. 配置防火墙与安全组
  7. 开放阿里云安全组(公网入口)

买了一个阿里云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基础,去操作系统。再次总结下流程

  1. 新服务器初始化配置(安装git curl wget vim node)
  2. 上传/克隆你的 Express 项目代码 安装依赖 打包 运行
  3. 使用 PM2 守护进程
  4. 配置防火墙与安全组
  5. 开放阿里云安全组(公网入口)
相关推荐
Sincerelyplz4 小时前
【Apps SDK】OpenAI推出的Chatgpt与外部应用集成的工具
后端·openai·agent
回家路上绕了弯5 小时前
深入浅出:如何设计一个可靠的分布式 ID 生成器
分布式·后端
CornPrincess5 小时前
Java继承知识点(2025.10.24)
后端
白帽子凯哥哥5 小时前
SpringBoot + Elasticsearch实战:从零构建高性能搜索与数据分析平台
大数据·spring boot·后端·elasticsearch·搜索引擎·性能优化·聚合查询
又过一个秋5 小时前
【sylar-webserver】2 配置系统
后端
又过一个秋5 小时前
【sylar-webserver】1 日志系统
后端
成都第一深情IZZO5 小时前
工厂模式(使用Spring Bean)和 策略工厂模式 的区别
后端
该用户已不存在5 小时前
写了这么多年Java,这几个神仙技巧你用过吗?
java·后端
大雨淅淅5 小时前
【编程语言】Rust 入门
开发语言·后端·rust