在阿里云 CentOS 服务器上运行微信小程序的 Node.js 后端,需要完成环境搭建、代码部署、进程管理、安全配置等步骤。以下是完整操作指南:
一、前置准备
-
服务器要求
- 阿里云 ECS(CentOS 7/8 或 Rocky Linux 9 等兼容版)
- 已开通安全组端口(至少
3000或你自定义的端口,如8080) - 域名 + SSL 证书(微信小程序要求 HTTPS,建议申请免费 Let’s Encrypt 证书)
-
本地开发验证
- 确保 Node.js 项目能在本地通过
npm start正常启动 - 确认小程序调用接口地址为
https://你的域名/api/xxx(非 localhost)
- 确保 Node.js 项目能在本地通过
二、安装基础环境
# 1. 更新系统
sudo yum update -y
# 2. 安装 Node.js(推荐使用 nvm 管理版本)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
source ~/.bashrc
nvm install --lts # 安装最新 LTS 版本(如 v20.x)
node -v && npm -v
# 3. 安装 PM2(进程守护工具)
sudo npm install -g pm2
# 4. 安装 Nginx(反向X_X + SSL 终止)
sudo yum install nginx -y
sudo systemctl enable nginx
sudo systemctl start nginx
✅ 提示:若需 MySQL/Redis 等数据库,可同步安装或使用阿里云 RDS/ApsaraDB for Redis(更推荐云产品)。
三、部署项目代码
方式一:Git 拉取(推荐)
cd /opt
git clone https://github.com/your-repo/wechat-node-backend.git
cd wechat-node-backend
npm install # 安装依赖
# 创建生产环境变量文件
cp .env.example .env
vim .env # 填入真实配置(如 DB 密码、JWT 密钥、微信 AppID/Secret)
方式二:SCP 上传压缩包
# 本地打包
tar -czf backend.tar.gz node_modules package.json server.js ...
# 上传到服务器
scp backend.tar.gz root@your-server-ip:/opt/
# 解压并安装依赖
ssh root@your-server-ip
cd /opt
tar -xzf backend.tar.gz
npm install --production
四、使用 PM2 启动服务
# 启动应用(指定入口文件,如 app.js 或 index.js)
pm2 start app.js --name "wechat-backend" --env production
# 保存进程列表(重启后自动恢复)
pm2 save
pm2 startup # 生成 systemd 命令,按提示执行
# 查看状态
pm2 status
pm2 logs
🔐 关键:确保
app.js中监听的是0.0.0.0:3000(而非localhost),例如:const PORT = process.env.PORT || 3000; app.listen(PORT, '0.0.0.0', () => { console.log(`Server running on port ${PORT}`); });
五、配置 Nginx 反向X_X + HTTPS
1. 获取 SSL 证书(Let’s Encrypt)
sudo yum install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your-domain.com
# 按提示输入邮箱、同意条款,自动配置 Nginx + 续期脚本
2. 配置 Nginx 站点
sudo vim /etc/nginx/conf.d/wechat-backend.conf
内容示例:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com www.your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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_cache_bypass $http_upgrade;
# 超时设置(避免长连接断开)
proxy_connect_timeout 60s;
proxy_send_timeout 60s;
proxy_read_timeout 60s;
}
}
3. 重载 Nginx
sudo nginx -t && sudo systemctl reload nginx
六、安全加固建议
| 项目 | 操作 |
|---|---|
| 防火墙 | firewall-cmd --add-port=80/tcp --permanentfirewall-cmd --add-port=443/tcp --permanentfirewall-cmd --reload |
| SSH 安全 | 禁用 root 登录、改用密钥认证、修改默认 22 端口 |
| Node 权限 | 创建专用用户运行应用(非 root):sudo useradd -m appuserchown -R appuser:appuser /opt/wechat-node-backend |
| 日志监控 | 配置 journalctl -u pm2-appuser 或接入阿里云 SLS 日志服务 |
| 防暴力破解 | 安装 fail2ban 封禁异常 IP |
七、测试验证
-
本地 curl 测试
curl -k https://your-domain.com/api/test -
微信小程序真机调试
- 在开发者工具中开启「不校验合法域名」临时测试
- 正式提交前务必将
request中的domain加入 微信公众平台 → 开发管理 → 开发设置 → 服务器域名
-
PM2 日志检查
pm2 logs wechat-backend
常见问题排查
| 问题 | 解决方案 |
|---|---|
ECONNREFUSED |
检查 Node 是否监听 0.0.0.0;PM2 是否启动成功 |
| 404 Not Found | 检查 Nginx location 路径与 Express 路由匹配 |
| WebSocket 断开 | 确保 Nginx 配置了 Upgrade 和 Connection 头 |
| 内存溢出 | 增加 NODE_OPTIONS="--max-old-space-size=2048" 或在 PM2 配置中设置 max_memory_restart |
需要我提供:
- 📦 完整的
package.json模板? - 🔐
.env安全最佳实践清单? - 🔄 Docker 化部署方案(更适合持续集成)?
欢迎告诉我你的具体需求,我可以进一步定制方案。
PHPWP博客