部署 Linux + Node.js + Nginx + MySQL 的架构非常经典,通常用于中小型网站、API 服务或 SaaS 应用。具体的配置推荐完全取决于你的业务场景(是个人博客、初创公司 MVP,还是高并发生产环境)。
为了给出最具参考价值的建议,我将方案分为三个层级:入门/开发级、标准生产级(最常用)和高可用/扩展级。
1. 核心组件版本选型建议
在讨论硬件之前,先确定软件栈的版本,这直接影响性能和兼容性:
- 操作系统 (OS): Ubuntu 22.04 LTS 或 CentOS Stream 9 / Rocky Linux 9。
- 理由: 社区支持好,包管理成熟,长期维护。
- Node.js: v18 LTS 或 v20 LTS。
- 理由: 避开 v16(已停止维护),v18/v20 性能强劲且生态稳定。
- Nginx: 1.24+ 或 1.25+。
- 理由: 处理高并发连接能力强,配置灵活。
- MySQL: 8.0.x。
- 理由: 功能丰富,性能优化比 5.7 更好;若对兼容性要求极高可考虑 MariaDB 10.11。
- PM2: 用于 Node.js 进程管理(必装)。
- SSL: Let's Encrypt (Certbot)。
2. 服务器配置推荐方案
方案 A:入门/测试/低流量个人项目
适用场景:个人博客、内部工具、日 PV < 10,000 的小站。
- CPU: 1 - 2 核
- 内存: 1 GB - 2 GB
- 硬盘: 20 GB - 40 GB SSD
- 带宽: 1 Mbps - 3 Mbps
- 分析:
- Node.js 本身比较吃内存,1GB 内存运行时可能比较紧张,建议开启 Swap 分区(虚拟内存)防止 OOM(内存溢出)。
- MySQL 在 1GB 内存下需限制
innodb_buffer_pool_size。 - Nginx 作为反向X_X,资源占用极低。
方案 B:标准生产级(推荐大多数初创/MVP)
适用场景:商业项目、日 PV 1 万 - 10 万、有中等并发 API 请求。
- CPU: 2 - 4 核
- 内存: 4 GB - 8 GB (关键指标)
- 硬盘: 60 GB - 100 GB NVMe SSD
- 带宽: 5 Mbps - 10 Mbps (或按流量计费)
- 分析:
- 内存黄金法则: Node.js 进程 + MySQL 缓冲池 + 系统开销。4GB 内存允许 MySQL 分配 1-2GB 缓存,Node.js 也有足够空间运行多个实例。
- 磁盘: 务必选择 SSD/NVMe,数据库 I/O 是瓶颈所在。
- 架构建议: 此时建议将 MySQL 独立部署(或使用云厂商的 RDS 服务),避免与 Node.js 争抢 CPU 资源。
方案 C:高可用/高并发/企业级
适用场景:电商大促、高频交易、日 PV > 50 万、需要 99.9% 可用性。
- 架构模式: 分离部署(多节点)。
- Web 层 (Node.js + Nginx): 2 台及以上服务器(负载均衡),配置 4 核 8G 起。
- 数据库层 (MySQL): 专用服务器或云 RDS(主从复制),配置 8 核 16G 起,使用 RAID 10 或高性能云盘。
- 缓存层 (Redis): 单独部署,解决热点数据读取。
- 关键配置:
- 使用 Keepalived + LVS/Nginx 做负载均衡。
- MySQL 开启主从同步,读写分离。
- 引入对象存储 (OSS/S3) 存放静态资源,减轻服务器带宽压力。
3. 关键优化配置要点
无论选择哪种配置,以下优化能显著提升稳定性:
A. Node.js 优化
不要只启动一个 app.js,建议使用 PM2 并配置集群模式:
pm2 start app.js -i max
- 原理: 利用多核 CPU 并行处理请求,避免单线程阻塞。
- 内存限制: 如果内存有限,设置
max_memory_restart_mb防止单个进程崩溃导致整个服务挂掉。
B. Nginx 调优
在 nginx.conf 中针对高并发调整:
worker_processes: 设置为auto或 CPU 核心数。worker_connections: 默认 1024,可根据需求调至 4096 或更高(受限于系统文件句柄数ulimit -n)。- Gzip: 开启压缩,减少传输体积。
- Buffer: 适当调整
proxy_buffer_size和proxy_buffers,平衡内存与性能。
C. MySQL 调优 (my.cnf)
根据物理内存动态调整(以 4GB 机器为例):
[mysqld]
# 最大连接数,根据并发调整
max_connections = 200
# InnoDB 缓冲池大小 (核心参数,建议占物理内存的 50%-70%)
innodb_buffer_pool_size = 2G
# 日志配置
log_error = /var/log/mysql/error.log
slow_query_log = 1
long_query_time = 2
D. 安全加固
- 防火墙: 仅开放 80/443 (HTTP/HTTPS) 和 SSH (22),禁止直接暴露 MySQL (3306) 端口。
- SSH 安全: 禁用 root 登录,改用密钥认证,修改默认端口。
- HTTPS: 强制全站 HTTPS,使用 Nginx 配置 HSTS。
- 备份: 配置定时脚本(Cron),每日自动备份 MySQL 数据到远程对象存储或本地其他目录。
4. 总结与建议
| 维度 | 推荐配置 | 备注 |
|---|---|---|
| 起步阶段 | 2 核 4G SSD | 性价比最高,适合 90% 的初期项目 |
| Node 进程 | PM2 集群模式 | 充分利用多核 CPU |
| 数据库 | MySQL 8.0 + 独立实例 | 生产环境强烈建议数据库与 App 分离 |
| 静态资源 | CDN 提速 | 图片/CSS/JS 走 CDN,节省服务器带宽 |
| 监控 | Prometheus + Grafana | 监控 CPU、内存、QPS,及时发现异常 |
最终建议:
如果你是第一次部署,建议选择 2 核 4GB 内存 的云服务器(如阿里云、腾讯云、AWS t3.medium 等),安装 Ubuntu 22.04。这种配置在成本可控的前提下,能够支撑相当不错的并发量。随着业务增长,优先通过水平扩展(增加服务器数量)而非单纯堆砌单机配置来解决瓶颈。
CLOUD云计算