前端位于单仓的 frontend/ 目录,next.config.ts 支持两种输出:
NEXT_OUTPUT |
输出模式 | 用途 |
|---|---|---|
| 未设置(默认) | standalone |
独立部署到 Docker / Vercel / Node |
export |
静态导出 | 供后端 //go:embed all:web 打包进单容器 / 单二进制 |
单容器部署(推荐)不需要单独部署前端:见 Docker 一键部署。 本页用于需要独立/分布式部署前端的场景。
CI 构建阶段忽略 ESLint / TypeScript 报错,避免部署中断。
| 变量 | 场景 | 说明 |
|---|---|---|
NEXT_PUBLIC_API_URL |
前后端分离 | 独立后端 origin,如 http://localhost:8097;同源部署留空 |
NEXT_PUBLIC_X402_CLIENT_ID / _SECRET |
X402 演示页 | OAuth2 client 凭证(可选) |
NEXT_OUTPUT=export |
静态导出 | 为 Go //go:embed 准备产物 |
单容器同源部署下控制台走相对路径请求(
baseURL为空),不存在混合内容问题,也不需要任何代理。 只有在前后端分离部署时,才需要把NEXT_PUBLIC_API_URL指向独立后端 origin(此时跨源需后端 CORS + Cookie 凭证)。⚠️
NEXT_PUBLIC_*是构建期内联变量:必须在npm run build前注入,运行时改容器 env 不生效。 单容器镜像刻意不注入NEXT_PUBLIC_API_URL,产物走相对路径,从而适配任意域名/端口。
frontend/Dockerfile 为 node:20-alpine 多阶段构建,standalone 输出:
容器默认监听 3010,运行用户 nextjs(非 root),自带 healthcheck。
frontend/vercel.json 已配置(region hkg1),并可用 frontend/scripts/deploy.sh:
或在 Vercel 控制台设置环境变量后手动部署:
| Key | Value |
|---|---|
NEXT_PUBLIC_API_URL |
https://api.example.com(HTTPS 站点建议,走代理)或后端直连地址 |
部署在 Vercel 时页面协议为
https:,需把NEXT_PUBLIC_API_URL指向同样为 HTTPS 的后端地址。
Nginx 反代(仓库 frontend/nginx/ 提供完整配置示例):
/dashboard、/admin)由客户端组件 src/components/auth/AuthGuard.tsx 守护:未登录 → router.push('/login')。auth_token),浏览器自动携带;非安全方法由 apiClient 附带 X-CSRF-Token。auth_token、后端地址是否正确、/api/v1/verify 是否可达。NEXT_PUBLIC_API_URL 为 HTTP 直连。请让后端也走 HTTPS,或改用单容器同源部署。apiClient 自动 /api/v1/refresh;刷新失败会清 Cookie。output: export 不支持 src/app/api 与 src/middleware.ts,
单容器场景由 Go 侧承担代理与路由守卫,构建脚本会自动临时移开这两个路径。| 命令 | 说明 |
|---|---|
npm run dev |
本地开发(Turbopack,:3010) |
npm run build / npm run start |
生产构建 / 启动 |
npm run build:staging / build:prod |
预发布 / 生产构建 |
npm run lint |
ESLint |