努力
加油

如何将开发好的小程序部署到腾讯云上?

先把概念厘清一下。很多人听到“部署小程序”,第一反应是找一台云服务器(CVM),装个 Nginx 或者 Tomcat,把代码扔上去。

大错特错。

微信小程序(WeChat Mini Program)和传统的前后端分离架构不一样。它有一个极其特殊的限制:域名白名单机制。

也就是说,你的小程序前端代码里发起网络请求(wx.request、wx.uploadFile 等)时,目标域名必须已经在微信公众平台配置过,且必须是 HTTPS。你没法像做普通 Web 项目那样,随便找个 IP 或域名就发请求。

所以,“部署小程序”其实分为两部分:

  1. 前端代码包:上传到微信服务器,由微信 CDN 分发。
  2. 后端服务:部署在腾讯云上(或其他云厂商),提供 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 网关

  1. 在 SCF 控制台创建函数,选择“自定义创建”,运行时选 Nodejs 16.x 或 18.x。
  2. 将上述代码粘贴进去,保存并发布。
  3. 点击“触发方式” -> “添加触发器” -> 选择“API 网关”。
  4. 新建一个 API 服务:
    • 协议类型:HTTPS
    • 域名:可以选择腾讯云自动分配的 *.ap-shanghai.tencentscf.com 域名,或者绑定你自己的已备案域名(推荐绑定自有域名,因为微信后台配置更灵活)。
  5. 获取 API 的公网访问地址,例如:https://service-xxxxx.gz.apigw.tencentcs.com/release/hello

第二步:配置微信后台(关键步骤)

这是最容易卡住的地方。

  1. 登录 微信公众平台。
  2. 进入「开发」->「开发设置」。
  3. 找到「服务器域名」区域。
  4. 点击「修改」,在「request 合法域名」中,填入你在 API 网关生成的那个域名。
    • 例如:https://service-xxxxx.gz.apigw.tencentcs.com
    • 注意:必须是 HTTPS,且不能带端口号(除非是 443)。
    • 注意:如果你绑定了自有域名,确保该域名已在工信部备案。

坑点提示:很多新手在这里报错 domain not in whitelist。请检查:

  1. 域名是否完全匹配(包括 https/http)。
  2. 是否刷新了微信服务器的缓存(有时候改完要等几分钟生效)。
  3. 如果是本地开发调试,可以在微信开发者工具里勾选“不校验合法域名、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)
      }
    })
  }
})

第四步:上传与审核

  1. 本地预览:在微信开发者工具中点击“预览”,扫码即可在手机上看效果。此时如果后端没问题,你应该能看到 Hello from Tencent Cloud SCF。
  2. 上传代码:在开发者工具点击“上传”,填写版本号和描述。
  3. 提交审核:
    • 登录微信公众平台。
    • 进入「版本管理」->「开发版本」。
    • 找到刚才上传的版本,点击“申请审核”。
  4. 发布:审核通过后(通常 1-7 天,视类目而定),点击“全量发布”。

进阶:如果我有静态页面(HTML/CSS/JS混合)怎么办?

有些小程序其实是“H5 嵌套”或者纯前端展示型,不需要复杂后端。

  1. 方案 A:云开发 (CloudBase)

    • 腾讯云专门有个产品叫“云开发”。它提供了前端可以直接调用的数据库、存储和云函数。
    • 对于纯前端+简单数据的小程序,这是最简单的路径。你只需要在开发者工具里初始化云开发环境,然后直接操作数据库,完全不用管服务器。
  2. 方案 B:对象存储 COS + CDN

    • 如果你的小程序主要是展示图片、视频,或者是一个嵌入 H5 页面的容器。
    • 将静态资源上传到腾讯云 COS。
    • 开启 CDN 提速。
    • 在微信后台配置域名时,指向 COS 提供的域名(需开启私有读写或公开读)。

常见避坑指南

  1. SSL 证书:

    • 腾讯云 API 网关默认会提供免费的 DV 证书。
    • 如果你绑定自有域名,务必确保证书有效且未过期。过期会导致所有用户无法访问。
    • 可以使用 Let’s Encrypt 免费证书,配合腾讯云自动续签插件。
  2. 跨域问题 (CORS):

    • 小程序本身不涉及浏览器的同源策略,但在开发阶段或某些特殊场景下,API 网关返回的 Header 必须包含 Access-Control-Allow-Origin。
    • 在 SCF 函数中手动设置 headers,或在 API 网关的“跨域配置”里设置允许的来源为 * 或具体域名。
  3. 环境变量:

    • 不要把数据库密码、AppID 硬编码在代码里。
    • 利用 SCF 的“环境变量”功能,在控制台配置敏感信息,代码里通过 process.env.DB_PASSWORD 获取。
  4. 冷启动延迟:

    • Serverless 函数在无请求时会休眠。首次请求可能有 1-3 秒的延迟(冷启动)。
    • 优化方法:保持函数实例数最小为 1(预留实例),或者在 API 网关层做简单的健康检查轮询。

总结

部署小程序上腾讯云,核心不在于“服务器怎么装系统”,而在于“如何打通微信的域名白名单”和“如何构建轻量级的 API 服务”。

  • 小白/快速原型:直接用微信云开发,零服务器运维。
  • 标准生产环境:用SCF + API 网关,成本低,扩展性强。
  • 大型复杂系统:才考虑 ECS + Docker + K8s,但对于绝大多数小程序来说,这是杀鸡用牛刀。

按照上面的步骤走一遍,基本就能跑通一个完整的最小可行产品(MVP)。有问题再针对具体报错细节问。