在阿里云轻量应用服务器(Simple Application Server)上部署 Node.js 后端以支撑小程序运行,核心在于环境搭建、依赖管理、网络配置以及安全策略。小程序后端通常涉及 HTTPS 通信、数据库连接以及高并发处理,因此部署流程需要严谨。
以下是基于生产环境的标准化部署方案:
一、前置准备与系统初始化
-
购买与基础配置
- 在阿里云控制台创建轻量应用服务器,建议选择 CentOS 7/8 或 Ubuntu 20.04/22.04 镜像。对于 Node.js 生态,Ubuntu 社区支持较好,包管理工具
apt体验流畅;若团队熟悉 CentOS,则使用yum/dnf。 - 设置强密码或绑定 SSH 密钥对进行登录,避免弱口令风险。
- 关键步骤:确保防火墙已开放必要端口。默认情况下,轻量应用服务器的“防火墙”只开放了 80、443 和 SSH 端口。你需要手动放行业务端口(如 Node.js 运行的 3000 端口),或者更推荐的做法是:让 Node.js 监听 80/443 端口(通过 Nginx 反向X_X),这样无需额外配置防火墙规则,直接利用 Web 服务标准端口。
- 在阿里云控制台创建轻量应用服务器,建议选择 CentOS 7/8 或 Ubuntu 20.04/22.04 镜像。对于 Node.js 生态,Ubuntu 社区支持较好,包管理工具
-
安装 Node.js 环境
不要直接使用系统源自带的旧版本 Node.js,建议安装 LTS(长期支持版)。- Ubuntu 示例:
# 添加 NodeSource 官方源 curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - # 安装 Node.js sudo apt-get install -y nodejs # 验证版本 node -v && npm -v - CentOS 示例:
# 使用 yum-config-manager 或 wget 脚本添加 NodeSource 源 sudo yum install -y epel-release curl -fsSL https://rpm.nodesource.com/setup_lts.x | sudo bash - sudo yum install -y nodejs
- Ubuntu 示例:
-
安装 PM2 进程管理器
小程序后端不能像本地开发那样直接跑node app.js,必须使用守护进程保证服务不挂掉并支持热更新。sudo npm install -g pm2
二、代码部署与构建
-
上传代码
使用scp、SFTP工具(如 FileZilla)或 Git 将后端代码推送到服务器。# 示例:克隆项目 git clone <你的仓库地址> /root/my-app cd /root/my-app -
安装依赖
注意:生产环境建议使用npm ci而非npm install,以确保依赖版本与package-lock.json严格一致,避免环境差异导致的 Bug。npm ci --production注:如果代码中包含原生模块(如
bcrypt,sharp等),可能需要安装编译工具链(build-essential或gcc),否则安装会报错。 -
环境变量配置
小程序后端常涉及数据库密码、JWT 密钥、微信 AppID/Secret 等敏感信息。严禁硬编码在代码中。- 在项目根目录创建
.env.production文件(需加入.gitignore)。 - 或者在启动命令中传递环境变量。
- 推荐使用
dotenv库读取环境变量。
- 在项目根目录创建
三、Nginx 反向X_X与 HTTPS(关键)
小程序强制要求后端接口必须是 HTTPS。虽然 Node.js 可以配置 SSL,但生产环境强烈建议将流量交给 Nginx 处理 SSL 卸载,Node.js 仅负责业务逻辑。
-
申请证书
- 方式 A(推荐):在阿里云控制台购买并自动部署到轻量应用服务器的 Nginx 上(一键部署功能)。
- 方式 B(免费):使用 Let’s Encrypt 的 Certbot 插件。
sudo apt-get install certbot python3-certbot-nginx # Ubuntu # 或 sudo yum install certbot python3-certbot-nginx # CentOS获取证书后,Nginx 会自动配置好 SSL 参数。
-
配置 Nginx
编辑/etc/nginx/sites-available/default(Ubuntu) 或/etc/nginx/conf.d/app.conf(CentOS):server { listen 80; server_name your-domain.com; # 替换为你的域名 location / { proxy_pass http://localhost:3000; # 指向 Node.js 端口 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; # 允许小程序长连接或大文件传输 proxy_read_timeout 60s; } } # 如果有证书,开启 HTTPS 部分 server { listen 443 ssl http2; server_name your-domain.com; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; location / { proxy_pass http://localhost:3000; # ... 同上X_X配置 } }重启 Nginx:
sudo nginx -t && sudo systemctl reload nginx。
四、启动服务与持久化
-
使用 PM2 启动
假设主入口文件为app.js,监听 3000 端口:pm2 start app.js --name "wechat-backend" -- --port 3000注意:如果是 Express/Koa 框架,确保代码中监听的端口是 3000,而不是根据环境变量动态变化的非标准端口,除非你修改了 Nginx 配置。
-
保存进程列表
防止服务器重启后服务未自启:pm2 save pm2 startup systemd # 生成并执行对应的启动脚本 -
查看日志
实时查看错误日志排查问题:pm2 logs wechat-backend
五、数据库与安全策略
-
数据库选择
- 方案 A(推荐):使用阿里云 RDS MySQL/PostgreSQL 或云数据库 Redis 实例。轻量服务器只需在内网访问 RDS,安全性高且性能稳定。
- 方案 B:在轻量服务器上自行安装 Docker 容器运行 MySQL/Redis。适合测试环境或预算有限的场景,但需注意数据备份和内存占用。
-
安全加固
- IP 白名单:在阿里云安全组(防火墙)中,限制数据库端口(如 3306)仅允许轻量服务器内网 IP 访问,禁止公网直接访问数据库。
- WAF 防护:如果业务敏感,可考虑接入阿里云 WAF(Web 应用防火墙)保护 API 接口,防止 SQL 注入或恶意爬取。
- CORS 配置:确保 Node.js 代码中的 CORS 中间件正确配置,只允许授权的微信小程序域名(
wx.getStorageSync('domain')或后台配置的合法域名)。
六、常见问题排查
- 小程序请求失败:检查是否开启了 HTTPS,域名是否在微信公众平台备案并填入合法域名列表。
- 502 Bad Gateway:通常是 Nginx 无法连接到 Node.js 进程,检查
pm2 status确认进程是否存活,以及 Node.js 监听端口是否与 Nginx 配置一致。 - 内存溢出:轻量服务器通常内存较小(2G-4G),若出现 OOM,需优化代码逻辑,增加 Swap 分区,或升级实例规格。
按照上述流程操作,即可构建一个符合生产标准、安全可靠的 Node.js 小程序后端环境。
CLOUD云枢