碎碎念

Wineclouds04 Website 播客介绍

摘要:Wineclouds04 Website 是一套面向个人创作者的全栈自托管博客与内容运营平台。本文从公开站、管理端、后端架构、数据安全到生产部署,完整介绍这个项目如何把写作、互动与长期运营连接起来。

2,239 字8 分钟阅读21 次浏览

网站搭了又拆,折腾这么久也打算静下心来做个纯洁的博客,结果越做越多最终变成这样。 单纯记录下碎碎念和介绍自己搓的小工具 下面是博客介绍

不只是博客页面,而是一套长期内容系统

这个项目的核心目标不是堆叠技术名词,而是让写作与运营形成一条完整链路:

  1. 创作者在管理端撰写 Markdown 内容并实时预览;
  2. 文章可以保存为草稿、立即发布、回溯发布时间或设置未来的定时发布;
  3. 公开站通过服务端渲染输出文章、分类、标签、归档和搜索页面;
  4. 访客可以阅读、点赞、评论,并在上一篇、下一篇和相关文章之间继续探索;
  5. 站长可以在后台审核评论、管理媒体、查看访问趋势和调整站点资料;
  6. 运维层通过容器编排、健康检查、加密备份和版本化发布保证网站长期可维护。

这条链路让 Wineclouds04 Website 从一个“页面项目”变成了一个能够持续生长的内容基础设施。

访客看到的公开站

公开站基于 Nuxt 与 Vue 构建,并使用服务端渲染。这样做不仅是为了首屏速度,也为了让文章内容更容易被搜索引擎理解,并在社交平台分享时呈现完整的标题、摘要和页面信息。

围绕阅读体验,公开站提供了:

  • 首页内容展示与文章列表;
  • 文章详情、上一篇与下一篇导航;
  • 分类、标签、时间归档与站内搜索;
  • 相关文章推荐;
  • RSS、Sitemap、robots.txt 与 SEO 元数据;
  • 明暗主题、移动端布局和减少动画偏好支持;
  • 匿名点赞、两级评论与文章浏览统计;
  • GitHub 贡献日历以及可配置的公开社交入口。

这些能力并不是孤立存在的。分类、标签和归档帮助读者建立内容脉络,搜索负责快速定位,相关文章与前后篇导航则让一次偶然访问变成连续阅读。

创作者使用的独立管理端

网站的另一面是一套独立的管理后台。它与公开站使用不同的访问入口和界面结构,让“阅读”和“运营”彼此分离。

文章编辑器以 Markdown 为核心,同时提供实时预览、字数统计、阅读时长估算和常用排版工具。编辑内容时可以设置摘要、可见性、分类、标签、置顶、评论开关以及 SEO 信息。

文章生命周期也被完整考虑:

  • 新文章可以先保存为草稿;
  • 草稿支持持续编辑和自动保存;
  • 发布时可以使用当前时间,也可以自定义过去的发布时间;
  • 选择未来时间后,文章会进入定时状态并在到点后自动发布;
  • 已发布文章可以更新、撤回或归档;
  • 定时文章可以提前立即发布,也可以取消定时。

除了文章,管理端还整合了分类与标签、媒体资源、评论审核、管理员回复、站点资料、访问统计、热门内容、趋势看板和操作日志。

创作者不需要频繁进入数据库或修改配置文件,就可以完成绝大多数日常运营工作。

前后端分离,但围绕同一条内容链路协作

项目将公开站、管理端和后端拆成三个清晰的应用:

  • 公开站:Nuxt 4、Vue 3、TypeScript 与 Nitro SSR;
  • 管理端:Vue 3、Vite、Pinia、Vue Router 与 ECharts;
  • 后端 API:Java、Spring Boot、Spring Security、MyBatis 与 Flyway。

一次典型的公开访问会沿着下面的链路完成:

访客浏览器 → Nginx → Nuxt SSR → Spring Boot API → MySQL / Redis

管理端请求则是:

管理员浏览器 → Nginx → Vue 管理端 → Spring Boot API → MySQL / Redis

Nginx 负责域名路由、TLS、安全响应头和统一入口。公开站负责页面渲染与阅读体验,管理端负责内容运营,Spring Boot 则集中处理文章、鉴权、评论、媒体、通知、统计和分类标签等业务。

