Rocky Linux 9 + VMware + Node.js + Nginx 从零部署教程
目标:把一台全新的 Windows 电脑上的 VMware 虚拟机,从"什么都没有"搭建成一台可以部署 Node.js 后端服务和网页的 Linux 服务器。
本教程默认使用 Rocky Linux 9.x Minimal + VMware Workstation + Node.js 24 LTS + Nginx + PM2 。
操作习惯尽量保持 CentOS 风格,
yum、systemctl、firewall-cmd等命令仍然可以继续使用。
0. 最终会得到什么
完成本教程后,服务器结构大致如下:
text
Windows / 浏览器
│
│ SSH :22
│ HTTP :80
│ HTTPS :443
▼
┌────────────────────────────┐
│ Rocky Linux 9 │
│ │
│ Nginx :80 / :443 │
│ │ │
│ ├── 静态网页 │
│ │ Vue / React / HTML │
│ │ │
│ └── /api │
│ │ │
│ ▼ │
│ Node.js :3000 │
│ │ │
│ PM2 │
└────────────────────────────┘
建议最终环境:
text
Rocky Linux 9.x Minimal
Node.js 24 LTS
npm
pnpm
PM2
Nginx
Git
OpenSSH
firewalld
说明:本文为了降低第一次部署的复杂度,命令默认可以直接用
root执行。真正公网生产服务器建议后续创建普通部署用户,不长期用 root 运行 Node.js 服务。
第一部分:下载 Rocky Linux
1. 为什么不用 CentOS 7
CentOS 7 已经结束生命周期,不再正常提供官方安全更新和标准软件源。
新服务器不建议再安装:
text
CentOS 7
CentOS Linux 8
如果习惯以前的 CentOS / RHEL 操作方式,推荐:
text
Rocky Linux 9
Rocky Linux 与传统 CentOS 的操作习惯非常接近:
bash
yum install nginx
rpm -qa
systemctl status nginx
firewall-cmd --list-all
vi /etc/nginx/nginx.conf
这些仍然可以继续使用。
2. 下载哪个版本
推荐:
text
Rocky Linux 9.x
x86_64
Minimal ISO
当前教程编写时(2026-08)Rocky Linux 9 最新小版本为 9.8。
推荐下载文件:
text
Rocky-9-latest-x86_64-minimal.iso
或者明确版本:
text
Rocky-9.8-x86_64-minimal.iso
官方地址:
- Rocky Linux 官网:rockylinux.org/download
- Rocky 9 官方 ISO 目录:dl.rockylinux.org/pub/rocky/9...
如果官方下载慢,可以选择可信的国内高校镜像站下载 Rocky Linux 9 的 Minimal ISO。
不建议选择
text
boot.iso
因为它安装过程中需要大量在线下载。
也没有必要下载:
text
dvd.iso
它体积很大,对普通 Node.js Web 服务器来说没有必要。
第二部分:创建 VMware 虚拟机
3. 新建虚拟机
打开 VMware Workstation:
text
文件
→ 新建虚拟机
→ 典型(推荐)
加载刚刚下载的:
text
Rocky-9.x-x86_64-minimal.iso
4. VMware 没有 Rocky Linux 怎么选
如果 VMware 较新,优先选择:
text
Linux
→ Red Hat Enterprise Linux 9 64-bit
如果 VMware 比较旧,没有 Rocky / RHEL 9,可以选择:
text
Linux
→ CentOS 7 64 位
这个选项主要用于 VMware 预设虚拟硬件,并不代表虚拟机里真的只能安装 CentOS 7。
5. 推荐虚拟机配置
学习、开发和普通 Node.js 服务:
text
CPU:2 核
内存:4 GB
硬盘:50 GB
网络:NAT
如果以后同时运行:
text
Node.js
Nginx
MySQL
Redis
Docker
宿主机资源允许的话,可以调整为:
text
CPU:4 核
内存:8 GB
硬盘:60 GB+
6. 网络模式怎么选
推荐:NAT
第一次部署推荐:
text
NAT
结构:
text
互联网
│
Windows 宿主机
│
VMware NAT
│
Rocky Linux
优点:
- 虚拟机可以访问互联网
- Windows 宿主机可以 SSH 连接虚拟机
- 配置简单
- 很适合学习和本地开发
桥接模式
如果希望局域网里的其他电脑直接访问虚拟机,可以考虑桥接:
text
路由器
├── Windows
├── 手机
└── Rocky Linux 虚拟机
第一次部署建议先使用 NAT。
第三部分:安装 Rocky Linux
7. 启动安装
启动虚拟机后选择:
text
Install Rocky Linux 9.x
安装程序本身是图形化界面,这是正常的。
即使最终安装的是纯命令行服务器,安装阶段仍然可以看到鼠标、按钮和安装选项。
8. 软件安装类型
如果出现:
text
Software Selection
选择:
text
Minimal Install
不要选择:
text
Server with GUI
Workstation
Node.js 服务器一般不需要图形桌面。
Minimal 的优点:
- 占用资源少
- 后台服务少
- 更接近云服务器
- 攻击面更小
- 更适合 Node.js / Nginx
9. 磁盘
进入:
text
Installation Destination
第一次安装可以直接使用:
text
Automatic Partitioning
即自动分区。
10. 网络
进入:
text
Network & Host Name
确保网卡已经开启。
通常网卡名称为:
text
ens33
安装完成以后 Rocky Linux 9 默认使用 NetworkManager 管理网络,一般会自动通过 DHCP 获取 IP。
11. 设置 root 密码
设置一个 root 密码。
本地 VMware 学习环境可以直接使用 root 管理。
公网生产服务器建议以后创建普通管理员用户,并使用 SSH Key 登录。
12. 完成安装
点击:
text
Begin Installation
安装完成后:
text
Reboot System
如果 VMware 仍然从 ISO 启动,需要断开虚拟光驱中的 ISO。
正常启动后会看到:
text
Rocky Linux 9.x
localhost login:
登录:
text
login: root
Password: ********
成功后:
bash
[root@localhost ~]#
说明系统安装完成。
第四部分:检查网络
13. 查看 IP
执行:
bash
ip addr
简写:
bash
ip a
通常会看到:
text
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP>
inet 192.168.xxx.xxx/24
例如:
text
inet 192.168.190.131/24
那么:
text
192.168.190.131
就是当前虚拟机的 IPv4 地址。
也可以:
bash
hostname -I
14. 检查默认路由
bash
ip route
应该存在类似:
text
default via 192.168.xxx.2 dev ens33
15. 测试互联网
bash
ping -c 3 8.8.8.8
再测试 DNS:
bash
ping -c 3 www.baidu.com
两者都正常,说明网络已经可用。
第五部分:配置 SSH
16. 查看 SSH 服务
执行:
bash
systemctl status sshd
如果显示:
text
Active: active (running)
说明 SSH 已经启动。
如果没有启动:
bash
systemctl enable --now sshd
17. 查看 SSH 端口
bash
ss -lntp | grep :22
正常会看到:
text
LISTEN ... 0.0.0.0:22
18. 开放 SSH 防火墙
查看:
bash
firewall-cmd --list-services
如果没有 ssh:
bash
firewall-cmd --permanent --add-service=ssh
firewall-cmd --reload
19. Windows SSH 连接
假设服务器 IP:
text
192.168.190.131
Windows PowerShell:
bash
ssh root@192.168.190.131
第一次可能出现:
text
Are you sure you want to continue connecting?
输入:
text
yes
再输入 Linux 密码。
成功后就可以不再一直使用 VMware 控制台,而通过 SSH 管理服务器。
第六部分:系统初始化
20. 更新系统
bash
yum update -y
Rocky Linux 9 实际底层使用 dnf,所以也可以:
bash
dnf update -y
为了保持 CentOS 使用习惯,本教程主要使用 yum。
21. 安装基础工具
Minimal 系统很多工具默认没有安装。
一次安装常用工具:
bash
yum install -y \
curl \
wget \
git \
vim \
tar \
xz \
unzip \
zip
这里的:
text
tar
xz
很重要。
NVM 下载 Node.js 后需要解压,如果没安装 tar,可能出现:
text
-bash: tar: 未找到命令
nvm: install failed
第七部分:安装 NVM
22. 为什么使用 NVM
不建议直接把 Node.js 版本绑死在系统 yum 包上。
使用 NVM 可以:
text
安装多个 Node 版本
切换 Node 版本
升级 Node
设置默认 Node 版本
例如:
bash
nvm install 24
nvm use 24
nvm install 22
nvm use 22
23. 安装 NVM
当前教程使用 NVM 0.40.3。
普通官方安装方式:
bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
但是某些网络环境访问 GitHub git clone 不稳定,可能出现:
text
RPC failed
HTTP/2 stream was not closed cleanly
Connection reset by peer
Failed to clone nvm repo
为了减少这个问题,推荐直接使用 script 模式:
bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | METHOD=script bash
安装完成后:
bash
source ~/.bashrc
检查:
bash
command -v nvm
应该输出:
text
nvm
再执行:
bash
nvm --version
例如:
text
0.40.3
24. NVM 安装失败排查
情况 1:nvm: command not found
检查:
bash
ls -la ~/.nvm
如果目录存在:
bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
然后:
bash
nvm --version
情况 2:GitHub clone HTTP/2 报错
可以先尝试:
bash
git config --global http.version HTTP/1.1
或者直接使用前面推荐的:
bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | METHOD=script bash
第八部分:安装 Node.js
25. 安装 Node.js 24 LTS
bash
nvm install 24
设置默认版本:
bash
nvm alias default 24
启用:
bash
nvm use 24
检查:
bash
node -v
npm -v
当前教程编写时 Node.js 24 属于 LTS 系列。
26. 查看 Node 安装位置
bash
which node
使用 root + NVM 时通常类似:
text
/root/.nvm/versions/node/v24.x.x/bin/node
NVM 是"按用户安装"的。
也就是说:
text
root 的 NVM ≠ 普通用户的 NVM
以后如果创建 deploy 用户,需要在 deploy 用户下单独安装 NVM / Node。
第九部分:安装 pnpm 和 PM2
27. 安装
bash
npm install -g pnpm pm2
检查:
bash
pnpm -v
pm2 -v
28. PM2 是干什么的
直接运行:
bash
node server.js
终端一关闭,Node 程序就会停止。
PM2 可以:
text
后台运行 Node
服务异常自动重启
查看日志
管理多个 Node 服务
开机自动启动
常用命令:
bash
pm2 list
pm2 status
pm2 logs
pm2 restart app-name
pm2 stop app-name
pm2 delete app-name
第十部分:安装 Nginx
29. 安装
bash
yum install -y nginx
30. 启动并设置开机启动
bash
systemctl enable --now nginx
检查:
bash
systemctl status nginx
正常:
text
Active: active (running)
31. 开放 HTTP / HTTPS
bash
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
检查:
bash
firewall-cmd --list-services
应该包含:
text
ssh http https
32. 查看 Nginx 80 端口
bash
ss -lntp | grep :80
33. 浏览器测试 Nginx
假设服务器 IP:
text
192.168.190.131
Windows 浏览器访问:
text
http://192.168.190.131
能看到 Nginx / Rocky 默认页面,就说明:
text
Windows
↓
Rocky Linux :80
↓
Nginx
已经成功。
第十一部分:部署一个最简单的 Node.js 服务
34. 创建项目目录
bash
mkdir -p /opt/node-demo
cd /opt/node-demo
35. 创建 server.js
bash
vim server.js
内容:
js
const http = require('http');
const host = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
res.writeHead(200, {
'Content-Type': 'application/json; charset=utf-8',
});
res.end(
JSON.stringify({
success: true,
message: 'Node.js server is running',
path: req.url,
}),
);
});
server.listen(port, host, () => {
console.log(`Node server running at http://${host}:${port}`);
});
这里故意监听:
text
127.0.0.1:3000
而不是:
text
0.0.0.0:3000
因为正式部署时不需要把 Node 的 3000 端口暴露到公网。
只让 Nginx 从服务器内部访问即可。
36. 直接运行测试
bash
node server.js
另外打开一个 SSH 终端:
bash
curl http://127.0.0.1:3000
正常会返回:
json
{
"success": true,
"message": "Node.js server is running",
"path": "/"
}
测试完成按:
text
Ctrl + C
停止 Node。
第十二部分:使用 PM2 管理 Node
37. PM2 启动
bash
cd /opt/node-demo
pm2 start server.js --name node-demo
查看:
bash
pm2 list
日志:
bash
pm2 logs node-demo
测试:
bash
curl http://127.0.0.1:3000
38. 保存 PM2 服务列表
bash
pm2 save
39. PM2 开机自启
执行:
bash
pm2 startup systemd
PM2 会输出一条需要你继续执行的命令。
把 PM2 输出的那条命令完整复制并执行,不要自己猜。
执行完成后:
bash
pm2 save
验证:
bash
reboot
服务器重新启动后:
bash
pm2 list
确认 node-demo 仍然在线。
第十三部分:Nginx 反向代理 Node.js
40. 创建 Nginx 配置
bash
vim /etc/nginx/conf.d/node-demo.conf
写入:
nginx
server {
listen 80;
server_name _;
location /api/ {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
41. Rocky Linux / SELinux 必做检查
Rocky Linux 默认启用 SELinux。
Nginx 反向代理 Node 时,如果浏览器出现:
text
502 Bad Gateway
而 Node 服务实际上正常,很可能是 SELinux 不允许 Nginx 主动连接网络服务。
执行:
bash
setsebool -P httpd_can_network_connect 1
这是 Rocky / RHEL 系部署 Nginx 反向代理时很重要的一步。
42. 检查 Nginx 配置
bash
nginx -t
应该:
text
syntax is ok
test is successful
然后:
bash
systemctl reload nginx
43. 浏览器测试
假设 IP:
text
192.168.190.131
浏览器访问:
text
http://192.168.190.131/api/
应该可以看到 Node 返回的 JSON。
此时完整链路:
text
浏览器
│
│ :80
▼
Nginx
│
│ /api
▼
127.0.0.1:3000
│
▼
Node.js
│
▼
PM2
Node 的 3000 端口不需要对外开放。
第十四部分:部署静态网页
44. 网页文件放哪里
Rocky Linux Nginx 默认静态目录通常可以使用:
text
/usr/share/nginx/html
例如 Vue / React:
本地执行:
bash
pnpm build
得到:
text
dist/
将 dist 中的文件上传到:
text
/usr/share/nginx/html/
45. Windows 使用 scp 上传
例如:
bash
scp -r dist/* root@192.168.190.131:/usr/share/nginx/html/
然后浏览器:
text
http://192.168.190.131
即可访问网页。
46. Vue / React History 路由
如果是 Vue Router / React Router history 模式,需要:
nginx
location / {
try_files $uri $uri/ /index.html;
}
完整示例:
nginx
server {
listen 80;
server_name _;
root /usr/share/nginx/html;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:3000/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
配置后:
bash
nginx -t
systemctl reload nginx
第十五部分:真实项目的推荐目录
以后可以约定:
text
/opt/apps/
├── api/
│ ├── package.json
│ ├── src/
│ └── ...
│
└── other-node-service/
静态网页:
text
/usr/share/nginx/html/
Nginx 配置:
text
/etc/nginx/conf.d/
例如:
text
/etc/nginx/conf.d/my-project.conf
第十六部分:Git 部署 Node 项目
47. 克隆代码
bash
mkdir -p /opt/apps
cd /opt/apps
git clone <你的Git仓库地址>
cd <项目目录>
48. 安装依赖
pnpm:
bash
pnpm install
或者 npm:
bash
npm install
如果是 TypeScript / NestJS 等需要构建:
bash
pnpm build
49. PM2 启动真实项目
项目如果启动入口:
text
dist/main.js
可以:
bash
pm2 start dist/main.js --name my-api
如果 package.json 有:
json
{
"scripts": {
"start": "node dist/main.js"
}
}
也可以:
bash
pm2 start npm --name my-api -- start
最后:
bash
pm2 save
第十七部分:常用服务器命令
50. 系统
bash
# 系统版本
cat /etc/redhat-release
# 内核
uname -r
# IP
ip addr
# 路由
ip route
# 磁盘
df -h
# 内存
free -h
# CPU / 进程
top
51. 服务
bash
systemctl status nginx
systemctl restart nginx
systemctl reload nginx
systemctl enable nginx
systemctl status sshd
systemctl restart sshd
52. 端口
bash
ss -lntp
指定端口:
bash
ss -lntp | grep :80
ss -lntp | grep :443
ss -lntp | grep :3000
53. Nginx
bash
nginx -t
systemctl status nginx
systemctl reload nginx
systemctl restart nginx
nginx -v
主要配置:
text
/etc/nginx/nginx.conf
项目配置:
text
/etc/nginx/conf.d/*.conf
日志:
text
/var/log/nginx/access.log
/var/log/nginx/error.log
查看:
bash
tail -f /var/log/nginx/error.log
54. PM2
bash
pm2 list
pm2 logs
pm2 logs my-api
pm2 restart my-api
pm2 stop my-api
pm2 delete my-api
pm2 save
55. Node
bash
node -v
npm -v
pnpm -v
nvm list
nvm current
56. 防火墙
bash
firewall-cmd --list-all
firewall-cmd --list-services
firewall-cmd --list-ports
开放端口:
bash
firewall-cmd --permanent --add-port=8080/tcp
firewall-cmd --reload
删除端口:
bash
firewall-cmd --permanent --remove-port=8080/tcp
firewall-cmd --reload
Node 通过 Nginx 代理时通常 不需要开放 3000。
正常公网只需要:
text
22 SSH
80 HTTP
443 HTTPS
第十八部分:排查顺序
如果网页访问不了,不要乱改配置,按照下面顺序排查。
57. 第一层:服务器 IP
bash
ip addr
确认 IPv4 存在。
58. 第二层:Nginx 是否运行
bash
systemctl status nginx
59. 第三层:80 是否监听
bash
ss -lntp | grep :80
60. 第四层:防火墙
bash
firewall-cmd --list-services
确保有:
text
http
https
61. 第五层:Node 是否运行
bash
pm2 list
以及:
bash
curl http://127.0.0.1:3000
如果本机 curl 都不通,问题在 Node,而不是 Nginx。
62. 第六层:Nginx 配置
bash
nginx -t
然后:
bash
tail -f /var/log/nginx/error.log
63. 第七层:SELinux
查看:
bash
getenforce
如果:
text
Enforcing
Nginx 代理 Node 返回 502,检查:
bash
setsebool -P httpd_can_network_connect 1
不建议为了省事直接永久关闭 SELinux。
第十九部分:VMware IP 变化怎么办
NAT 模式一般通过 DHCP 分配 IP:
text
192.168.xxx.xxx
虚拟机重启后 IP 有可能变化。
本地学习阶段,重新执行:
bash
ip addr
查看新 IP 即可。
如果以后确实需要固定 IP,可以再使用 NetworkManager:
bash
nmcli connection show
nmcli device status
根据 VMware NAT 所在网段设置静态 IP。
不要直接复制别人固定 IP 的命令,网关、DNS、网段必须以你自己的 VMware 网络为准。
第二十部分:迁移到阿里云 ECS
这套 VMware 环境以后可以基本原样迁移到阿里云。
建议阿里云系统也选择:
text
Rocky Linux 9
这样:
text
本地 VMware
Rocky Linux 9
Node 24
Nginx
PM2
与:
text
阿里云 ECS
Rocky Linux 9
Node 24
Nginx
PM2
尽量保持一致。
64. 阿里云与 VMware 最大区别
VMware:
text
Windows
↓
VMware NAT
↓
Rocky Linux
阿里云:
text
互联网
↓
阿里云安全组
↓
ECS 公网 IP
↓
Rocky Linux firewalld
↓
Nginx
↓
Node.js
因此阿里云除了 Rocky Linux 自己的防火墙,还需要配置:
text
阿里云安全组
至少通常需要:
text
22 SSH
80 HTTP
443 HTTPS
不要把数据库和 Node 内部端口随便暴露到公网。
第二十一部分:生产服务器建议
真正公网服务器建议逐步做到:
text
1. 不长期使用 root 跑 Node
2. 创建 deploy / app 用户
3. SSH 使用密钥登录
4. 限制 SSH 密码登录
5. Node 只监听 127.0.0.1
6. 外部流量统一经过 Nginx
7. 只开放 22 / 80 / 443
8. 配置 HTTPS
9. 定期更新 Rocky Linux 安全补丁
10. 做数据库和项目数据备份
例如创建普通用户:
bash
useradd -m deploy
passwd deploy
usermod -aG wheel deploy
切换:
bash
su - deploy
然后在该用户下安装自己的 NVM / Node / PM2。
第二十二部分:域名和 HTTPS(上线时)
正式服务器一般:
text
域名
↓
DNS A记录
↓
阿里云公网IP
↓
Nginx :443
↓
Node.js
配置域名后,把 Nginx:
nginx
server_name _;
换成:
nginx
server_name example.com www.example.com;
HTTPS 可以使用可信 CA 证书或 Let's Encrypt。
完成后:
text
https://example.com
访问服务器。
第二十三部分:完整安装速查
已经安装好 Rocky Linux 并 SSH 登录后,基础环境可以按以下顺序执行。
65. 基础工具
bash
yum update -y
yum install -y \
curl \
wget \
git \
vim \
tar \
xz \
unzip \
zip
66. NVM
bash
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | METHOD=script bash
source ~/.bashrc
nvm --version
67. Node.js
bash
nvm install 24
nvm alias default 24
nvm use 24
node -v
npm -v
68. pnpm + PM2
bash
npm install -g pnpm pm2
pnpm -v
pm2 -v
69. Nginx
bash
yum install -y nginx
systemctl enable --now nginx
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
nginx -v
systemctl status nginx
70. SELinux 允许 Nginx 反代 Node
bash
setsebool -P httpd_can_network_connect 1
71. 最终检查
bash
cat /etc/redhat-release
ip addr
node -v
npm -v
pnpm -v
pm2 -v
nginx -v
git --version
systemctl status sshd
systemctl status nginx
firewall-cmd --list-services
第二十四部分:部署完成检查清单
第一次部署时,从上到下确认:
- Rocky Linux 9.x Minimal 已安装
- VMware 网络使用 NAT
-
ip addr可以看到 IPv4 - 可以访问互联网
- SSH 服务正常
- Windows 可以 SSH 登录
- 基础工具已安装
- NVM 已安装
- Node.js 24 已安装
- npm 正常
- pnpm 正常
- PM2 正常
- Nginx 已安装
- Nginx 已设置开机启动
- 防火墙开放 SSH / HTTP / HTTPS
- 浏览器可以访问 Nginx
- Node 服务可以通过
127.0.0.1:3000访问 - Node 服务已经交给 PM2 管理
-
pm2 save已执行 - PM2 开机启动已配置
- Nginx
/api已反向代理 Node - SELinux 已允许 Nginx 网络代理
- 静态网页可以正常访问
- Vue / React History 路由已配置
try_files - 正式上线时只暴露必要端口
第二十五部分:牢记这张部署关系图
text
用户浏览器
│
HTTP / HTTPS
80 / 443
│
▼
┌───────────┐
│ Nginx │
└─────┬─────┘
│
┌────────────┴────────────┐
│ │
▼ ▼
Vue / React / HTML /api 请求
静态文件 │
▼
┌───────────────┐
│ Node.js :3000 │
└───────┬───────┘
│
▼
PM2
对公网:
text
开放:22 / 80 / 443
服务器内部:
text
Node:127.0.0.1:3000
这是非常常见、也非常适合普通 Node.js Web 服务的部署结构。
第二十五部分:安装 Redis
72. 安装 Redis
Rocky Linux 9 可以直接通过系统模块安装 Redis。
先查看可用版本:
bash
dnf module list redis
安装 Redis 7:
bash
dnf module install redis:7 -y
启动并设置开机启动:
bash
systemctl enable --now redis
检查状态:
bash
systemctl status redis
查看版本:
bash
redis-server --version
测试:
bash
redis-cli ping
正常返回:
text
PONG
73. 设置 Redis 密码
Redis 配置文件:
text
/etc/redis/redis.conf
如果没有安装 Vim:
bash
yum install -y vim
编辑配置:
bash
vim /etc/redis/redis.conf
在 Vim 中按 Esc,然后搜索:
text
/requirepass
按 n 可以继续查找下一个匹配项。真正需要修改的是类似:
conf
# requirepass foobared
改成:
conf
requirepass 你的Redis密码
保存退出:
text
Esc
:wq
重启 Redis:
bash
systemctl restart redis
不带密码测试:
bash
redis-cli ping
此时应该返回:
text
NOAUTH Authentication required.
进入 Redis:
bash
redis-cli
认证:
text
AUTH 你的Redis密码
正常返回:
text
OK
再执行:
text
PING
返回:
text
PONG
说明密码已经生效。
本地 VMware 开发环境可以使用便于记忆的密码;正式公网服务器建议使用长度更长、组合更复杂的密码。
74. Redis 不建议开放公网端口
如果 Node.js 与 Redis 在同一台服务器:
text
Node.js
↓
127.0.0.1:6379
↓
Redis
通常不需要开放 6379。
检查绑定配置:
bash
grep "^bind" /etc/redis/redis.conf
建议保持仅本机访问,例如:
conf
bind 127.0.0.1 -::1
Node.js 连接示例:
js
{
host: '127.0.0.1',
port: 6379,
password: '你的Redis密码'
}
第二十六部分:安装 MySQL
75. 查看 MySQL 可用版本
bash
dnf module list mysql
Rocky Linux 9 建议优先使用 MySQL 8.4 LTS。
安装:
bash
dnf module install mysql:8.4/server -y
76. 启动 MySQL
bash
systemctl enable --now mysqld
检查:
bash
systemctl status mysqld
查看版本:
bash
mysql --version
77. MySQL 初始化
可以使用:
bash
mysql_secure_installation
它会引导设置:
text
root 密码
匿名用户
root 远程登录
测试数据库
权限表刷新
如果交互过程中终端状态异常,甚至 Ctrl + C / Ctrl + Z 都无响应,可以直接关闭当前终端并重新 SSH 登录。MySQL 服务本身通常不会因此损坏。
不想继续使用交互脚本,也可以直接手动完成下面的初始化操作。
78. 本地开发环境降低 MySQL 密码强度
如果只是本地 VMware 开发环境,不想设置很复杂的密码,可以先登录:
bash
mysql -uroot
如果 root 已经有密码:
bash
mysql -uroot -p
查看密码策略:
sql
SHOW VARIABLES LIKE 'validate_password%';
将策略降低为 LOW,并把最小长度设置为 4:
sql
SET GLOBAL validate_password.policy = LOW;
SET GLOBAL validate_password.length = 4;
然后设置 root 密码:
sql
ALTER USER 'root'@'localhost'
IDENTIFIED BY '你的密码';
刷新权限:
sql
FLUSH PRIVILEGES;
退出:
sql
exit;
重新登录验证:
bash
mysql -uroot -p
SET GLOBAL修改的密码策略在 MySQL 重启后可能恢复默认。正式阿里云 / 公网服务器建议重新使用强密码策略。
79. 手动完成 MySQL 基础安全初始化
登录:
bash
mysql -uroot -p
删除匿名用户:
sql
DROP USER IF EXISTS ''@'localhost';
删除测试数据库:
sql
DROP DATABASE IF EXISTS test;
刷新权限:
sql
FLUSH PRIVILEGES;
80. 创建 Node.js 项目数据库
例如项目名叫 blog:
sql
CREATE DATABASE blog
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
查看:
sql
SHOW DATABASES;
81. 不要让 Node.js 使用 root 账号
创建业务账号:
sql
CREATE USER 'blog'@'127.0.0.1'
IDENTIFIED BY '你的数据库密码';
授权:
sql
GRANT ALL PRIVILEGES
ON blog.*
TO 'blog'@'127.0.0.1';
刷新:
sql
FLUSH PRIVILEGES;
Node.js 配置示例:
js
{
host: '127.0.0.1',
port: 3306,
user: 'blog',
password: '你的数据库密码',
database: 'blog'
}
82. MySQL 不建议直接开放公网
如果 Node.js 与 MySQL 在同一台服务器:
text
Node.js
↓
127.0.0.1:3306
↓
MySQL
通常不需要开放 3306。
正式公网服务器建议只让业务程序或可信内网访问数据库。
第二十七部分:加入 Redis / MySQL 后的完整服务器结构
text
Rocky Linux 9.x
│
├── SSH :22
│
├── Nginx :80 / :443
│ ├── Vue / React / HTML 静态网页
│ └── /api → Node.js
│
├── Node.js :3000
│ └── PM2
│
├── MySQL :3306
│ └── 建议仅本机访问
│
└── Redis :6379
└── 建议仅本机访问
对公网通常只需要开放:
text
22
80
443
一般不需要开放:
text
3000
3306
6379
第二十八部分:Redis / MySQL 检查清单
- Redis 7 已安装
- Redis 已设置开机启动
-
redis-cli ping可以正常返回 - Redis 已设置密码
- Redis 6379 未直接暴露公网
- MySQL 8.4 已安装
- MySQL 已设置开机启动
- root 可以使用密码正常登录
- 本地开发环境的密码策略已按需要调整
- 已删除匿名用户和 test 数据库
- 已创建 Node.js 专用数据库
- 已创建 Node.js 专用数据库账号
- MySQL 3306 未直接暴露公网
参考资料
- Rocky Linux 官网:rockylinux.org/
- Rocky Linux 9 ISO:dl.rockylinux.org/pub/rocky/9...
- NVM:github.com/nvm-sh/nvm
- Node.js:nodejs.org/
- Nginx:nginx.org/
文档版本
text
教程版本:1.0
更新时间:2026-08-26
推荐基线:
- Rocky Linux 9.x(当前 9.8)
- Node.js 24 LTS
- NVM 0.40.3
- Nginx
- PM2
- VMware Workstation
以后即使 Rocky Linux 9 的小版本或 Node.js 24 的小版本发生变化,整体安装和部署流程仍然基本一致。