在阿里云轻量应用服务器(Lighthouse)上部署 Node.js 后端以支持微信小程序,是一个常见且高效的方案。以下是完整、安全、可落地的部署指南(基于 Ubuntu 22.04 LTS + Node.js 18.x + PM2 + Nginx 反向X_X + HTTPS),兼顾开发效率与生产稳定性:
✅ 一、前期准备
| 项目 | 要求 |
|---|---|
| 服务器 | 阿里云轻量应用服务器(推荐 2核4G,系统选 Ubuntu 22.04 LTS) |
| 域名 | 已备案的国内域名(如 api.yourdomain.com),小程序后端必须使用备案域名 + HTTPS |
| SSL证书 | 免费:阿里云免费 SSL 证书(或 Let’s Encrypt) |
| 小程序配置 | 在微信公众平台 → 开发管理 → 开发者工具 →「服务器域名」中添加 https://api.yourdomain.com |
⚠️ 注意:
- 国内服务器必须完成 ICP 备案,否则微信小程序无法调用;
- 小程序不支持 HTTP,必须配置 HTTPS;
- 轻量服务器默认关闭所有端口,需手动开放:
80(HTTP)、443(HTTPS)、3000(开发调试可选,生产建议禁用)。
✅ 二、服务器初始化(SSH 登录后执行)
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 安装 Node.js 18.x(官方推荐 LTS)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
# 验证
node -v # v18.x.x
npm -v # ≥ 9.x
# 3. 安装 PM2(进程守护,避免 Node 进程退出)
sudo npm install -g pm2
# 4. 安装 Nginx(反向X_X + HTTPS 终结)
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
✅ 三、部署你的 Node.js 后端(以 Express 为例)
▶ 步骤 1:上传代码(推荐方式)
- 方式①(推荐):用
git clone(确保代码已推送到 GitHub/GitLab 私有仓库)mkdir -p /var/www/myapp cd /var/www/myapp git clone https://github.com/yourname/miniapp-backend.git . npm install --production # 仅安装 dependencies(跳过 devDependencies) - 方式②:本地打包
.tar.gz后scp上传(适合无 Git 环境)
▶ 步骤 2:创建最小化 server.js 示例(验证可用性)
// /var/www/myapp/server.js
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// ✅ 小程序要求:必须支持 OPTIONS 预检(CORS)
app.use((req, res, next) => {
res.header('Access-Control-Allow-Origin', '*'); // 生产建议精确到小程序域名
res.header('Access-Control-Allow-Methods', 'GET,POST,OPTIONS,PUT,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-WX-KEY');
if (req.method === 'OPTIONS') return res.sendStatus(200);
next();
});
app.get('/test', (req, res) => {
res.json({ code: 0, data: { msg: 'Hello from Aliyun Lighthouse!' } });
});
app.post('/login', (req, res) => {
console.log('MiniApp login req:', req.body);
res.json({ code: 0, data: { token: 'mock_token_123' } });
});
app.listen(PORT, '0.0.0.0', () => {
console.log(`✅ Server running on http://localhost:${PORT}`);
});
▶ 步骤 3:用 PM2 启动并守护
cd /var/www/myapp
pm2 start server.js --name "miniapp-api" --env production
# 设置开机自启
pm2 startup
pm2 save
# 查看状态
pm2 status
pm2 logs miniapp-api
✅ 此时服务已在
http://localhost:3000运行(仅本地可访问)。
✅ 四、配置 Nginx 反向X_X + HTTPS(关键!)
1️⃣ 获取 SSL 证书(阿里云控制台操作)
- 登录 阿里云 SSL 证书服务
- 购买/申请「免费版 DV SSL」证书(绑定你的已备案域名
api.yourdomain.com) - 下载证书 → 选择「Nginx」格式 → 解压得到:
api_yourdomain_com.pem(证书公钥)api_yourdomain_com.key(证书私钥)
2️⃣ 上传证书到服务器
sudo mkdir -p /etc/nginx/ssl
sudo scp api_yourdomain_com.pem api_yourdomain_com.key user@your-server-ip:/tmp/
sudo mv /tmp/api_yourdomain_com.* /etc/nginx/ssl/
3️⃣ 配置 Nginx(替换 /etc/nginx/sites-available/default 或新建)
# /etc/nginx/sites-available/miniapp-api
upstream node_backend {
server 127.0.0.1:3000; # 指向你的 Node.js 服务
keepalive 64;
}
server {
listen 80;
server_name api.yourdomain.com;
# 强制 HTTPS 重定向
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name api.yourdomain.com;
# SSL 证书
ssl_certificate /etc/nginx/ssl/api_yourdomain_com.pem;
ssl_certificate_key /etc/nginx/ssl/api_yourdomain_com.key;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
# 日志
access_log /var/log/nginx/miniapp-api-access.log;
error_log /var/log/nginx/miniapp-api-error.log;
# 反向X_X到 Node.js
location / {
proxy_pass http://node_backend;
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 /uploads/ {
alias /var/www/myapp/uploads/;
expires 7d;
}
}
4️⃣ 启用配置 & 重启 Nginx
sudo ln -sf /etc/nginx/sites-available/miniapp-api /etc/nginx/sites-enabled/
sudo nginx -t # 检查语法
sudo systemctl reload nginx
✅ 此时访问 https://api.yourdomain.com/test 应返回 JSON(注意是 https!)
✅ 五、小程序前端调用示例(app.js 或页面中)
// 微信小程序中发起请求(必须 HTTPS)
wx.request({
url: 'https://api.yourdomain.com/test',
method: 'GET',
success(res) {
console.log('API Success:', res.data); // {code:0, data: {...}}
},
fail(err) {
console.error('API Failed:', err);
}
});
✅ 小程序开发者工具中需开启「不校验合法域名」仅用于调试,真机测试必须使用已配置的 HTTPS 域名。
✅ 六、安全加固(生产必备)
| 项目 | 操作 |
|---|---|
| 🔒 关闭非必要端口 | 在阿里云控制台 → 轻量服务器 → 防火墙 中,仅开放 80、443,关闭 3000、22(或限制 SSH 白名单 IP) |
| 🛡️ 限制 Node.js 权限 | 创建专用用户运行 PM2:sudo adduser --disabled-password --gecos "" nodeusersudo chown -R nodeuser:nodeuser /var/www/myappsudo -u nodeuser pm2 start ... |
| 📦 自动更新 | 配置 pm2 deploy 或用 GitHub Actions 自动拉取部署(进阶) |
| 📊 监控日志 | pm2 monit 或 pm2 logs 实时查看;Nginx 日志位于 /var/log/nginx/ |
✅ 七、排错清单(高频问题)
| 现象 | 检查点 |
|---|---|
❌ 小程序报 request:fail net::ERR_CONNECTION_REFUSED |
① 域名未备案;② Nginx 未监听 443;③ 阿里云安全组未放行 443;④ server_name 配置错误 |
❌ 返回 502 Bad Gateway |
① Node.js 进程未启动(pm2 status);② 端口不匹配(Nginx proxy_pass vs Node PORT);③ Node 报错崩溃(pm2 logs) |
| ❌ CORS 报错 | 后端未处理 OPTIONS 请求(见上方中间件);或 Access-Control-Allow-Origin 写死为 * 但带 Cookie(需改为具体域名 + credentials:true) |
| ❌ HTTPS 不生效 | ① SSL 证书路径错误;② 证书未正确绑定域名;③ 浏览器缓存(用隐身窗口测试) |
✅ 附:一键部署脚本(可选,复制保存为 deploy.sh)
#!/bin/bash
APP_DIR="/var/www/myapp"
DOMAIN="api.yourdomain.com"
# 安装依赖
apt update && apt install -y nginx curl gnupg
# 安装 Node.js 18
curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -
apt install -y nodejs
# 安装 PM2
npm install -g pm2
# 创建目录 & 拉取代码(请按需修改)
mkdir -p $APP_DIR
cd $APP_DIR
git clone https://github.com/your-repo/backend.git .
npm install --production
# 启动
pm2 start server.js --name miniapp-api
# 配置 Nginx(需提前上传证书)
cat > /etc/nginx/sites-available/miniapp-api <<EOF
...
# (粘贴上方 Nginx 配置)
EOF
ln -sf /etc/nginx/sites-available/miniapp-api /etc/nginx/sites-enabled/default
nginx -t && systemctl reload nginx
echo "✅ 部署完成!访问 https://$DOMAIN/test"
如需进一步支持,可提供:
- 你的 Node.js 框架(Express / Koa / NestJS?)
- 是否需要数据库(MySQL / MongoDB / Redis?)
- 是否需要微信登录/支付对接?
- 是否需要 CI/CD 自动化?
我可以为你定制完整脚手架或 Docker 化部署方案 👇
祝你小程序上线顺利!🚀
云知识