小白的技术手记
首页项目归档照片墙音乐灵境说说杂谈友链关于
封面

搭建这个博客,我选了 Next.js + Docker 的一万个理由

写作时间:2026-07-13T22:36:41.419Z
# Next.js
# Docker
# 架构
# 部署

搭建这个博客,我选了 Next.js + Docker 的一万个理由

前言

作为一个有几年 Java 开发基础、但对现代前端和 DevOps 比较手生的开发者,我决定搭建一个个人的技术博客。

这篇文章记录了从零到一的全过程——不仅仅是写代码,更重要的是技术决策的思考过程。

个人技术博客的架构与部署插画

为什么要有这个博客?

面试的时候最怕什么?"你有没有什么项目可以讲讲?"

这个博客,就是我的项目。它不是一个简单的 Hexo 静态站,而是一个:

  • 前后端分离的全栈应用
  • 容器化部署的实践案例
  • 持续集成/持续部署的落地项目

面试官看到这个博客,可以聊技术选型、可以聊架构设计、可以聊部署流程——这不比背八股文强?

技术选型

前端:Next.js

选择 Next.js 的理由:

  1. SSR + SSG:博客内容可以被搜索引擎收录(比纯 SPA 强)
  2. 全栈能力:Next.js 的 API Routes 可以直接做后端,但我选择分离——职责单一更符合工程实践
  3. React 生态:组件化开发,可复用,好维护
  4. 性能:自动代码分割、图片优化、ISR 增量静态生成

后端:Fastify + Prisma

  • Fastify:比 Express 快 2-3 倍,原生支持 TypeScript
  • Prisma:ORM 界的扛把子,类型安全、自动迁移、查询优化

数据库:PostgreSQL

选 PG 不选 MySQL 的原因:

  • JSONB 支持(灵活存储)
  • 全文检索(博客天然需要)
  • 开源社区活跃,文档完善

部署:Docker Compose

  • 三服务编排:PostgreSQL + Backend + Frontend
  • 统一管理,一键启动
  • 环境隔离,开发/生产配置分离

架构图

用户 → Nginx (443/80) → [Frontend:3000] → API → [Backend:4000] → [PostgreSQL:5432]

遇到的坑

1. Docker 网络问题

一开始后端连不上数据库——没注意 service 之间的通信要用容器名而不是 localhost。

解决:DATABASE_URL 里用 postgres:5432 而不是 localhost:5432

2. Prisma 在 Docker 中找不到 schema

在 Docker 构建时需要运行 prisma generate。Dockerfile 里要注意 copy schema 文件。

3. Next.js 的 standalone 模式

默认 docker build 出来的 image 很大(200MB+)。用 output: 'standalone' 可以降到 ~50MB。

总结

这个博客不是一个内容平台,它是我的能力展示。

  • 想看我怎么组织代码?→ 看 GitHub repo
  • 想看我怎么设计架构?→ 读这篇文章
  • 想看我怎么部署?→ 看 docker-compose.yml

一切都在代码里。

avatar

小白

全栈开发学习者,记录从零到一的技术实践、部署运维与 AI 工程探索。

GHG

RECOMMENDED

三天,我把一台‘能跑’的服务器变成了‘可恢复’的系统

2026-07-18T08:29:49+08:00

AI 不该只是顺着你:我为什么要求它‘有错必指出’

2026-07-18T07:37:49+08:00

计划失败以后,我没有删除它,而是把它归档了

2026-07-18T07:37:48+08:00

Table of Contents