这种拆分让每一层都能保持清晰职责,同时又通过统一 API 和共享数据模型连接起来。

数据、缓存与可选集成

MySQL 保存文章、分类、标签、评论、用户、媒体元数据、操作日志和统计等核心业务数据。数据库结构由 Flyway 迁移管理,使每次结构变化都可以随版本安全落地,而不是依赖人工执行零散 SQL。

Redis 用于缓存、会话与计数等高频场景,减轻数据库压力并改善公开页面的响应速度。后端对公开内容进行缓存,在文章发布、更新或定时发布到点时主动刷新,保证读者尽快看到最新内容。

项目还保留了多种可选集成:

  • 腾讯云 COS:用于媒体文件存储;
  • SMTP:用于评论回复等邮件通知;
  • GitHub GraphQL API:用于同步贡献数据;
  • Prometheus 指标:用于运行状态观测。

这些功能都可以按需启用。没有配置时,核心博客能力仍然可以独立运行。

安全不是上线前临时补的一层

自托管意味着自由,也意味着需要认真对待安全边界。

生产环境只由 Nginx 对外暴露 80 和 443 端口,MySQL、Redis、后端、公开站和管理端都运行在内部容器网络中。管理端使用基于 JWT 的登录会话,后端同时提供会话撤销、验证码、访问限流与操作日志等防护能力。

所有密码、令牌、云服务密钥和生产配置都只保存在运行环境中,不进入 Git 仓库或发布包。发布前的预检会检查占位密码、过短密钥、证书、环境文件格式和 Compose 配置,尽可能在上线之前阻止危险配置。

公开交互同样有明确边界:评论需要经过校验与审核流程,匿名访问使用受控的访客标识和限流策略,后台操作则保留审计记录。

从本地开发到生产发布

整个系统通过 Docker Compose 统一编排。完整运行环境包含六个服务:

  1. MySQL;
  2. Redis;
  3. Spring Boot 后端;
  4. Nuxt 公开站;
  5. Vue 管理端;
  6. Nginx 网关。

每个核心服务都有健康检查,启动时会等待依赖就绪。开发者可以通过一条 Compose 命令启动完整栈,也可以分别运行前端和后端进行源码开发。

生产发布使用不可变版本号。发布脚本会依次完成生产预检、数据库加密备份、镜像构建、服务重建、健康检查和版本记录。

源码升级前还可以保留回滚快照,备份则支持恢复到隔离数据库进行演练。

这套流程的价值在于:发布不再是一组只能靠记忆执行的命令,而是一条可以检查、验证和回退的工程化路径。

为什么选择自托管

使用现成内容平台通常更快,但自托管提供了另一种价值:

  • 内容和数据由自己掌握;
  • 域名、页面和交互方式可以持续演进;
  • 不被单一平台的产品策略限制;
  • 可以把真实需求转化为长期迭代的工程实践;
  • 网站本身也成为个人作品和技术能力的一部分。

Wineclouds04 Website 适合希望搭建个人主页、技术博客、作品记录或长期数字档案的人,也适合想了解现代全栈项目如何连接前端、后端、数据层和运维流程的开发者。

开源与继续生长

项目源码已经托管在 GitHub:

Wineclouds04 Website 源码仓库

公开站可以直接访问:

Wineclouds’Blog

这个项目仍会继续迭代。未来的重点不是盲目增加功能,而是持续改善写作体验、内容发现、访问性能、交互安全和发布可靠性,让它真正成为一套可以陪伴创作者很多年的个人内容系统。

结语

一个个人网站最迷人的地方,是它既可以是一篇文章的容器,也可以是一段长期成长轨迹的见证。

Wineclouds04 Website 想做的,正是把这种自由保留下来:让创作者专注表达,让读者舒适阅读,同时让系统在看不见的地方稳定、安全、可维护地运行。

如果你也在思考怎样建立自己的数字空间,希望这个项目能提供一些灵感。

感谢你读到这里。愿这页文字,恰好对你有一点用。

CONVERSATION

回应与回声

1 条公开评论
曼
曼波

沙发