部署 Linux + Node.js + Nginx + MySQL 的架构属于经典的 LNMN(或 LNMP)组合,广泛应用于中小型网站、API 服务和微服务后端。
具体的配置推荐取决于你的业务规模(并发量)、数据量以及预算。以下我将分场景提供三套主流配置方案,并附带关键优化建议。
一、核心组件版本选择建议
在选型硬件前,先确定软件版本的稳定性:
- 操作系统 (Linux): Ubuntu 22.04 LTS 或 CentOS Stream 9 / Rocky Linux 9(长期支持版最稳妥)。
- Node.js: 使用 LTS (Long Term Support) 版本(如 v20.x 或 v22.x),避免使用最新版以防兼容性问题。
- 建议: 使用
nvm管理版本,方便切换。
- 建议: 使用
- Nginx: 稳定版 (Stable) 即可,无需追求最新版,除非有特定新特性需求。
- MySQL: 推荐 MySQL 8.0 或 MariaDB 10.11+。若对云数据库依赖度高,也可考虑托管服务(RDS)。
二、服务器配置推荐方案
方案 A:开发测试 / 个人项目 / 低流量演示站
| 适用场景:日 PV < 1,000,主要用于学习、Demo 展示或内部工具。 | 组件 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU | 1 ~ 2 核 | Node.js 是单线程事件循环,多核优势不明显,但需预留一点给系统进程。 | |
| 内存 | 2 GB | 底线要求。Node.js + MySQL + OS 启动后,1GB 极易 OOM(内存溢出)导致崩溃。 | |
| 硬盘 | 20~40 GB SSD | 系统盘 + 应用代码 + 小量日志。SSD 是必须的,机械硬盘会导致 I/O 瓶颈。 | |
| 带宽 | 3~5 Mbps | 适合文本和少量图片传输。 | |
| 预估成本 | 约 ¥30 – ¥60/月 | 适合阿里云/腾讯云轻量应用服务器入门档。 |
方案 B:生产环境 / 中小企业业务 / 中等并发
| 适用场景:日 PV 1k~10w,有稳定的 API 调用,包含用户登录、数据库读写操作。 | 组件 | 推荐配置 | 说明 |
|---|---|---|---|
| CPU | 2 ~ 4 核 | 应对 Node.js 处理逻辑时的 CPU 密集型任务(如图像处理、加密)。 | |
| 内存 | 4 GB ~ 8 GB | 关键指标。MySQL 需要缓存 Buffer Pool,Nginx 处理静态资源也需要内存。4GB 是起步,8GB 更从容。 | |
| 硬盘 | 40~80 GB SSD/NVMe | 必须使用高性能 SSD。建议将 /var/lib/mysql 单独挂载到高速盘。 |
|
| 带宽 | 5~10 Mbps (按量付费) | 建议开启 CDN 提速静态资源,节省带宽成本。 | |
| 预估成本 | 约 ¥150 – ¥400/月 | 适合标准云服务器实例。 |
方案 C:高并发 / 电商大促 / 复杂业务逻辑
| 适用场景:日 PV > 10w,高 QPS,对延迟敏感,数据量大。 | 组件 | 推荐配置 | 说明 |
|---|---|---|---|
| 架构策略 | 分离部署 | 强烈建议不要将所有服务跑在一台机器上。 | |
| 计算层 | 2~4 台 (2 核 4G) | 运行 Node.js + Nginx (负载均衡)。通过 Nginx 反向X_X分发请求。 | |
| 数据层 | 1 台 (4 核 8G+) | 专门运行 MySQL。开启主从复制,保障数据安全。 | |
| 缓存层 | Redis (可选) | 引入 Redis 做会话存储和热点数据缓存,极大减轻 MySQL 压力。 | |
| 存储层 | 对象存储 (OSS/S3) | 图片、视频等大文件不存服务器本地,直接推送到对象存储。 |
三、关键性能优化建议
仅仅买好配置是不够的,正确的配置和优化能让性能翻倍:
1. Node.js 优化
- 集群模式 (Cluster Mode): Node.js 默认只利用一个 CPU 核心。务必使用
cluster模块或 PM2 来启动多个 Worker 进程,充分利用多核 CPU。# PM2 示例:启动 4 个进程 pm2 start app.js -i 4 - 进程守护: 必须配合 PM2 或 Systemd 使用,确保服务崩溃后自动重启。
2. Nginx 优化
- 静态资源压缩: 开启
gzip或brotli压缩,减少传输体积。 - 缓存策略: 对 CSS/JS/图片设置较长的
expires或cache-control头。 - 连接数调优: 调整
worker_connections以适应高并发(默认 1024 通常不够,可设为 10240+,需配合ulimit修改)。 - 反向X_X: 作为 Node.js 的前置网关,处理 SSL 卸载和动静分离。
3. MySQL 优化
- Buffer Pool: 根据内存大小调整
innodb_buffer_pool_size。如果是专用 DB 机,建议设置为物理内存的 50%~70%。 - 索引优化: 检查慢查询日志 (
slow query log),为高频查询字段添加索引。 - 连接池: Node.js 端使用连接池(如
mysql2/promise或Sequelize配置pool),避免频繁建立 TCP 连接。
4. 安全与备份
- 防火墙: 仅开放 80/443 (Web), 22 (SSH),严禁直接暴露 MySQL 端口 (3306) 到公网。
- SSL 证书: 必配 HTTPS,可使用 Let’s Encrypt 免费证书。
- 自动备份: 编写 Crontab 脚本,每天凌晨自动备份 MySQL 数据并上传至异地存储(如 OSS/S3)。
四、总结与决策路径
- 如果你刚开始创业或只是练手:选择 方案 A (2GB 内存),重点放在代码质量和架构设计上,等流量起来再升级。
- 如果是正式商业项目:直接上 方案 B (4GB+ 内存),并配置 PM2 集群模式。
- 如果预期流量巨大:不要试图用一台服务器扛下来,采用 方案 C (拆分架构),将数据库独立出来,并引入 Redis 缓存。
特别提示:对于生产环境,“内存”往往比"CPU"更重要。Node.js 和 MySQL 都是内存大户,宁可少配 CPU,也要保证内存充足,否则频繁的 Swap(交换分区)会导致系统响应极慢甚至宕机。
CLOUD技术博