先把概念厘清一下。很多人听到“部署小程序”,第一反应是找一台云服务器(CVM),装个 Nginx 或者 Tomcat,把代码扔上去。
大错特错。
微信小程序(WeChat Mini Program)和传统的前后端分离架构不一样。它有一个极其特殊的限制:域名白名单机制。
也就是说,你的小程序前端代码里发起网络请求(wx.request、wx.uploadFile 等)时,目标域名必须已经在微信公众平台配置过,且必须是 HTTPS。你没法像做普通 Web 项目那样,随便找个 IP 或域名就发请求。
所以,“部署小程序”其实分为两部分:
- 前端代码包:上传到微信服务器,由微信 CDN 分发。
- 后端服务:部署在腾讯云上(或其他云厂商),提供 API 接口。
下面我以最主流、成本最低、最适合个人开发者或小团队的方案为例,讲讲怎么在腾讯云搞定这一套流程。
核心思路:Serverless 化思维
别去折腾 CVM 了,除非你有复杂的微服务治理需求。对于大多数小程序后端,推荐用 腾讯云函数 SCF (Serverless Cloud Function) + API 网关。
为什么?
- 免运维:不用管 Linux 系统更新、安全补丁。
- 按量付费:没人访问不花钱,适合小程序初期流量不稳定的特点。
- 天然集成:和微信生态打通方便,权限管理简单。
第一步:准备后端环境(腾讯云侧)
1. 开通服务
登录 腾讯云控制台,搜索并开通以下两个服务:
- Serverless 云函数 (SCF)
- API 网关 (Apigateway)
注意:新用户通常有免费额度,够你用很久。
2. 编写后端代码
假设你用的是 Node.js(Python/Java 同理,Node 对异步 IO 友好,适合 I/O 密集型的小程序接口)。
创建一个简单的 Hello World 函数:
// index.js
exports.main_event = async (event, context) => {
// event 包含 HTTP 请求信息
const req = event.requestContext;
// 这里写你的业务逻辑,比如查数据库、调第三方接口
// 记得处理跨域问题!小程序虽然不直接涉及 CORS,但 API 网关需要正确返回头
return {
statusCode: 200,
headers: {
"Content-Type": "application/json",
// 如果需要支持前端调试,临时开启跨域(生产环境建议配好域名后去掉)
"Access-Control-Allow-Origin": "*",
"Access-Control-Allow-Methods": "GET, POST, OPTIONS",
"Access-Control-Allow-Headers": "Content-Type, Authorization"
},
body: JSON.stringify({
message: "Hello from Tencent Cloud SCF",
timestamp: Date.now()
})
};
};
3. 发布函数并创建 API 网关
- 在 SCF 控制台创建函数,选择“自定义创建”,运行时选 Nodejs 16.x 或 18.x。
- 将上述代码粘贴进去,保存并发布。
- 点击“触发方式” -> “添加触发器” -> 选择“API 网关”。
- 新建一个 API 服务:
- 协议类型:HTTPS
- 域名:可以选择腾讯云自动分配的
*.ap-shanghai.tencentscf.com域名,或者绑定你自己的已备案域名(推荐绑定自有域名,因为微信后台配置更灵活)。
- 获取 API 的公网访问地址,例如:
https://service-xxxxx.gz.apigw.tencentcs.com/release/hello
第二步:配置微信后台(关键步骤)
这是最容易卡住的地方。
- 登录 微信公众平台。
- 进入「开发」->「开发设置」。
- 找到「服务器域名」区域。
- 点击「修改」,在「request 合法域名」中,填入你在 API 网关生成的那个域名。
- 例如:
https://service-xxxxx.gz.apigw.tencentcs.com - 注意:必须是 HTTPS,且不能带端口号(除非是 443)。
- 注意:如果你绑定了自有域名,确保该域名已在工信部备案。
- 例如:
坑点提示:很多新手在这里报错
domain not in whitelist。请检查:
- 域名是否完全匹配(包括 https/http)。
- 是否刷新了微信服务器的缓存(有时候改完要等几分钟生效)。
- 如果是本地开发调试,可以在微信开发者工具里勾选“不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书”,但这仅限调试,上线前必须配置正确。
第三步:前端代码调用
在你的小程序项目里,使用 wx.request 调用后端:
Page({
onLoad: function () {
wx.request({
url: 'https://service-xxxxx.gz.apigw.tencentcs.com/release/hello', // 替换为你的 API 地址
method: 'GET',
header: {
'content-type': 'application/json'
},
success(res) {
console.log('后端返回数据:', res.data)
// 处理成功逻辑
},
fail(err) {
console.error('请求失败:', err)
}
})
}
})
第四步:上传与审核
- 本地预览:在微信开发者工具中点击“预览”,扫码即可在手机上看效果。此时如果后端没问题,你应该能看到
Hello from Tencent Cloud SCF。 - 上传代码:在开发者工具点击“上传”,填写版本号和描述。
- 提交审核:
- 登录微信公众平台。
- 进入「版本管理」->「开发版本」。
- 找到刚才上传的版本,点击“申请审核”。
- 发布:审核通过后(通常 1-7 天,视类目而定),点击“全量发布”。
进阶:如果我有静态页面(HTML/CSS/JS混合)怎么办?
有些小程序其实是“H5 嵌套”或者纯前端展示型,不需要复杂后端。
-
方案 A:云开发 (CloudBase)
- 腾讯云专门有个产品叫“云开发”。它提供了前端可以直接调用的数据库、存储和云函数。
- 对于纯前端+简单数据的小程序,这是最简单的路径。你只需要在开发者工具里初始化云开发环境,然后直接操作数据库,完全不用管服务器。
-
方案 B:对象存储 COS + CDN
- 如果你的小程序主要是展示图片、视频,或者是一个嵌入 H5 页面的容器。
- 将静态资源上传到腾讯云 COS。
- 开启 CDN 提速。
- 在微信后台配置域名时,指向 COS 提供的域名(需开启私有读写或公开读)。
常见避坑指南
-
SSL 证书:
- 腾讯云 API 网关默认会提供免费的 DV 证书。
- 如果你绑定自有域名,务必确保证书有效且未过期。过期会导致所有用户无法访问。
- 可以使用 Let’s Encrypt 免费证书,配合腾讯云自动续签插件。
-
跨域问题 (CORS):
- 小程序本身不涉及浏览器的同源策略,但在开发阶段或某些特殊场景下,API 网关返回的 Header 必须包含
Access-Control-Allow-Origin。 - 在 SCF 函数中手动设置 headers,或在 API 网关的“跨域配置”里设置允许的来源为
*或具体域名。
- 小程序本身不涉及浏览器的同源策略,但在开发阶段或某些特殊场景下,API 网关返回的 Header 必须包含
-
环境变量:
- 不要把数据库密码、AppID 硬编码在代码里。
- 利用 SCF 的“环境变量”功能,在控制台配置敏感信息,代码里通过
process.env.DB_PASSWORD获取。
-
冷启动延迟:
- Serverless 函数在无请求时会休眠。首次请求可能有 1-3 秒的延迟(冷启动)。
- 优化方法:保持函数实例数最小为 1(预留实例),或者在 API 网关层做简单的健康检查轮询。
总结
部署小程序上腾讯云,核心不在于“服务器怎么装系统”,而在于“如何打通微信的域名白名单”和“如何构建轻量级的 API 服务”。
- 小白/快速原型:直接用微信云开发,零服务器运维。
- 标准生产环境:用SCF + API 网关,成本低,扩展性强。
- 大型复杂系统:才考虑 ECS + Docker + K8s,但对于绝大多数小程序来说,这是杀鸡用牛刀。
按照上面的步骤走一遍,基本就能跑通一个完整的最小可行产品(MVP)。有问题再针对具体报错细节问。
云技术博客