以下是在阿里云 CentOS 服务器上部署微信小程序 Node.js 后端(推荐 Express + Nginx + PM2)的完整、安全、生产级教程,适用于新手且兼顾最佳实践(含 HTTPS、反向X_X、进程守护、防火墙配置等):
✅ 前提条件
- 已购买阿里云 ECS 实例(推荐 CentOS 7.9 或 CentOS 8.x,建议升级到 CentOS Stream 或迁移到 Alibaba Cloud Linux 3(更安全稳定))
- 已备案并解析好域名(如
api.yourdomain.com),用于微信后台配置request合法域名 - 微信小程序后台已配置:
开发管理 → 开发者工具 → 服务器域名 → request 合法域名(填https://api.yourdomain.com)
🌐 一、服务器基础配置(以 CentOS 7 为例)
1. 更新系统 & 安装基础工具
sudo yum update -y
sudo yum install -y curl wget git vim net-tools epel-release
2. 安装 Node.js(推荐 v18.x LTS,兼容性好 + 官方长期支持)
# 使用 NodeSource 源(比 EPEL 更新)
curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash -
sudo yum install -y nodejs
# 验证
node -v # v18.x.x
npm -v # >= 9.x
⚠️ 注意:避免使用
nvm(多用户环境不友好),生产环境用系统级安装更稳定。
📦 二、部署你的 Node.js 后端项目
1. 创建项目目录 & 上传代码
sudo mkdir -p /opt/wechat-backend
sudo chown -R $USER:$USER /opt/wechat-backend
cd /opt/wechat-backend
# 方式1:Git 克隆(推荐,便于更新)
git clone https://github.com/yourname/wechat-backend.git .
# 方式2:SCP 上传(本地打包后上传)
# scp -r ./dist user@your-server-ip:/opt/wechat-backend/
2. 安装依赖 & 环境配置
npm install --production # 生产环境只装 dependencies(跳过 devDependencies)
# 创建 .env 文件(敏感信息不要硬编码!)
cat > .env << 'EOF'
NODE_ENV=production
PORT=3000
WX_APPID=wx1234567890abcdef
WX_APPSECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
DB_HOST=localhost
DB_PORT=3306
DB_NAME=wechat_db
JWT_SECRET=your_strong_jwt_secret_here
EOF
# 设置权限(重要!防止泄露)
chmod 600 .env
✅ 微信关键配置说明:
WX_APPID/WX_APPSECRET:在微信公众平台 → 开发管理 → 基本配置获取- 小程序调用后端时,需用
code换取openid(后端调用微信接口https://api.weixin.qq.com/sns/jscode2session)
🛡️ 三、使用 PM2 守护进程(推荐!替代 forever / nodemon)
1. 全局安装 PM2
npm install -g pm2
2. 启动服务(带日志、监控、自动重启)
# 进入项目目录
cd /opt/wechat-backend
# 启动(指定 env 文件 + 监听 PORT)
pm2 start app.js --name "wechat-api"
--env production
--watch --ignore-watch="node_modules,.git,.env"
--time
# 查看状态
pm2 status
# 查看实时日志(按 Ctrl+C 退出)
pm2 logs wechat-api
# 设置开机自启(重要!)
pm2 startup systemd
pm2 save
✅ PM2 自动处理崩溃重启、负载均衡(集群模式可选)、内存监控,是生产首选。
🌐 四、配置 Nginx 反向X_X(支持 HTTPS)
1. 安装 Nginx
sudo yum install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
2. 获取免费 HTTPS 证书(Let’s Encrypt)
# 安装 certbot
sudo yum install -y certbot python3-certbot-nginx
# 获取证书(替换 yourdomain.com 为你的域名)
sudo certbot --nginx -d api.yourdomain.com
# ✅ 自动配置 HTTPS + 重定向 HTTP → HTTPS
# 证书位置:/etc/letsencrypt/live/api.yourdomain.com/{fullchain.pem,privkey.pem}
🔑 提示:首次运行会引导你输入邮箱、同意协议,并自动修改 Nginx 配置。
3. 验证并测试 Nginx 配置
sudo nginx -t # 应输出 "syntax is ok"
sudo systemctl reload nginx
4. (可选)手动检查 Nginx 配置(/etc/nginx/conf.d/api.yourdomain.com.conf)
server {
listen 80;
server_name api.yourdomain.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name api.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/api.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.yourdomain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
# 微信要求:必须支持 TLS 1.2+
ssl_protocols TLSv1.2 TLSv1.3;
location / {
proxy_pass http://127.0.0.1:3000; # 对应你 Node.js 的 PORT
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_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
proxy_redirect off;
}
# 静态资源缓存(如上传的图片)
location /uploads/ {
alias /opt/wechat-backend/uploads/;
expires 7d;
}
}
✅ 此配置满足微信小程序「HTTPS + TLS 1.2+」强制要求,且支持 WebSocket(如需长连接)。
🔥 五、安全加固(阿里云必备!)
1. 配置防火墙(firewalld)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
2. 阿里云安全组设置(控制台操作!)
- 登录 阿里云 ECS 控制台
- 找到你的实例 → 安全组 → 配置规则
- 放行端口:
80(HTTP,Let’s Encrypt 验证用)443(HTTPS,小程序访问)- ❌ 禁止开放 3000 端口给网络!(仅 Nginx 内部访问
127.0.0.1:3000)
3. (可选)禁用 root 远程登录 & 改 SSH 端口
# 编辑 /etc/ssh/sshd_config
sudo vim /etc/ssh/sshd_config
# 修改:PermitRootLogin no,Port 2222(示例)
sudo systemctl restart sshd
🧪 六、微信小程序端联调验证
1. 小程序中发起请求(确保使用 HTTPS)
wx.request({
url: 'https://api.yourdomain.com/api/login', // ✅ 必须 https
method: 'POST',
data: { code: res.code },
success(res) {
console.log('后端返回:', res.data);
}
});
2. 后端示例(Express 处理微信登录)
// app.js
const express = require('express');
const axios = require('axios');
require('dotenv').config();
const app = express();
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.post('/api/login', async (req, res) => {
const { code } = req.body;
const url = `https://api.weixin.qq.com/sns/jscode2session?appid=${process.env.WX_APPID}&secret=${process.env.WX_APPSECRET}&js_code=${code}&grant_type=authorization_code`;
try {
const wxRes = await axios.get(url);
const { openid, session_key } = wxRes.data;
if (!openid) throw new Error('Invalid code');
// 生成自定义 token(JWT)或存入数据库...
res.json({ openid, token: 'xxx' });
} catch (err) {
res.status(500).json({ error: err.message });
}
});
app.listen(process.env.PORT || 3000);
📋 七、日常运维命令速查
| 功能 | 命令 |
|---|---|
| 查看 PM2 日志 | pm2 logs wechat-api |
| 重启服务 | pm2 restart wechat-api |
| 查看 Node 进程 | pm2 show wechat-api |
| 重新加载代码(零停机) | pm2 reload wechat-api |
| 查看 Nginx 错误日志 | sudo tail -f /var/log/nginx/error.log |
| 申请/续期 SSL 证书 | sudo certbot renew --dry-run(测试)sudo certbot renew(生产) |
💡 Let’s Encrypt 证书 90 天过期,可加定时任务自动续期(certbot 默认已配置 cron)。
✅ 最终检查清单(上线前必做!)
| ✅ 项目 | 是否完成 |
|---|---|
域名已备案 & DNS 解析生效(ping api.yourdomain.com) |
☐ |
Nginx 返回 200 OK(curl -I https://api.yourdomain.com) |
☐ |
Node 服务监听 127.0.0.1:3000(netstat -tuln | grep :3000) |
☐ |
微信后台填写 https://api.yourdomain.com 到「request 合法域名」 |
☐ |
小程序真机测试 wx.request 成功(非开发者工具!) |
☐ |
console.error 不暴露敏感信息(如数据库密码) |
☐ |
🚀 进阶建议(后续优化)
- ✅ 数据库:安装 MySQL 8.0 或 PostgreSQL(阿里云 RDS 更省心)
- ✅ 日志集中:用
pm2-logrotate或对接 ELK/Sentry - ✅ 监控告警:用阿里云 ARMS 或 Prometheus + Grafana
- ✅ CI/CD:GitHub Actions 自动部署(推送即上线)
- ✅ 容器化:Docker + Docker Compose(适合多服务场景)
需要我为你提供:
- ✅ 完整的
app.js+package.json示例模板? - ✅ 微信登录 + JWT 鉴权完整代码?
- ✅ Docker 部署脚本?
- ✅ 阿里云 RDS + Redis 配置指南?
欢迎随时告诉我,我可以立即为你生成 👇
祝你小程序后端部署顺利,早日上线!🚀
如有报错(如 EACCES, CERT_HAS_EXPIRED, 502 Bad Gateway),欢迎贴出具体错误,我来帮你精准定位。
云知道CLOUD