Loading…
Warming up the lab…
Warming up the lab…
架构:浏览器 → 反向代理 → [ Next.js (前端) + Go API (后端) ] → 数据库
/ → Next.js、/api → GoNEXT_PUBLIC_* 与 Go 的 .env 分开管理,均不入仓库gin-contrib/cors| 模式 | 适用条件 | 部署方式 | 特点 |
|---|---|---|---|
| 静态导出 SSG | 纯静态页,无 SSR/Server Actions/图片优化 | next build 产物直接丢给 Nginx/Caddy 托管 | ✅ 最简单,不占服务器进程 |
| SSR / Standalone ⭐ | 用了 SSR、Server Actions、next/image、动态路由 | output: 'standalone' + Docker 容器,跑 Node 进程 | ✅ 全功能,需进程守护(多一个容器) |
| Vercel 托管 | 国内访问速度可接受 | 前端上 Vercel,后端留自己服务器 | ✅ 零运维,但国内延迟/被墙风险 |
⭐ 国内服务器自托管,推荐 Standalone 模式:
next.config.js加output: 'standalone',Docker 多阶段构建,镜像小、启动快。
| 层级 | 推荐方案 | 备注 |
|---|---|---|
| 前端 | Next.js standalone + Docker | SSR 全功能;纯静态可退回 SSG |
| 后端 | Go + Gin + GORM | Docker 镜像 |
| 数据库 | PostgreSQL | 学习:Docker 容器;生产:云数据库 RDS |
| 反向代理 | Nginx / Caddy | 核心职责变为路由分发:/ → Next:3000,/api → Go:8080 |
| 进程守护 | Docker 路线:restart: unless-stopped 统管两个容器 | 二进制路线才用 systemd |
| 域名+HTTPS | Let's Encrypt(Certbot)或 Caddy 自动 | — |
next.config.js 开 output: 'standalone' → 写 Next 的 Dockerfile.env(前端 NEXT_PUBLIC_API_URL、后端数据库连接串),均加入 .gitignoredocker-compose.yml 编排 3 个服务:web(next) + api(go) + db(postgres),docker-compose up -d/ → Next,/api → Go(同域名 = 无需 CORS)/api)→ 验证 HTTPSservices:
web: # Next.js standalone
build: ./frontend
restart: unless-stopped
api: # Go + Gin
build: ./backend
restart: unless-stopped
environment: ← .env 注入
db: # PostgreSQL
image: postgres:16
volumes: [pgdata:/var/lib/postgresql/data]
restart: unless-stopped阶段一:Next 静态导出 + Go 二进制,Nginx 托管跑通 ← 最短路径
阶段二:双端 Docker 化 + docker-compose 编排 ← 标准化
阶段三:HTTPS / 备案 / 数据库迁移 RDS / 备份监控 ← 生产化
记忆口诀:前端 Next、后端 Go、同域代理、容器编排 → 备案 → 加固