跑微信小程序后端,选轻量应用服务器(Lighthouse)是个很务实的选择。成本低、网络直连微信生态方便,不用像 ECS 那样搞一堆复杂的 VPC 和 CLB 配置。
很多新手容易踩的坑是:直接装个 Node.js 就完事,结果上线后进程一挂服务就死,或者内存溢出连 SSH 都进不去。下面我按实战流程给你捋一遍,从环境搭建到保活部署,全是干货。
1. 系统选择与基础准备
别折腾 Windows Server,除非你非要跑 .NET 混编。Linux 是绝对主流。
- 推荐镜像:CentOS 7.9(虽然停止维护但生态最稳)、Ubuntu 20.04/22.04 LTS、Debian 11/12。
- 登录方式:通过控制台获取 IP 和密码,用 Xshell、FinalShell 或 VS Code Remote-SSH 连接。
2. Node.js 环境安装(避坑指南)
错误做法:去官网下载二进制包解压,然后配环境变量。一旦版本更新或路径出错,排查半天。
正确做法:使用 nvm (Node Version Manager)。
# 1. 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 2. 重新加载终端配置
source ~/.bashrc
# 3. 安装指定版本的 Node.js(建议选 LTS 长期支持版,如 v18 或 v20)
nvm install --lts
nvm use --lts
nvm alias default lts/*
# 4. 验证
node -v
npm -v
为什么用 nvm?
小程序后端可能需要频繁切换版本测试,或者项目依赖特定版本。nvm 让你在同一台机器上无缝切换,不会污染全局环境。
3. 数据库选型
微信小程序后端通常搭配 MySQL 或 MongoDB。
- MySQL:关系型数据强,适合订单、用户信息等结构化数据。
- MongoDB:文档型,适合日志、动态内容、快速迭代场景。
以 MySQL 为例(轻量服务器自带 LAMP/LNMP 镜像的话可能已预装,没预装则手动装):
# Ubuntu/Debian
sudo apt update
sudo apt install mysql-server
# CentOS
sudo yum install mysql-server
sudo systemctl start mysqld
sudo systemctl enable mysqld
关键步骤:初始化安全设置,修改 root 密码,创建专用数据库和用户。不要直接用 root 给应用连库。
4. 代码部署与 PM2 进程管理
这是最关键的一步。严禁使用 node app.js 直接运行。一旦终端关闭或进程崩溃,服务就没了。
你需要 PM2,一个 Node.js 进程管理器。
# 全局安装 pm2
npm install pm2@latest -g
# 将你的代码上传到服务器(比如 /home/www/my-app)
# 确保 package.json 存在,且 npm install 能跑通
cd /home/www/my-app
npm install
# 启动应用,并命名为 'wechat-api'
pm2 start app.js --name wechat-api
# 查看状态
pm2 list
# 保存当前进程列表,开机自启
pm2 save
pm2 startup
# 根据提示执行最后输出的那行命令(通常是 sudo env PATH=...)
PM2 的核心优势:
- 守护进程:后台常驻,不随 SSH 断开而停止。
- 自动重启:代码报错退出时,自动拉起来。
- 集群模式:如果 CPU 核数多,可以用
-i max开启多实例,提升并发处理能力。
5. 反向X_X与 HTTPS(微信强制要求)
微信小程序云开发除外,普通小程序后端必须使用 HTTPS。轻量服务器默认没有公网 SSL 证书,你需要自己搞定。
方案 A:Caddy(最简单,推荐)
Caddy 自动申请 Let’s Encrypt 免费证书,配置极简。
# 安装 Caddy (参考官方文档)
# 假设你的域名是 api.example.com
# 编辑 Caddyfile
cat > /etc/caddy/Caddyfile << EOF
api.example.com {
reverse_proxy localhost:3000
}
EOF
# 重启 Caddy
sudo systemctl restart caddy
注意:你的 Node.js 应用需要监听 localhost:3000,而不是 0.0.0.0:3000,这样只接受本地访问,外部请求全部由 Caddy 转发并加密。
方案 B:Nginx + Certbot
传统方案,灵活度高,但配置稍复杂。
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d api.example.com
6. 防火墙与安全组
轻量服务器有两层防火墙:
- 腾讯云控制台的安全组:必须在网页控制台打开端口(如 80, 443, 22)。
- 系统内部防火墙(firewalld/ufw):
# Ubuntu (ufw)
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 22/tcp
sudo ufw enable
# CentOS (firewalld)
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload
7. 常见运维问题排查
-
内存泄漏/OOM:
小程序后端如果是高频 IO 或处理大量图片,容易吃内存。- 检查方法:
pm2 monit实时看内存曲线。 - 解决:限制 Node.js 最大堆内存
NODE_OPTIONS="--max-old-space-size=512",或在ecosystem.config.js中配置max_memory_restart: '1G'。
- 检查方法:
-
文件上传失败:
微信前端上传图片,后端接收时注意临时目录权限。// 确保 uploads 目录存在且有写权限 const fs = require('fs'); const path = require('path'); const uploadDir = path.join(__dirname, 'uploads'); if (!fs.existsSync(uploadDir)) { fs.mkdirSync(uploadDir, { recursive: true }); } // 修改目录权限 process.umask(0); -
时区问题:
服务器默认 UTC 时间,导致日志时间比北京时间晚 8 小时。timedatectl set-timezone Asia/Shanghai
总结 Checklist
- [ ] 安装 nvm 管理 Node 版本。
- [ ] 安装 MySQL/MongoDB 并创建非 root 用户。
- [ ] 代码部署,执行
npm install。 - [ ] 使用 PM2 启动应用,设置开机自启。
- [ ] 配置 Nginx/Caddy 做反向X_X,申请 SSL 证书。
- [ ] 开放安全组和系统防火墙的 80/443 端口。
- [ ] 调整时区为 Asia/Shanghai。
- [ ] 测试微信端调用,确认 HTTPS 正常,无 Mixed Content 错误。
这套流程跑通后,你的轻量服务器就能稳定支撑一个中小型微信小程序的后端了。遇到具体报错,贴出 pm2 logs 或错误堆栈,再针对性解决。
云计算HECS