如何将 Next.js 应用部署到腾讯云 CloudBase?HTTP 云函数方案详解
你有一个 Next.js 项目(使用 App Router + SSR),想部署到国内环境让用户正常访问。Vercel 国内访问不够稳定,自建服务器运维成本太高。你需要一个不用管服务器、支持 SSR、国内访问稳定的部署方案。 本文的解决方案:使用腾讯云 CloudBase 的 HTTP 云函数部署 Next.js 应用,配合自定义域名、环境变量和 CI/CD 自动化。 为什么选 HTTP 云函数而不是云托管? HTTP 云函数启动更快、配置更轻(不需要 Dockerfile),支持单实例多并发,原生兼容 Next.js 框架。 可选工具: 如果从零开始: 预期结果:浏览器访问 在项目根目录创建 文件内容: 关键约束: 预期结果: 安装 CloudBase MCP 后在编辑器中让 AI 执行部署。MCP 会调用 预期结果:获得 前置条件:域名已 ICP 备案 + 有效 SSL 证书。 控制台:HTTP 访问服务 → 添加自定义域名 → 关联云函数 → DNS 添加 CNAME。 GitHub Secrets 需配置: 参考文档:问题背景
环境要求
npm install -g @cloudbase/cli步骤一:创建或准备 Next.js 项目
npx create-next-app@latest my-cloudbase-app
cd my-cloudbase-app
npm run devhttp://localhost:3000 看到 Next.js 欢迎页。步骤二:配置 next.config.mjs
/** @type {import('next').NextConfig} */
const nextConfig = {
output: 'standalone',
images: {
unoptimized: true,
},
compress: true,
poweredByHeader: false,
}
export default nextConfig配置项 作用 不配会怎样 output: 'standalone'构建独立可运行产物 部署后缺少依赖,无法启动 images.unoptimized: true禁用图片优化 云函数环境缺少 Sharp,运行时报错 compress: true开启 gzip 压缩 传输体积更大 poweredByHeader: false隐藏框架信息 暴露 X-Powered-By 步骤三:创建 scf_bootstrap 启动文件
scf_bootstrap 文件(无扩展名):touch scf_bootstrap
chmod +x scf_bootstrap#!/bin/bash
export PORT=9000
export NODE_ENV=production
node .next/standalone/server.js常见错误:Windows 创建的文件默认 CRLF,部署后报
exec format error。解决:VS Code 右下角切换为 LF,或 dos2unix scf_bootstrap。步骤四:构建并补全静态资源
npm run build
cp -r public .next/standalone/public
cp -r .next/static .next/standalone/.next/static.next/standalone/server.js 存在,且包含 public/ 和 .next/static/ 目录。步骤五:部署到 CloudBase
方案 A:CloudBase MCP(AI 编辑器用户)
createFunction(type: HTTP)→ 上传代码 → createFunctionHTTPAccess 配置路由。https://{envId}.{region}.app.tcloudbase.com/nextjs-app方案 B:CLI
tcb login
tcb fn deploy nextjs-app --path . --override
tcb service create -f nextjs-app -p /nextjs-app部署失败排查
症状 原因 解决 502 Bad Gateway scf_bootstrap 端口非 9000 或换行符错误 检查端口和换行符 exec format error CRLF 换行符 转为 LF Module not found standalone 缺静态资源 重新执行 cp 命令 步骤六:绑定自定义域名
tcb domains add your-domain.com --certid <证书ID> -e <环境ID>
tcb routes set your-domain.com / --target nextjs-app --type function步骤七:配置环境变量
NEXT_PUBLIC_*:构建时注入,放 .env.productiontcb fn config update nextjs-app --envVariables '{"DATABASE_URL":"mysql://..."}'注意:API 更新环境变量会全量覆盖。先查再改。
步骤八:CI/CD
.github/workflows/deploy.yml:name: Deploy to CloudBase
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '18'
cache: 'npm'
- run: npm ci
- run: npm run build
- run: |
cp -r public .next/standalone/public
cp -r .next/static .next/standalone/.next/static
- run: npm i -g @cloudbase/cli
- run: tcb login --apiKeyId ${{ secrets.TCB_SECRET_ID }} --apiKey ${{ secrets.TCB_SECRET_KEY }}
- run: tcb fn deploy nextjs-app --path . --override -e ${{ secrets.TCB_ENV_ID }}TCB_SECRET_ID、TCB_SECRET_KEY、TCB_ENV_ID。补充:CloudBase MCP 和 Skills
npx skills add tencentcloudbase/cloudbase-skills已知限制