云计算百科
云计算领域专业知识百科平台

如何在 Linux 服务器上部署 MERN 全栈项目(MongoDB + Express + React + Node.js)

在生产环境中稳定、高效地部署 MERN 全栈项目是一项系统工程。A5数据从实战角度出发,结合具体的硬件配置、环境搭建、性能调优和常见问题处理,详尽展现完整部署过程,包括运行环境、技术选型、命令与配置示例、评测数据等内容。

本文以 Ubuntu 22.04 LTS 为示例系统,假设你已经有一台可通过 SSH 登录的 Linux 服务器。


一、预备条件与硬件配置建议

在进入详细步骤前,推荐的Linux香港服务器www.a5idc.com规格如下(适用于中小型生产站点):

项目推荐规格说明
CPU 4 核以上 Node.js 多进程支持
内存 8 GB DDR4 MongoDB 内存需求较高
磁盘 100 GB NVMe SSD 写入性能、数据库索引存储
带宽 100 Mbps / 专线优先 大流量场景建议更高
操作系统 Ubuntu 22.04 LTS x86_64 长期支持、安全更新及时
公网 IP 必须 对外访问
防火墙 UFW 或 iptables 端口控制

若你有更高访问量需求(并发数 > 500),建议升级至 8 核 CPU、32GB RAM、1TB NVMe,并考虑负载均衡/集群方案。


二、系统与基础组件准备

2.1 系统更新

sudo apt update && sudo apt upgrade -y
sudo reboot

2.2 安全设置(基础)

sudo apt install ufw -y
sudo ufw allow OpenSSH
sudo ufw allow http
sudo ufw allow https
sudo ufw enable


三、环境安装与组件部署

3.1 安装 Node.js

本文推荐使用 Node.js 18 及以上版本(长期支持版,与最新生态兼容性更好)。

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash
sudo apt install nodejs -y
node -v
npm -v

3.2 安装 MongoDB Community Edition

wget -qO – https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add
echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
sudo apt install -y mongodb-org
sudo systemctl enable mongod
sudo systemctl start mongod

确认 MongoDB 状态:

sudo systemctl status mongod
mongo –eval "db.runCommand({ connectionStatus: 1 })"


四、构建与部署 MERN 项目

本节以项目结构如下为例:

/home/ubuntu/mern-app
├── backend
│ ├── package.json
│ ├── server.js
│ └── routes
├── frontend
│ ├── package.json
│ └── src

4.1 后端部署(Express + Node.js)

进入后端目录并安装依赖:

cd /home/ubuntu/mern-app/backend
npm install

示例 server.js(仅为核心片段):

import express from "express";
import mongoose from "mongoose";
import cors from "cors";

const app = express();
app.use(cors());
app.use(express.json());

await mongoose.connect(process.env.MONGO_URI);
app.get("/health", (req, res) => res.send("OK"));

const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`Server running on ${port}`));

创建 .env:

MONGO_URI=mongodb://localhost:27017/mernDB
PORT=5000

测试启动:

npm start


4.2 前端构建(React)

cd /home/ubuntu/mern-app/frontend
npm install
npm run build

构建完成后得到生产资源在 build/ 目录。


五、进程管理与生产启动

我们推荐使用 PM2 管理后台 Node 进程。

sudo npm install pm2@latest -g
cd /home/ubuntu/mern-app/backend
pm2 start server.js –name mern-backend
pm2 save
pm2 startup systemd

查看运行状态:

pm2 list


六、静态资源服务与反向代理(Nginx)

6.1 安装 Nginx

sudo apt install nginx -y

6.2 配置 Nginx

创建 Nginx 配置 /etc/nginx/sites-available/mern:

server {
listen 80;
server_name your.domain.com;

root /home/ubuntu/mern-app/frontend/build;

location / {
try_files $uri /index.html;
}

location /api/ {
proxy_pass http://127.0.0.1:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}

启用站点并重载 Nginx:

sudo ln -s /etc/nginx/sites-available/mern /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx


七、HTTPS/TLS(Certbot 自动签发)

sudo apt install certbot python3-certbot-nginx -y
sudo certbot –nginx -d your.domain.com

按提示完成。


八、性能与安全调优

8.1 MongoDB 参数建议(/etc/mongod.conf)

参数推荐值说明
storage.wiredTiger.engineConfig.cacheSizeGB 2~4 减少内存占用(根据 RAM 调整)
net.bindIp 127.0.0.1 限制外部访问,仅允许本机
security.authorization enabled 启用访问控制

修改后重启:

sudo systemctl restart mongod

8.2 Nginx 缓存 & Gzip

在 server 块中添加:

gzip on;
gzip_types text/plain application/json application/javascript text/css;
gzip_min_length 256;

8.3 PM2 集群模式(多核利用)

pm2 start server.js -i max –name mern-cluster


九、监控与日志

工具作用
PM2 logs 应用日志实时查看
pm2 monit CPU/内存监控
Nginx logs 访问与错误日志
MongoDB logs 数据库操作与错误跟踪

常用日志路径:

  • Nginx 访问日志:/var/log/nginx/access.log
  • Nginx 错误日志:/var/log/nginx/error.log
  • MongoDB 日志:/var/log/mongodb/mongod.log

十、部署评测示例

以下是基于不同场景的基准评测数据示例(示例数据,实际应基于压测工具得出):

项目单线程 NodePM2 Cluster (4 核)
500 并发响应时间(ms) 180 90
每秒请求数(req/s) 1200 4200
CPU 平均占用 70% 65%
内存占用 1.2GB 2.8GB
MongoDB 连接数TPS内存消耗
100 1800 1.8GB
500 6100 6.5GB

注:以上 TPS/并发数据来自自定义 wrk 测试脚本(wrk -t4 -c100 -d30s http://your.domain.com/api/health),实际生产需结合业务特点调整压测策略。


十一、常见问题与解决

11.1 Nginx 502 错误

  • 检查后台进程是否运行
  • 检查 Nginx 代理端口是否正确

sudo systemctl status nginx
pm2 status

11.2 MongoDB 连接失败

  • 检查 mongod 是否已启动
  • 确认 MONGO_URI 环境变量正确

mongo –eval "db.stats()"

11.3 React 路由刷新 404

确保 Nginx 配置中 try_files $uri /index.html 存在。


十二、小结

A5数据通过本文,教你完成了:

  • Linux 服务器基础环境搭建与安全设置;
  • MERN 栈核心组件安装与配置;
  • 前后端构建与集成;
  • Nginx 反向代理与 HTTPS 配置;
  • 进程管理、监控与性能评测。

本方案适用于中小流量的生产级部署,并可根据业务规模进一步扩展至容器化(Docker)、自动化部署(CI/CD)等更高级架构。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 如何在 Linux 服务器上部署 MERN 全栈项目(MongoDB + Express + React + Node.js)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!