以下是在阿里云 CentOS 服务器上部署微信小程序 Node.js 后端(推荐 Express + Nginx + PM2)的完整、安全、生产级教程,适用于新手,兼顾稳定性、HTTPS 和微信合规要求。
✅ 前提条件
- 阿里云 ECS 实例:CentOS 7/8(推荐 CentOS 7.9 或 Alibaba Cloud Linux 3,避免 CentOS 8 已停更)
- 已备案域名(微信小程序要求后端域名必须备案!)
- 微信小程序后台已配置合法的 request 合法域名(如
https://api.yourdomain.com) - SSH 访问权限(使用 Xshell / Termius / macOS Terminal)
🌐 一、基础环境准备(以 CentOS 7 为例)
1. 更新系统 & 安装必要工具
sudo yum update -y
sudo yum install -y epel-release curl wget git vim net-tools
2. 安装 Node.js(推荐 v18.x LTS,兼容性好)
⚠️ 不要用
yum install nodejs(版本太旧),用官方二进制或 nvm(推荐 nvm 更灵活)
✅ 方式一:使用 nvm(推荐,便于多版本管理)
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
source ~/.bashrc
nvm install 18.19.0 # 当前 LTS 版本
nvm use 18.19.0
node -v # 应输出 v18.19.0
npm -v # 应输出 ≥ 9.x
✅ 方式二:直接下载 Node.js 二进制(无网络X_X时)
cd /tmp
wget https://nodejs.org/dist/v18.19.0/node-v18.19.0-linux-x64.tar.xz
tar -xf node-v18.19.0-linux-x64.tar.xz
sudo mv node-v18.19.0-linux-x64 /opt/nodejs
sudo ln -sf /opt/nodejs/bin/node /usr/local/bin/node
sudo ln -sf /opt/nodejs/bin/npm /usr/local/bin/npm
📦 二、上传并配置你的 Node.js 后端项目
1. 创建项目目录(规范路径)
sudo mkdir -p /var/www/wechat-api
sudo chown -R $USER:$USER /var/www/wechat-api
cd /var/www/wechat-api
2. 上传代码(任选其一)
- ✅ Git 克隆(推荐):
git clone https://github.com/yourname/wechat-backend.git . - ✅ SFTP 上传(使用 FileZilla / WinSCP 上传压缩包后解压):
unzip wechat-backend.zip
3. 安装依赖 & 验证
npm install --production # 生产环境不安装 devDependencies
# ✅ 检查 package.json 中是否含 "start": "node server.js" 或类似脚本
4. 🔑 关键配置:适配生产环境
- 修改
config.js或.env:NODE_ENV=production PORT=3000 APP_ID=wx1234567890abcdef APP_SECRET=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 数据库连接地址建议用内网(如阿里云 RDS 内网地址) DB_HOST=rm-xxx.mysql.rds.aliyuncs.com DB_USER=your_user DB_PASSWORD=your_pass - ✅ 禁止在代码中硬编码敏感信息 → 使用
.env+dotenv包(npm install dotenv)
🚀 三、使用 PM2 管理进程(核心!)
1. 全局安装 PM2
npm install -g pm2
2. 启动服务(守护进程 + 自启动)
# 进入项目目录
cd /var/www/wechat-api
# 启动(指定环境变量和日志)
pm2 start app.js --name "wechat-api"
--env production
--output ./logs/out.log
--error ./logs/err.log
--log-date-format "YYYY-MM-DD HH:mm:ss"
# 查看状态
pm2 list
# 保存当前进程列表(开机自启)
pm2 startup systemd # 按提示执行生成的命令(如 sudo env PATH=... pm2 startup ...)
pm2 save
✅ 此时服务已在 http://localhost:3000 运行(但外部不可访问)
🌍 四、配置 Nginx 反向X_X(支持 HTTPS + 微信要求)
1. 安装 Nginx
sudo yum install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
2. 配置反向X_X(关键!)
创建配置文件:
sudo vim /etc/nginx/conf.d/wechat-api.conf
server {
listen 80;
server_name api.yourdomain.com; # ✅ 替换为你的备案域名
# 强制 HTTPS(微信要求必须 HTTPS)
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name api.yourdomain.com;
# SSL 证书(见下一步)
ssl_certificate /etc/letsencrypt/live/api.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/api.yourdomain.com/privkey.pem;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384;
# 反向X_X到 Node.js
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_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
}
# 微信校验文件(如有需要)
location ~ ^/.well-known/acme-challenge/ {
root /var/www/letsencrypt;
}
}
3. 获取免费 HTTPS 证书(Let's Encrypt)
# 安装 certbot
sudo yum install -y certbot python3-certbot-nginx
# 临时关闭 Nginx(或先配置好 80 端口监听)
sudo systemctl stop nginx
# 获取证书(需确保域名 DNS 解析到该服务器 IP)
sudo certbot certonly --standalone -d api.yourdomain.com
# ✅ 成功后证书位于:/etc/letsencrypt/live/api.yourdomain.com/
💡 若 Nginx 已占用 80 端口,改用
--webroot模式(推荐):sudo mkdir -p /var/www/letsencrypt sudo certbot certonly --webroot -w /var/www/letsencrypt -d api.yourdomain.com
4. 启动 Nginx 并测试
sudo nginx -t # 检查语法
sudo systemctl restart nginx
✅ 访问 https://api.yourdomain.com 应返回你的 API(如 {"code":200,"msg":"OK"})
🔐 五、安全加固(阿里云必做)
| 项目 | 操作 |
|---|---|
| 防火墙 | sudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --reload |
| 安全组 | 登录 阿里云控制台 → ECS → 安全组 → 开放 80、443 端口(仅限公网),禁止开放 3000 端口!(Node.js 仅监听 127.0.0.1) |
| SELinux | 如遇 502 错误,临时检查:sudo setsebool -P httpd_can_network_connect 1 |
📱 六、微信小程序端配置(关键!)
- 登录 微信公众平台
- 进入「开发管理」→「开发设置」→「服务器域名」
- 在 request 合法域名 中添加:
https://api.yourdomain.com⚠️ 注意:
- 必须是
https开头 - 不能带路径(如
https://api.xxx.com/v1❌) - 必须已备案、已解析、HTTPS 可访问
- 本地调试可勾选「不校验合法域名」(仅开发环境)
- 必须是
🧪 七、验证与排错
| 现象 | 排查命令 |
|---|---|
502 Bad Gateway |
sudo tail -f /var/log/nginx/error.log + pm2 logs wechat-api |
Connection refused |
curl -v http://127.0.0.1:3000(确认 Node 是否运行)+ netstat -tuln | grep :3000 |
| HTTPS 不生效 | curl -I https://api.yourdomain.com 检查状态码;用 SSL Labs 测试证书 |
| 微信请求失败 | 小程序 wx.request() 中 url 必须为 https://api.yourdomain.com/login,且后端响应头含 Content-Type: application/json |
✅ 附:一键部署脚本(可选)
将以下保存为 deploy.sh,修改域名后运行:
#!/bin/bash
DOMAIN="api.yourdomain.com"
PROJECT_DIR="/var/www/wechat-api"
git pull origin main
npm install --production
pm2 reload wechat-api
sudo nginx -t && sudo systemctl reload nginx
echo "✅ Deployed: https://$DOMAIN"
📚 扩展建议(进阶)
- ✅ 日志:用
pm2 logrotate自动轮转日志 - ✅ 监控:
pm2 monit或接入阿里云 ARMS - ✅ 数据库:阿里云 RDS MySQL(开启内网访问,禁止公网)
- ✅ 备份:定时备份
/var/www/wechat-api+ 数据库(OSS 存储) - ✅ CI/CD:GitHub Actions 自动部署(推送即上线)
✅ 至此,你的微信小程序 Node.js 后端已在阿里云 CentOS 上稳定、安全、合规运行!
如需我帮你:
- 生成
server.js示例(Express + 微信登录) - 配置 MongoDB / MySQL 连接池
- 添加 JWT 鉴权中间件
- 部署 WebSocket(如客服消息)
欢迎随时告诉我 👇
祝你开发顺利,小程序早日上线!🚀
CLOUD云计算