从零搭建个人博客系统:全栈开发实战指南
本文记录了从 0 到 1 搭建 blog.railx.cn 博客系统的完整过程,涵盖技术选型、架构设计、核心功能实现、部署上线等全流程。基于 Next.js 14 + TypeScript + Tailwind CSS + PostgreSQL + Prisma 技术栈,适合作为全栈开发入门实战项目参考。
折
折腾侠
2026/03/15 发布
17约 3 分钟420 字 / 289 词00
五、部署上线
5.1 Docker 配置
Dockerfile
FROM node:20-alpine AS base
FROM base AS deps
WORKDIR /app
COPY package.json package-lock.json* ./
RUN npm ci
FROM base AS builder
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build
FROM base AS runner
WORKDIR /app
ENV NODE_ENV production
RUN addgroup --system --gid 1001 nodejs
RUN adduser --system --uid 1001 nextjs
COPY --from=builder /app/public ./public
COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static
USER nextjs
EXPOSE 3000
CMD ["node", "server.js"]
5.2 Nginx 配置
Nginx
server {
listen 80;
server_name blog.railx.cn;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name blog.railx.cn;
ssl_certificate /etc/nginx/ssl/blog.railx.cn.crt;
ssl_certificate_key /etc/nginx/ssl/blog.railx.cn.key;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
六、项目成果
| 指标 | 目标 | 实际 |
|---|---|---|
| 首屏加载 | < 1s | 0.6s ✅ |
| Lighthouse | > 90 | 96 ✅ |
| 文章数量 | 30+ | 31 ✅ |
功能清单
- ✅ 文章 CRUD 管理
- ✅ 分类标签系统
- ✅ Markdown 渲染 + 代码高亮
- ✅ SEO 优化(Sitemap、Meta 标签)
- ✅ RSS 订阅
- ✅ 响应式设计 + 深色模式
- ✅ Docker 容器化部署
- ✅ HTTPS 支持
七、经验总结
踩过的坑
- Next.js 14 App Router 学习曲线:需要时间熟悉新路由约定
- Prisma 迁移管理:生产环境迁移需谨慎,先测试环境验证
- 图片优化:初期忘记压缩,导致加载慢
最佳实践
- 类型安全:全程 TypeScript,减少运行时错误
- 组件拆分:保持单一职责,易于复用测试
- 渐进增强:先核心功能,再高级特性
- 文档先行:写代码前先写文档理清思路
八、后续规划
- 评论系统:集成 Giscus 或自建
- 搜索功能:使用 Meilisearch 全文搜索
- 数据分析:集成 Umami 或 Plausible
- 邮件订阅:RSS to Email 定期推送
- 多语言支持:i18n 中英文切换
结语
从零搭建博客系统是一个很好的全栈练手项目,涵盖前端、后端、数据库、部署等各个环节。通过这个项目,我不仅拥有了一个完全可控的内容平台,也系统性地实践了现代 Web 开发的最佳实践。
如果你也想搭建自己的博客,不妨参考本文的技术选型和实现思路。当然,也可以直接使用现成的博客系统(如 Ghost、Hexo),但自建的乐趣在于过程中的学习和成长。
折腾不止,学习不息。 希望这篇文章对你有所帮助!
本文是 blog.railx.cn 第 32 篇文章,属于「项目实战」分类。