在阿里云 CentOS 服务器上部署微信小程序 Node.js 后端,通常涉及环境搭建、代码部署、服务管理、网络配置(安全组)以及域名解析等关键步骤。
以下是一份详细的操作教程,假设你使用的是 CentOS 7/8 系统,并计划使用 PM2 来管理 Node.js 进程(这是生产环境最常用的方式)。
第一阶段:准备工作
-
购买与初始化
- 登录阿里云控制台,购买一台 ECS 实例(推荐选择 CentOS 7.9 或 CentOS Stream 8)。
- 设置好 root 密码或 SSH 密钥对。
- 记录服务器的 公网 IP 地址。
-
连接服务器
使用终端工具(如 Windows 的 PowerShell/CMD,Mac/Linux 的 Terminal,或 Xshell、SecureCRT)通过 SSH 连接:ssh root@你的服务器公网IP
第二阶段:安装基础运行环境
我们需要安装 Node.js、NPM 和 PM2。推荐使用 nvm (Node Version Manager) 来管理版本,避免权限问题。
1. 安装 NVM 和 Node.js
# 安装 curl (如果系统没有)
yum install -y curl
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash
# 重新加载环境变量 (或者直接关闭 SSH 重连)
source ~/.bashrc
# 安装最新稳定版 Node.js (例如 v18.x)
nvm install 18
nvm use 18
nvm alias default 18
# 验证安装
node -v
npm -v
2. 安装 PM2 (进程管理器)
PM2 用于在生产环境守护 Node.js 应用,防止崩溃后无法自动重启。
npm install pm2 -g
pm2 --version
3. 安装 Git (用于拉取代码)
yum install -y git
第三阶段:代码部署
你可以选择将代码上传到服务器,或者直接从 GitHub/GitLab 拉取。这里演示从远程仓库拉取的方式。
1. 创建项目目录
mkdir -p /opt/wechat-nodejs
cd /opt/wechat-nodejs
2. 拉取代码
git clone <你的代码仓库地址> .
# 注意最后的点 "." 表示克隆到当前目录
3. 安装依赖
确保你的项目中包含 package.json。
# 建议先查看 package.json 中的 scripts,确认启动命令通常是 "start" 或 "dev"
npm install
注意:如果依赖包较多,建议配置淘宝镜像提速:npm config set registry https://registry.npmmirror.com
4. 配置环境变量
小程序后端通常需要配置数据库密码、Secret Key 等敏感信息。不要直接硬编码在代码中。
创建 .env 文件:
vi .env
内容示例:
NODE_ENV=production
PORT=3000
DB_HOST=localhost
DB_USER=root
DB_PASS=your_password
WECHAT_APPID=你的小程序AppID
WECHAT_SECRET=你的小程序AppSecret
保存退出 (:wq)。
第四阶段:启动服务
使用 PM2 启动项目。假设你的入口文件是 index.js 或 app.js。
# 启动命令格式:pm2 start <入口文件> --name <项目名称>
pm2 start index.js --name my-wechat-backend
# 保存当前进程列表,以便重启时自动恢复
pm2 save
# 查看状态
pm2 list
此时,你的 Node.js 服务应该已经在后台运行了。
第五阶段:网络与安全组配置 (关键步骤)
微信小程序必须通过 HTTPS 访问,且服务器端口必须开放。
1. 开放防火墙 (Firewalld)
CentOS 默认开启 firewalld,需要放行 Node.js 端口(假设是 3000)和 HTTPS (443)。
# 允许 3000 端口
firewall-cmd --zone=public --add-port=3000/tcp --permanent
# 允许 443 端口 (如果你打算自己配 SSL)
firewall-cmd --zone=public --add-port=443/tcp --permanent
# 重载防火墙配置
firewall-cmd --reload
2. 配置阿里云安全组
登录 阿里云 ECS 控制台 -> 云服务器 ECS -> 实例列表 -> 点击你的实例 ID -> 更多 -> 网络和安全组 -> 安全组配置。
- 点击“配置规则” -> “添加入方向规则”。
- 协议类型:TCP
- 端口范围:3000/3000 (或者你实际使用的端口)
- 授权对象:
0.0.0.0/0(允许所有 IP 访问,生产环境可限制为特定 IP) - 描述:Node.js 后端端口
- 策略:允许
重要提示:微信小程序要求接口必须是 HTTPS。
- 方案 A (推荐):使用阿里云负载均衡 (SLB) + 证书,或者在服务器前挂 Nginx 反向X_X并配置 SSL 证书。
- 方案 B (快速测试):如果只是为了调试,可以使用 Let’s Encrypt 免费证书配合 Nginx。
第六阶段:配置 Nginx 与 HTTPS (生产环境必备)
微信小程序强制要求 HTTPS。你需要安装 Nginx 并配置 SSL 证书。
1. 安装 Nginx
yum install -y nginx
systemctl start nginx
systemctl enable nginx
2. 获取 SSL 证书
你可以申请免费的 Let’s Encrypt 证书,或者在阿里云云盾控制台购买/申请免费证书。
假设你已经拿到了 fullchain.pem 和 privkey.pem 文件,上传到 /etc/nginx/ssl/ 目录下。
3. 配置 Nginx
编辑配置文件 /etc/nginx/conf.d/wechat.conf (需新建该文件):
server {
listen 443 ssl http2;
server_name your-domain.com; # 替换为你的域名
ssl_certificate /etc/nginx/ssl/fullchain.pem;
ssl_certificate_key /etc/nginx/ssl/privkey.pem;
# 优化配置
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
proxy_pass http://localhost:3000; # 转发到 Node.js 端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# WebSocket 支持 (如果需要聊天功能)
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
# 强制 HTTP 跳转 HTTPS
server {
listen 80;
server_name your-domain.com;
return 301 https://$server_name$request_uri;
}
4. 重载 Nginx
nginx -t # 检查配置是否正确
systemctl reload nginx
第七阶段:小程序端配置
- 修改请求地址:将小程序代码中的
request请求地址改为https://your-domain.com。 - 配置服务器域名:
- 登录 微信公众平台。
- 进入 开发 -> 开发管理 -> 开发设置。
- 找到 服务器域名 区域。
- 在 request 合法域名 中添加你的域名(例如
https://your-domain.com)。 - 注意:未备案的域名无法在微信后台添加,如果是个人主体小程序,建议使用已备案的域名。
第八阶段:验证与维护
- 测试连通性:
在本地浏览器访问https://your-domain.com/api/health(假设你有健康检查接口),确保能通。 - 查看日志:
pm2 logs my-wechat-backend - 定时备份:
定期备份数据库和代码目录。
常见问题排查
- 连接被拒绝:检查阿里云安全组是否放行了 3000 端口;检查
firewall-cmd是否生效。 - 微信报错“不在以下 request 合法域名列表中”:检查微信公众平台后台是否添加了域名,且域名是否以
https://开头。 - SSL 证书过期:如果是 Let’s Encrypt 证书,记得配置
certbot自动续期。 - 内存溢出:如果 Node.js 占用过高,可在
package.json中增加--max-old-space-size参数启动 PM2。
通过以上步骤,你就完成了一个标准的阿里云 CentOS + Node.js + 微信小程序后端的部署流程。
轻量云Cloud