将小程序后端接口部署到腾讯云服务器(CVM)是一个常见且成熟的方案。以下是完整、清晰、可落地的配置步骤,涵盖环境准备、服务部署、安全配置、域名与 HTTPS、以及小程序调用注意事项:
✅ 一、前提准备
-
已开通腾讯云 CVM(云服务器)
- 推荐选择:Ubuntu 22.04 LTS / CentOS 7+(推荐 Ubuntu,生态友好)
- 规格建议:2核4G(初期)、系统盘 ≥50GB、带宽 ≥3Mbps(含备案和HTTPS开销)
- 安全组放行端口(关键!):
80(HTTP,临时调试)443(HTTPS,生产必需)3000/8080等你后端实际监听端口(仅限内网或反向X_X时关闭网络暴露!)
-
已备案并解析好域名(小程序要求
https+ 备案域名)- 域名需在腾讯云【域名注册】或【DNS 解析】中完成实名认证 & ICP 备案
- DNS 解析 A 记录指向你的 CVM 公网 IP
-
后端代码已准备好(如 Node.js/Python/Java/Go)
- 确保本地可运行,监听
0.0.0.0:3000(非127.0.0.1),支持跨域(开发期)或由 Nginx 统一处理 CORS - ✅ 小程序要求:所有接口必须走 HTTPS,且域名需在小程序后台「开发管理 → 服务器域名」中配置(request 合法域名)
- 确保本地可运行,监听
✅ 二、服务器基础配置(以 Ubuntu 22.04 为例)
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 安装必要工具
sudo apt install -y git curl wget nginx supervisor
# 3. 安装 Node.js(示例:Node.js 18.x)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt-get install -y nodejs
# 4. 创建部署目录 & 上传代码
mkdir -p /var/www/my-api
# 方式1:git clone(推荐)
git clone https://your-git-repo.com/backend.git /var/www/my-api
# 方式2:scp 上传 zip 后解压
# scp backend.zip user@your-cvm-ip:/tmp && unzip /tmp/backend.zip -d /var/www/my-api
# 5. 安装依赖 & 构建(根据项目类型调整)
cd /var/www/my-api
npm install --production # 生产环境不装 devDependencies
# 或:pip install -r requirements.txt(Python)
✅ 三、进程守护(防止崩溃退出)→ 推荐 pm2(Node)或 supervisor(通用)
▶️ Node.js 项目(使用 pm2)
# 全局安装 pm2
sudo npm install -g pm2
# 启动服务(假设入口是 app.js,监听 3000)
pm2 start app.js --name "my-weapp-api" --watch --ignore-watch="node_modules"
# 设置开机自启
pm2 startup
pm2 save
# 查看状态
pm2 list
pm2 logs my-weapp-api
▶️ Python(Flask/FastAPI)示例(用 supervisor)
# 编辑配置
sudo nano /etc/supervisor/conf.d/myapi.conf
[program:my-weapp-api]
command=/usr/bin/gunicorn -w 4 -b 127.0.0.1:8000 main:app
directory=/var/www/my-api
user=www-data
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/myapi.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start my-weapp-api
✅ 关键:后端只监听
127.0.0.1:3000(内网),不直接暴露公网端口,由 Nginx 反向X_X。
✅ 四、Nginx 反向X_X + HTTPS(核心!)
1️⃣ 安装并配置 Nginx
sudo systemctl enable nginx
sudo systemctl start nginx
2️⃣ 配置站点(/etc/nginx/sites-available/myapi)
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/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 安全加固(可选但推荐)
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
# 反向X_X到后端
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;
}
# 小程序要求:/upload 等路径也需透传(按需扩展)
# location /upload { proxy_pass http://127.0.0.1:3000/upload; }
}
3️⃣ 启用配置 & 申请免费 HTTPS 证书(腾讯云 DNS 验证)
sudo ln -sf /etc/nginx/sites-available/myapi /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
✅ 申请 SSL 证书(推荐腾讯云免费证书):
- 进入【腾讯云控制台 → SSL 证书服务】→ 免费证书 → 申请(域名需在腾讯云 DNS 解析)
- 下载证书(Nginx 版本)→ 上传到
/etc/nginx/ssl/ - 或用
acme.sh自动续签(进阶):curl https://get.acme.sh | sh ~/.acme.sh/acme.sh --issue --dns dns_qcloud -d api.yourdomain.com ~/.acme.sh/acme.sh --installcert -d api.yourdomain.com --cert-file /etc/nginx/ssl/fullchain.pem --key-file /etc/nginx/ssl/privkey.pem --reloadcmd "sudo nginx -t && sudo systemctl reload nginx"
✅ 五、小程序端配置(关键检查项!)
-
登录 微信公众平台 → 开发管理 → 开发设置
- ✅ 在「服务器域名」中添加:
https://api.yourdomain.com(必须是 HTTPS,且与 Nginx 配置的server_name一致)
⚠️ 不要加路径(如/api),只填域名;支持最多 20 个(含request、uploadFile、downloadFile等)
- ✅ 在「服务器域名」中添加:
-
前端请求示例(wx.request)
wx.request({ url: 'https://api.yourdomain.com/v1/login', method: 'POST', data: { code: 'xxx' }, success(res) { console.log(res.data); } }); -
✅ 确保后端响应头包含(Nginx 已自动处理 CORS):
Access-Control-Allow-Origin: https://your-miniprogram-domain.miniapp Access-Control-Allow-Methods: GET, POST, OPTIONS Access-Control-Allow-Headers: Content-Type, Authorization💡 实际上:小程序不走浏览器 CORS 检查,但服务端仍需正确返回
Content-Type: application/json,且不能有非法响应头(如X-Powered-By暴露版本)。
✅ 六、安全加固(生产必备)
| 项目 | 措施 |
|---|---|
| 🔐 防火墙 | sudo ufw enable + sudo ufw allow OpenSSH + sudo ufw allow 'Nginx Full' |
| 🛡️ SSH 安全 | 禁用密码登录,改用密钥;修改默认端口;禁用 root 登录 |
| 📦 依赖更新 | 定期 npm audit fix / pip list --outdated |
| 📊 日志监控 | pm2 log / journalctl -u nginx / tail -f /var/log/myapi.log |
| 🔄 自动备份 | 使用腾讯云 COS + rclone 或脚本定时备份数据库/代码 |
✅ 七、排错清单(高频问题)
| 现象 | 检查点 |
|---|---|
❌ 小程序报 request:fail net::ERR_CONNECTION_REFUSED |
① 后端是否启动?curl http://127.0.0.1:3000/test② Nginx 是否监听 443? sudo ss -tuln | grep ':443'③ 安全组是否放行 443? |
❌ 报 request:fail ssl handshaking error |
① 域名是否备案? ② SSL 证书是否过期? openssl x509 -in /etc/nginx/ssl/fullchain.pem -text -noout | grep "Not After"③ 证书链是否完整(fullchain.pem = cert + intermediate)? |
| ❌ 接口返回 502 Bad Gateway | ① 后端进程是否存活?pm2 list② proxy_pass 地址端口是否匹配?③ 后端是否监听 0.0.0.0 而非 127.0.0.1?→ 必须是 127.0.0.1(Nginx 同机)或 0.0.0.0(跨机) |
| ❌ 小程序提示“不在以下 request 合法域名列表中” | ① 微信后台配置的域名是否拼写错误?是否多空格? ② 是否用了 http://?必须 https://③ 是否未发布新版本?(配置保存后需重新提交审核或体验版) |
✅ 附:一键部署脚本(简化版,供参考)
# deploy.sh(运行前修改变量)
DOMAIN="api.yourdomain.com"
BACKEND_PORT=3000
# 安装 & 启动
sudo apt install -y nginx git
git clone https://xxx /var/www/api
cd /var/www/api && npm install --production
# 配置 Nginx(此处应生成真实 conf)
cat > /etc/nginx/sites-available/api <<EOF
server { listen 443 ssl; server_name $DOMAIN; ... }
EOF
sudo ln -sf /etc/nginx/sites-available/api /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
如需我帮你:
- ✅ 生成完整的 Nginx 配置模板(适配 Express/Koa/FastAPI/Django)
- ✅ 写一个
pm2启动脚本(含环境变量、日志轮转) - ✅ 配置腾讯云 COS 自动备份数据库
- ✅ 小程序 + 云开发(CloudBase)替代方案对比
欢迎随时告诉我你的技术栈(如:「用的是 Egg.js + MySQL」),我可以为你定制详细命令和配置文件 👇
祝你部署顺利,小程序上线成功!🚀
PHPWP博客